Добавил:
Только когда поступишь в технический вуз поймешь на сколько ты гуманитарий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Пр-7-1

.pdf
Скачиваний:
0
Добавлен:
19.03.2025
Размер:
485.33 Кб
Скачать

АННОТАЦИЯ

Работа включает в себя 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

Соседние файлы в предмете Архитектура вычислительный машин и систем