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