
PR-7
.pdf
МИНОБРНАУКИ РОССИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
«МИРЭА - Российский технологический университет»
РТУ МИРЭА
Институт Информационных Технологий Кафедра Вычислительной Техники (ВТ)
ОТЧЁТ ПО ЛАБОРАТОРНОЙ РАБОТЕ № 1
«Реализация конечных автоматов» по дисциплине
«Архитектура вычислительных машин и систем»
Выполнил студент группы |
Ханашевич К.А. |
ИВБО-10-23 |
|
Принял ассистент кафедры ВТ |
Дуксина И.И. |
Лабораторная работа выполнена |
«__»_______2025 г. |
«Зачтено» |
«__»_______2025 г. |
Москва 2025
АННОТАЦИЯ
Данная работа включает в себя 3 рисунка, 3 листинга. Количество страниц
в работе — 12.
|
СОДЕРЖАНИЕ |
|
ВВЕДЕНИЕ.................................................................................................................. |
4 |
|
1 |
ПОСТАНОВКА ЗАДАЧИ ....................................................................................... |
5 |
2 |
ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ ............................................................... |
6 |
2.1 Реализация автомата Мили................................................................................... |
6 |
|
2.2 Описание конечного автомата Мура на языке Verilog...................................... |
7 |
|
ЗАКЛЮЧЕНИЕ ......................................................................................................... |
11 |
|
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ ............................................... |
12 |
3
ВВЕДЕНИЕ
Автомат Мура —синхронный автомат, у которого выходные значения определяются только состоянием автомата в тот же дискретный момент времени.
При этом комбинационная схема, вычисляющая выходные значения, не связана непосредственно с входными сигналами.
Автомат Мили — синхронный автомат, у которого вход и выход не развязаны во времени, т.е. хотя бы один выход зависит от текущего значения на входе.
Автоматная таблица является одним из способов задания функций определения нового состояния, а также определения выходного значения для автоматов. Каждая строка таблицы соответствует состоянию автомата, а каждый столбец — символу входного алфавита. На пересечении строки с индексом i и
столбцом с индексом j располагается новое состояние автомата, в которое переходит автомат, находясь в состоянии i при приходе входного слова j, а также значение выхода автомата (для автомата Мили — в текущий дискретный момент времени, для автомата Мура — в следующий дискретный момент времени).
Для проектирования автомата средствами языка Verilog, следует остановить своё внимание на операторе «case». Оператор «case» является оператором выбора. Имеется три формы данного оператора: «case», «casex» «casez». Оператор «сasex» игнорирует биты, отмеченные как «x» или как «z», в
то время как оператор «сasez» игнорирует только биты, отмеченные как «z».
4

1 ПОСТАНОВКА ЗАДАЧИ
Реализовать автомат Мили, заданный графом, в соответствии с вариантом,
который определяет выходные значения для каждого из состояний автомата на языке Verilog. Автомат должен иметь три входа: a,b,c (помимо входа синхросигнала). На графе над дугой указаны три символа, их следует трактовать как значения для a, b, c соответственно, необходимые для совершения обозначенного перехода. Варианты заданий присутствуют в СДО или могут быть изменены преподавателем самостоятельно.
Индивидуальный вариант:
5

