Определение состояний
Часть раздела Основы путешествия по Verilog на Coddy — урок 79 из 90.
Задание
Контроллер светофора представляет собой конечный автомат, который циклически переключается между различными состояниями сигналов (Red, Yellow, Green) с определенными интервалами времени. Конечный автомат (FSM) — это схема, которая может находиться в одном из ограниченного числа состояний (state). Он переходит из одного состояния в другое на основе входных сигналов или таймингов.
В этом проекте вы создадите контроллер светофора для простого перекрестка. Светофор имеет три выхода (output):
| Сигнал | Выход | Значение |
|---|---|---|
| Red | red = 1 | Стоп |
| Yellow | yellow = 1 | Внимание |
| Green | green = 1 | Движение разрешено |
Сигналы переключаются в следующем порядке:
Green → Yellow → Red → Green → …
Последовательность таймингов
| Состояние | Длительность | Следующее состояние |
|---|---|---|
| Green | 30 секунд | Yellow |
| Yellow | 10 секунд | Red |
| Red | 40 секунд | Green |
В этом уроке вы определите состояния для контроллера светофора.
Светофор имеет три возможных состояния:
| Состояние | Сигнал | Код |
|---|---|---|
| Green | Включен зеленый сигнал | 2'b00 |
| Yellow | Включен желтый сигнал | 2'b01 |
| Red | Включен красный сигнал | 2'b10 |
Завершите модуль (module), добавив недостающие части.
Что нужно сделать:
Определите кодирование состояний: 0=Green, 1=Yellow, 2=Red
Declare2-битныйregisterс именемstateDeclare6-битныйregisterс именемcounter(для отсчета времени до 40 секунд)- Добавьте
assignmentsдляoutput:- Когда
stateравно 0:green = 1,yellow = 0,red = 0 - Когда
stateравно 1:green = 0,yellow = 1,red = 0 - Когда
stateравно 2:green = 0,yellow = 0,red = 1
- Когда
Попробуйте сами
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: Задача 1 - Объявить регистр состояния (2 бита)
// TODO: Задача 2 - Объявить регистр счётчика (6 бит)
// TODO: Задача 3 - Присваивания выходов с использованием case (state)
// состояние 0: green=1, yellow=0, red=0
// состояние 1: green=0, yellow=1, red=0
// состояние 2: green=0, yellow=0, red=1
endmoduleВсе уроки раздела Основы
1Введение
Что такое VerilogHardware против SoftwareУровни абстракции проектированияВаш первый модульКомментарии4Операторы. Часть 1
Арифметические операторыОператор остатка от деленияОператоры сравненияПовторение: простая математикаПобитовые операторы7Оператор Assign и логические вентили
Непрерывное присваиваниеAssign с операторамиВстроенные примитивы вентилейВентили AND, OR, NOTВентили XOR, XNORИтоги: Схемы на логических вентилях10Принятие решений
Оператор ifКонструкция if - elseПовторение: простой компараторОператор caseОператоры casex и casezПовторение: проектирование ALU5Операторы. Часть 2
Логические операторыОператоры редукцииОператоры сдвигаОператор конкатенацииУсловный операторПовторение — Испытание по операторам3Системы счисления
Двоичное представлениеЧисла с заданным размеромЧисла без заданного размераОтрицательные числаСпециальные значения X и ZИтоги — форматы чисел6Модули
Структура модуляВходные и выходные портыПорты InoutИнстанцирование модуляПодключение портов по имениПодключение портов по порядкуИтоги: создание модуля9Процедурные блоки
Блок alwaysБлок initialСписок чувствительностиБлокирующее присваиваниеНеблокирующее присваиваниеИтоги: always против initial12Проект: Мультиплексор
Проектирование мультиплексора 2 в 1Проектирование мультиплексора 4 в 115Контроллер светофора
Определение состоянийЛогика конечного автомата