Menu
Coddy logo textTech

Определение состояний

Часть раздела Основы путешествия по Verilog на Coddy — урок 79 из 90.

challenge icon

Задание

Контроллер светофора представляет собой конечный автомат, который циклически переключается между различными состояниями сигналов (Red, Yellow, Green) с определенными интервалами времени. Конечный автомат (FSM) — это схема, которая может находиться в одном из ограниченного числа состояний (state). Он переходит из одного состояния в другое на основе входных сигналов или таймингов.

В этом проекте вы создадите контроллер светофора для простого перекрестка. Светофор имеет три выхода (output):

СигналВыходЗначение
Redred = 1Стоп
Yellowyellow = 1Внимание
Greengreen = 1Движение разрешено

Сигналы переключаются в следующем порядке:

Green → Yellow → Red → Green → …

Последовательность таймингов

СостояниеДлительностьСледующее состояние
Green30 секундYellow
Yellow10 секундRed
Red40 секундGreen

В этом уроке вы определите состояния для контроллера светофора.

Светофор имеет три возможных состояния:

СостояниеСигналКод
GreenВключен зеленый сигнал2'b00
YellowВключен желтый сигнал2'b01
RedВключен красный сигнал2'b10

Завершите модуль (module), добавив недостающие части.

Что нужно сделать:

Определите кодирование состояний: 0=Green, 1=Yellow, 2=Red

  1. Declare 2-битный register с именем state
  2. Declare 6-битный register с именем counter (для отсчета времени до 40 секунд)
  3. Добавьте 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

Все уроки раздела Основы