2 ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ
2.1 Реализация автомата Мили
Для реализации автомата Мили по данному автоматному графу был создан модуль с входами переменных “a”, “b”, “c”, двухбитным выходом “state”,
отвечающем за кодирование актуального состояния автомата (двумя битами можно зашифровать 4 состояния) и однобитным выходом “result”, отвечающим за результат работы автомата. Так, в состоянии 1 операция на выходе “result”
должна быть “c | b”, для 2 – “a ↓ b”, для 3 – “b → c”, для 4 – “c | a”.
Зададим начальное состояния автомата как нулевое, далее с помощью оператора case и вложенных в него операторов casex получим следующее состояние автомата, также после перехода на новое состояние обновляем и выход “result”, зависящий от состояния автомата. Реализация модуля автомата Мили на языке Verilog представлена в Листинге 2.1.
Листинг 2.1 — Реализация модуля автомата Мили
`timescale 1ns / 1ps
module Mealy_SFM( input a, b, c,
output reg [1:0] state, output reg result);
initial
state = 2'd0;
always@* begin
case (state) 3'd0: begin
casex ({a, b, c})
3'b1x0: state = 2'd0; 3'b1x1: state = 2'd1; 3'b0xx: state = 2'd2;
endcase end 3'd1: begin
casex ({a, b, c})
3'bx10: state = 2'd0; 3'bx11: state = 2'd1; 3'bxx0: state = 2'd2; 3'bx0x: state = 2'd3;
endcase end
6

3'd2: begin
casex ({a, b, c})
3'bxx0: state = 2'd1; 3'bxx1: state = 2'd3;
endcase end 3'd3: begin
casex ({a, b, c})
3'bx0x: state = 2'd0; 3'bx1x: state = 2'd2;
endcase end
endcase
case (state)
2'd0: result = ~(c & b); 2'd1: result = ~a & ~b; 2'd2: result = ~b | c; 2'd3: result = ~(c & a);
endcase
end
endmodule
2.2 Описание конечного автомата Мура на языке Verilog
Пусть стоит задача построить автомат Мура, эквивалентный автомату Мили, рассматриваемого в пункте 2.1. Для синтеза такого автомата будет построена автоматная таблица автомата Мили, в которой последовательность входов зафиксирована от «а» к «b» к «c» (Таблица 2.1).
Таблица 2.1. Автоматная таблица автомата Мили
Состояние\входы |
000 |
001 |
010 |
011 |
100 |
101 |
110 |
111 |
|
|
|
|
|
|
|
|
|
S0 |
S2 |
S2 |
S2 |
S2 |
S0 |
S1 |
S0 |
S1 |
|
|
|
|
|
|
|
|
|
S1 |
S2 S3 |
S3 |
S0 S2 |
S1 |
S2 S3 |
S3 |
S0 S2 |
S1 |
|
|
|
|
|
|
|
|
|
S2 |
S1 |
S3 |
S1 |
S3 |
S1 |
S3 |
S1 |
S3 |
|
|
|
|
|
|
|
|
|
S3 |
S0 |
S0 |
S2 |
S2 |
S0 |
S0 |
S2 |
S2 |
|
|
|
|
|
|
|
|
|
Выход автомата зависит непосредственно от состояния, в котором он находится, поэтому не может быть ситуаций, в которых автомат находясь в 1ом состоянии выдаст действие другого состояния. Поэтому количество состояний не измениться. Исходный код модуля для автомата Мура представлен в Листинге
2.2.
7

Листинг 2.2 — Реализация модуля автомата Мура
`timescale 1ns / 1ps `define A 2'b00 `define B 2'b01 `define C 2'b10 `define D 2'b11
module Mur_SFM( input a, b, c, clk,
output reg [1:0] state, output reg d
);
initial state = 2'd0;
reg [1:0] next_state = 0;
always @(posedge clk) begin state = next_state; casex({state,a,b,c})
{`A, 3'b1x0}, {`B, 3'bx10}, {`D, 3'bx0x}: next_state <= `A; {`A, 3'b1x1}, {`B, 3'bx11}, {`C, 3'bxx0}: next_state <= `B; {`A, 3'b0xx}, {`B, 3'bxx0}, {`D, 3'bx1x}: next_state <= `C; {`B, 3'bx0x}, {`C, 3'bxx1}: next_state <= `D;
endcase end
always @(state) |
begin |
case (state) |
|
2'd0: d |
= ~(c & b); |
2'd1: d |
= ~a & ~b; |
2'd2: d |
= ~b | c; |
2'd3: d |
= ~(c & a); |
endcase |
|
end |
|
endmodule |
|
Был написан тестовый модуль (Листинг 2.3), в котором были учтены все возможные переходы состояний в соответствии с индивидуальным вариантом.
Схемы автоматов Мура и Мили представлены на Рисунках 2.2 и 2.3, временная диаграмма – Рисунок 2.4. Можно заметить, что состояние автомата Мура меняется только при переднем фронте синхросигнала, что является причиной сдвига состояний автомата Мура относительно Мили, а также влечет за собой использование иных значений переменных при подсчете выражений в состояниях автомата.
Листинг 2.3 — Реализация модуля тестирования
`timescale 1ns / 1ps
module test();
reg clk = 0, a, b, c;
wire result_mili, result_mur; wire [1:0] state_mili, state_mur;
8

Mealy_SFM Mili_out(.a(a), .b(b), .c(c), .state(state_mili),
.result(result_mili));
Mur_SFM Mur_out(.a(a), .b(b), .c(c), .clk(clk), .state(state_mur),
.d(result_mur) );
always #5 clk = ~clk;
always begin
a = 1; b = 0; c = 0; #10 // 0 -> 0 a = 1; b = 0; c = 1; #10 // 0 -> 1 a = 1; b = 1; c = 1; #10 // 1 -> 1 a = 1; b = 1; c = 0; #10 // 1 -> 0 a = 0; b = 1; c = 1; #10 // 0 -> 2 a = 1; b = 1; c = 1; #10 // 2 -> 3 a = 0; b = 1; c = 0; #10 // 3 -> 2 a = 1; b = 1; c = 0; #10 // 2 -> 1 a = 0; b = 0; c = 0; #10 // 1 -> 2
a = 1; b = 1; c = 0; #10 // 2 -> 1 //rep a = 1; b = 0; c = 1; #10 // 1 -> 3
a = 1; b = 0; c = 0; #40 // 3 -> 0 $finish;
end
endmodule
Рисунок 2.1 — Временная диаграмма работы автомата Мура
Рисунок 2.2 — RTL-представление автомата Мура
9

Рисунок 2.3 — RTL-представление автомата Мили
10