Определение состояний
Часть раздела Основы путешествия по Verilog на Coddy — урок 79 из 90.
Задание
Контроллер светофора — это конечный автомат, который циклически переключается между различными состояниями освещения (красный, желтый, зеленый) с определенными временными интервалами. Конечный автомат (FSM) — это схема, которая может находиться в одном из ограниченного числа состояний. Он переходит из одного состояния в другое на основе входных сигналов или времени.
В этом проекте вы создадите контроллер светофора для простого перекрестка. Светофор имеет три выхода:
| Свет | Выход | Значение |
|---|---|---|
| Красный | red = 1 | Стоп |
| Желтый | yellow = 1 | Внимание |
| Зеленый | green = 1 | Иди |
Светофоры переключаются в следующем порядке:
Green → Yellow → Red → Green → …
Последовательность синхронизации
| Состояние | Длительность | Следующее состояние |
|---|---|---|
| Green | 30 секунд | Yellow |
| Yellow | 10 секунд | Red |
| Red | 40 секунд | Green |
В этом уроке вы определите состояния для контроллера светофора.
Светофор имеет три возможных состояния:
| Состояние | Свет | Код |
|---|---|---|
| Green | Зеленый свет ВКЛ | 2'b00 |
| Yellow | Желтый свет ВКЛ | 2'b01 |
| Red | Красный свет ВКЛ | 2'b10 |
Завершите модуль, добавив недостающие части.
Что нужно сделать:
Определите кодировку состояний: 0=Green, 1=Yellow, 2=Red
- Объявите 2-битный регистр с именем
state - Объявите 6-битный регистр с именем
counter(для отсчета времени до 40 секунд) - Добавьте назначения выходов:
- Когда state равен 0:
green = 1,yellow = 0,red = 0 - Когда state равен 1:
green = 0,yellow = 1,red = 0 - Когда state равен 2:
green = 0,yellow = 0,red = 1
- Когда state равен 0:
Попробуйте сами
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Контроллер светофора
Определение состоянийЛогика конечного автомата