- •Курсовой проект
- •Глава 1. Описание технологии конечных автоматов 4
- •Глава 2. Разработка конечного автомата – светофора 6
- •Глава 1. Описание технологии конечных автоматов 4
- •Глава 2. Разработка конечного автомата – светофора 7
- •Введение
- •Глава 1. Описание технологии конечных автоматов
- •1.1 Описание абстрактных автоматов
- •Общее задание на курсовое проектирование
- •Вариант задания на курсовое проектирование
- •Глава 2. Разработка конечного автомата – светофора
- •Описание устройства
- •Разработка диаграммы
- •Описание работы программы
- •Результат работы программы
- •Заключение
- •Список литературы
- •Приложение 1. Код программы
Разработка диаграммы
Смена состояний светофора:
Состояние S0 – начальное.
Состояние S1 – состояние выхода светофора R (Красный). Время удержания 3 такта. Состояние переходит в следующее после истечения 3 тактов ожидания.
Далее, автомат переходит в состояние ввода S2. Состояние выхода Y (Жёлтый). Время удержания состояния ввода – 1 такт.
Автомат переходит в состояние вывода S3. Состояние выхода G- (Зелёный + правый поворот). Время удержания состояния ввода – 2 такта.
Автомат переходит в состояние вывода S4. Состояние выхода G (Зелёный) Время удержания состояния ввода – 2 такта.
Автомат переходит в состояние S1 и цикл работы начинается сначала.
Рисунок 2 - Диаграмма состояний конечного автомата
Описание работы программы
Работа конечного автомата реализована с помощью языка программирования Verilog, применяются способы последовательной передачи данных с помощью сдвига регистра и присвоению счетчику определенных значений, исходя из которых происходит переход из одного состояния в следующее.
Первый блок программы отвечает за подготовку к работе программы: ввод данных и принятие синхроимпульса, объявление регистров и их перенос, параметризацию состояний, также идет сохранение данных для их дальнейшего использования, сохранение состояний и подсчет необходимого количества тактов, подсоединения шин и объявления состояний и присвоение им имен.
Первая
часть в блоке программы переходов
показывает, что изначально автомат
находится в S0 (начальное
состояние), переход к следующему состоянию
обуславливается началом работы автомата
(запуск), после он переходит в состояние
ожидания ввода данных: начинает работать
счетчик, который сдвигается в соответствие
с тактами (интервалы времени, за которые
мы должны отправить данные), после чего
происходит переход к S1.
module Traffic_light
(input reset,
input clk,
output reg [3:0] light = 0,
output reg [3:0] cnt = 0);
// состояния режима светофора
localparam [3:0]
RED = 0,
YELLOW = 1,
GREEN_RIGHT = 2,
GREEN = 3;
// состояний переходов
localparam [3:0]
STATE_1 = 0,
STATE_2 = 1,
STATE_3 = 2,
STATE_4 = 3;
// количество тактов cnt ожидания перехода
localparam [3:0] N_STATE_1 = 3;
localparam [3:0] N_STATE_2 = 1;
localparam [3:0] N_STATE_3 = 2;
localparam [3:0] N_STATE_4 = 2;
// инициализация регистра
reg [3:0] State = STATE_1;
always @(posedge clk)
begin
if (!reset)
begin
cnt <= 0 ;
light <= RED;
State <= STATE_1;
end
else
begin
cnt <= cnt+1;
Вторая часть в блоке переходов отвечает за ожидание ввода данных, при котором автомат ожидает 3 такт, после изменения значения счетчика в большую сторону, происходит переход к S2.
case (State)
STATE_1 :
begin
if (cnt == N_STATE_1)
begin
cnt <= 1;
light <= YELLOW;
State <= STATE_2;
end
end
Третья
часть в блоке переходов отвечает за
ожидание ввода данных, при котором
автомат ожидает 1 такт, после изменения
значения счетчика в большую сторону,
происходит переход к S3.
STATE_2 :
begin
if (cnt == N_STATE_2)
begin
cnt <= 1;
light <= GREEN_RIGHT;
State <= STATE_3;
end
end
Четвёртая
часть в блоке переходов отвечает за
ожидание ввода данных, при котором
автомат ожидает 2 такта, после изменения
значения счетчика в большую сторону,
происходит переход к S4.
STATE_3 :
begin
if (cnt == N_STATE_3)
begin
cnt <= 1;
light <= GREEN;
State <= STATE_4;
end
end
В пятой части перехода происходит сдвиг регистров и сброс данных для корректной работы автомата, и мы возвращаемся в состояние ожидания ввода данных S1, автомат ожидает 2 такта.
STATE_4 :
begin
if (cnt == N_STATE_4)
begin
cnt <= 1;
light <= RED;
State <= STATE_1;
end
end
В
конце программы предусмотрен режим
работы на случай, если состояние оператора
case
«по умолчанию» (то есть регистр State),
примет значение, которое не указано в
case,
то аппарат перейдет в состояние S1
и включится красный сигнал.
default :
begin
cnt <= 1;
light <= RED;
State <= STATE_1;
end
