
Пр-7-1
.pdfАННОТАЦИЯ
Работа включает в себя 2 рисунка, 2 таблицы, 3 листинга. Количество
страниц в работе — 13.
|
СОДЕРЖАНИЕ |
|
ВВЕДЕНИЕ .................................................................................................................. |
4 |
|
ПОСТАНОВКА ЗАДАЧИ .......................................................................................... |
5 |
|
1 ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ ............................................................... |
6 |
|
1.1 |
Создание автоматных таблиц .......................................................................... |
6 |
1.2 |
Создание модуля автомата Мура и Мили........................................................ |
6 |
2 ВЕРИФИКАЦИЯ ...................................................................................................... |
7 |
|
ЗАКЛЮЧЕНИЕ............................................................................................................ |
8 |
|
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ .................................................. |
9 |
ВВЕДЕНИЕ
Vivado – система автоматизированного проектирования (САПР).
Разработая компанией Xilinx. Vivado представляет собой решение по автоматизации основных этапов разработки проектов для ПЛИС от описания схемы до непосредственной загрузки полученной конфигурации на ПЛИС при помощи программатора. [4] В данной работе данное ПО будет использовано для описания поведения автоматов Мура и Милли. Автомат Мура — синхронный автомат, у которого выходные значения определяются только состоянием автомата в тот же дискретный момент времени. При этом комбинационная схема,
вычисляющая выходные значения, не связана непосредственно с входными сигналами. Автомат Мили — синхронный автомат, у которого вход и выход не развязаны во времени, т.е. хотя бы один выход зависит от текущего значения на входе. [1] Автоматная таблица является одним из способов задания функций определения нового состояния, а также определения выходного значения для автоматов. Каждая строка таблицы соответствует состоянию автомата, а каждый столбец — символу входного алфавита. На пересечении строки с индексом i и
столбцом с индексом j располагается новое состояние автомата, в которое переходит автомат, находясь в состоянии i при приходе входного слова j, а также значение выхода автомата (для автомата Мили — в текущий дискретный момент времени, для автомата Мура — в следующий дискретный момент времени).[2]

ПОСТАНОВКА ЗАДАЧИ
Задание: Реализовать автомат Мили, заданный графом, в соответствии с вариантом, который определяет выходные значения для каждого из состояний автомата на языке Verilog. Автомат должен иметь три входа: a, b,c. На графе над дугой указаны три символа, их следует трактовать как значения для a, b, c
соответственно, необходимые для совершения обозначенного перехода.
Индивидуальный вариант представлен на рисунке 1.
Рисунок 1 — Вариант
4
1 ПРОЕКТИРОВАНИЕ И РЕАЛИЗАЦИЯ
1.1 Создание автоматных таблиц
Создадим автоматную таблицу для автомата Мура по индивидуальному
варианту.
Таблица 1.1 — Автомат Мура
Состояние/Входы |
000 |
001 |
010 |
011 |
100 |
101 |
110 |
111 |
|
|
|
|
|
|
|
|
|
S00 |
S30 |
S30 |
S20 |
S30 |
S00 |
S01 |
S20 |
S31 |
|
|
|
|
|
|
|
|
|
S01 |
S30 |
S30 |
S20 |
S30 |
S00 |
S01 |
S20 |
S31 |
|
|
|
|
|
|
|
|
|
S10 |
S21 |
S20 |
S20 |
S20 |
S30 |
S30 |
S30 |
S30 |
|
|
|
|
|
|
|
|
|
S11 |
S21 |
S20 |
S20 |
S20 |
S30 |
S30 |
S30 |
S30 |
|
|
|
|
|
|
|
|
|
S20 |
S10 |
S10 |
S00 |
S00 |
S10 |
S10 |
S01 |
S01 |
|
|
|
|
|
|
|
|
|
S21 |
S10 |
S10 |
S00 |
S00 |
S10 |
S10 |
S01 |
S01 |
|
|
|
|
|
|
|
|
|
S30 |
S31 |
S31 |
S00 |
S00 |
S31 |
S31 |
S11 |
S01 |
|
|
|
|
|
|
|
|
|
S31 |
S31 |
S31 |
S00 |
S00 |
S31 |
S31 |
S11 |
S01 |
|
|
|
|
|
|
|
|
|
Аналогично создадим таблицу для автомата Мили.
Таблица 1.2 — Автомат Мили
Состояние/Входы |
000 |
001 |
010 |
011 |
100 |
101 |
110 |
111 |
|
|
|
|
|
|
|
|
|
S00 |
S30 |
S30 |
S20 |
S30 |
S00 |
S01 |
S20 |
S31 |
|
|
|
|
|
|
|
|
|
S10 |
S21 |
S20 |
S20 |
S20 |
S30 |
S30 |
S30 |
S30 |
|
|
|
|
|
|
|
|
|
S20 |
S10 |
S10 |
S00 |
S00 |
S10 |
S10 |
S01 |
S01 |
|
|
|
|
|
|
|
|
|
S30 |
S31 |
S31 |
S00 |
S00 |
S31 |
S31 |
S11 |
S01 |
|
|
|
|
|
|
|
|
|
1.2 Создание модуля автомата Мура
На основе автоматной таблицы создадим модуль. Результат представлен в
Листинге 1.1.
5

