Логика конечного автомата
Часть раздела Основы путешествия по Verilog на Coddy. Урок 80 из 90.
Задание
В этом уроке вы добавите логику переходов состояний в контроллер светофора. Конечный автомат определяет, когда переходить из одного состояния в следующее.
Логика конечного автомата управляет тем, когда и как светофор меняет состояния.
Последовательность состояний
Зелёный → Жёлтый → Красный → Зелёный → …
Ваша задача — добавить логику конечного автомата в модуль.
На этом шаге новый входной сигнал next запускает каждое изменение; счётчик времени появится на следующем шаге. Сохраните всё, что вы написали на предыдущем шаге (регистр state, объявление неиспользуемого counter и блок вывода always @(*)).
Что нужно сделать:
- Добавьте порт 1-битного входного сигнала с именем
nextв заголовок модуля послеreset:input next,. Тестовое окружение подаёт на него импульс, чтобы запросить переход в следующее состояние - Добавьте блок
always @(posedge clk or posedge reset) - При сбросе установите
stateв Красный (2) - Когда
nextравен 1, перейдите в следующее состояние:- Если состояние — Зелёный (0): измените его на Жёлтый
- Если состояние — Жёлтый (1): измените его на Красный
- Если состояние — Красный (2): измените его на Зелёный
Попробуйте сами
module traffic_light (
input clk,
input reset,
input next, // Триггер для изменения состояния
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// Присвоения выходов
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// TODO: Добавить логику машины состояний (без тайминга)
// always @(posedge clk or posedge reset) begin
// if (reset) begin
// state <= 2;
// end else if (next) begin
// case (state)
// 0: state <= 1;
// 1: state <= 2;
// 2: state <= 0;
// endcase
// end
// end
endmoduleВсе уроки раздела Основы
1Введение
Что такое VerilogАппаратное и программное обеспечениеВаш первый модульКомментарииУровни абстракции проектирования4Операторы. Часть 1
Арифметические операторыОператор взятия остаткаОператоры сравненияПовторение — простая математикаПобитовые операторы7Присваивание и логические элементы
Непрерывное присваиваниеПрисваивание с операторамиВстроенные примитивы логических элементовЭлементы И, ИЛИ и НЕЭлементы XOR и XNORПовторение — схема на логических элементах10Принятие решений
Оператор ifif—elseПовторение — простой компараторОператор casecaseх и casezПовторение — проектирование ALU5Операторы, часть 2
Логические операторыОператоры свёрткиОператоры сдвигаОператор конкатенацииУсловный операторПовторение — задание на операторы11Циклы
Цикл forЦикл whileЦикл повторенияБесконечный циклОператор отключенияПовторение — шаблоны циклов3Система счисления
Двоичное представлениеЧисла заданной разрядностиЧисла без указания разрядностиОтрицательные числаСпециальные значения X и ZПовторение — форматы чисел6Модули
Структура модуляВходные и выходные портыДвунаправленные портыСоздание экземпляра модуляПодключение портов по имениПодключение портов по порядкуПовторение — создание модуля9Процедурные блоки
Блок AlwaysБлок InitialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеПовторение: Always и Initial12Проект мультиплексора
Проектирование мультиплексора 2 к 1Проектирование мультиплексора 4 к 115Контроллер светофора
Определение состоянийЛогика конечного автоматаПотренируйтесь самостоятельно: Онлайн-компилятор Verilog