 
        
        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