Листинг 1.1 — Модуль moore.v
`timescale 1ns / 1ps module moore#( parameter
S0_0=3'b000, S0_1=3'b001,
S1_0=3'b010, S1_1=3'b011,
S2_0=3'b100, S2_1=3'b101,
S3_0=3'b110, S3_1=3'b111) (input a ,b ,c , clk, output reg d);
reg [2:0] state = 0;
reg [2:0] new_state = 0;
always@(posedge clk) begin
state = new_state; casex({a, b, c, state})
{S0_0,3'b000}, {S0_1, 3'b000}: new_state = S3_0; {S0_0,3'b001}, {S0_1, 3'b001}: new_state = S3_0; {S0_0,3'b010}, {S0_1, 3'b010}: new_state = S2_0; {S0_0,3'b011}, {S0_1, 3'b011}: new_state = S3_0; {S0_0,3'b100}, {S0_1, 3'b100}: new_state = S0_0; {S0_0,3'b101}, {S0_1, 3'b101}: new_state = S0_1; {S0_0,3'b110}, {S0_1, 3'b110}: new_state = S2_0; {S0_0,3'b111}, {S0_1, 3'b111}: new_state = S3_1; {S1_0,3'b000}, {S1_1, 3'b000}: new_state = S2_1; {S1_0,3'b001}, {S1_1, 3'b001}: new_state = S2_0; {S1_0,3'b010}, {S1_1, 3'b010}: new_state = S2_0; {S1_0,3'b011}, {S1_1, 3'b011}: new_state = S2_0; {S1_0,3'b100}, {S1_1, 3'b100}: new_state = S3_0; {S1_0,3'b101}, {S1_1, 3'b101}: new_state = S3_0; {S1_0,3'b110}, {S1_1, 3'b110}: new_state = S3_0; {S1_0,3'b111}, {S1_1, 3'b111}: new_state = S3_0; {S2_0,3'b000}, {S2_1, 3'b000}: new_state = S1_0; {S2_0,3'b001}, {S2_1, 3'b001}: new_state = S1_0; {S2_0,3'b010}, {S2_1, 3'b010}: new_state = S0_0; {S2_0,3'b011}, {S2_1, 3'b011}: new_state = S0_0; {S2_0,3'b100}, {S2_1, 3'b100}: new_state = S1_0; {S2_0,3'b101}, {S2_1, 3'b101}: new_state = S1_0; {S2_0,3'b110}, {S2_1, 3'b110}: new_state = S0_1; {S2_0,3'b111}, {S2_1, 3'b111}: new_state = S0_1; {S3_0,3'b000}, {S3_1, 3'b000}: new_state = S3_1; {S3_0,3'b001}, {S3_1, 3'b001}: new_state = S3_1; {S3_0,3'b010}, {S3_1, 3'b010}: new_state = S0_0; {S3_0,3'b011}, {S3_1, 3'b011}: new_state = S0_0; {S3_0,3'b100}, {S3_1, 3'b100}: new_state = S3_1; {S3_0,3'b101}, {S3_1, 3'b101}: new_state = S3_1; {S3_0,3'b110}, {S3_1, 3'b110}: new_state = S1_1; {S3_0,3'b111}, {S3_1, 3'b111}: new_state = S0_1;
endcase
end endmodule
6

1.3 Создание модуля автомата Мили
На основе автоматной таблицы создадим модуль. Результат
представлен в Листинге 1.2.
Листинг 1.2 — Модуль mili.v
`timescale 1ns / 1ps
module mili(
input a, b, c, clk, output reg d
);
reg [1:0] state = 0;
always@(posedge clk)
begin case(state)
2'd0: d = c + a; 2'd0: d = !(c||a); 2'd0: d = b + a; 2'd0: d = b <= a; endcase
case(state)
2'd0: begin
if(~b) begin
state = 2'd0;
end
if(b & ~c) begin
state = 2'd2;
end
if(b & c) begin
state = 2'd3;
end
end 2'd1: begin
if(a) begin
state = 2'd3;
end else begin
state = 2'd2;
end
end 2'd2: begin
if(b) begin
state = 2'd0;
end else begin
state = 2'd1;
end
end 2'd3: begin

Продолжение листинга 1.2
begin
if(b & ~c) begin
state = 2'd1;
end
if (b & c) begin
state = 2'd0;
end
if (~b) begin
state = 2'd3;
end
end endcase
end endmodule