Menu
Coddy logo textTech

Definición de los estados

Parte de la sección Fundamentos del Journey de Verilog de Coddy — lección 79 de 90.

challenge icon

Desafío

Un controlador de semáforo es una máquina de estados finitos que se desplaza a través de diferentes estados de luz (Rojo, Amarillo, Verde) con intervalos de tiempo específicos. Una máquina de estados finitos (FSM) es un circuito que puede estar en uno de un número limitado de estados. Cambia de un estado a otro en función de las entradas o del tiempo.

En este proyecto, construirás un controlador de semáforo para una intersección simple. El semáforo tiene tres salidas:

LuzOutputSignificado
Verde (Green)red = 1Alto
Amarillo (Yellow)yellow = 1Precaución
Verde (Green)green = 1Avanzar

Las luces se desplazan en este orden:

Green → Yellow → Red → Green → …

Secuencia de tiempo

StateDuraciónSiguiente estado
Green30 segundosYellow
Yellow10 segundosRed
Red40 segundosGreen

En esta lección, definirás los estados para el controlador de semáforo.

Un semáforo tiene tres estados posibles:

StateLuzCódigo
GreenLuz verde encendida2'b00
YellowLuz amarilla encendida2'b01
RedLuz roja encendida2'b10

Completa el module agregando las partes que faltan.

Qué hacer:

Define la codificación de estados: 0=Green, 1=Yellow, 2=Red

  1. Declare un register de 2 bits llamado state
  2. Declare un register de 6 bits llamado counter (para el tiempo de hasta 40 segundos)
  3. Agrega las assignments de salida:
    • Cuando state es 0: green = 1, yellow = 0, red = 0
    • Cuando state es 1: green = 0, yellow = 1, red = 0
    • Cuando state es 2: green = 0, yellow = 0, red = 1

Pruébalo tú mismo

module traffic_light (
  input clk,
  input reset,
  output reg red,
  output reg yellow,
  output reg green
);
  // TODO: Tarea 1 - Declarar registro de estado (2 bits)
  
  // TODO: Tarea 2 - Declarar registro contador (6 bits)
  

  // TODO: Tarea 3 - Asignaciones de salida usando case (state)
  // estado 0: green=1, yellow=0, red=0
  // estado 1: green=0, yellow=1, red=0
  // estado 2: green=0, yellow=0, red=1

endmodule

Todas las lecciones de Fundamentos