Menu
Coddy logo textTech

Defining The States

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 recorre diferentes estados de luces (Rojo, Amarillo, green) 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 state. Cambia de un state a otro según las entradas o el tiempo.

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

LuzOutputSignificado
Rojored = 1Detenerse
Amarilloyellow = 1Precaución
greengreen = 1Avanzar

Las luces siguen este orden:

Green → Yellow → Red → Green → …

Secuencia de tiempos

StateDuraciónNext State
Green30 segundosYellow
Yellow10 segundosRed
Red40 segundosGreen

En esta lección, definirás los estados del 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 módulo añadiendo las partes que faltan.

Qué hacer:

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

  1. Declara un registro de 2 bits llamado state
  2. Declara un registro de 6 bits llamado counter (para medir tiempos de hasta 40 segundos)
  3. Añade las asignaciones de salida dentro de un bloque combinacional always, always @(*) begin ... end, con un case (state) dentro. red, yellow y green se declaran como output reg, y un reg solo puede asignarse dentro de un bloque de este tipo. El @(*) significa que el bloque se ejecuta de nuevo cada vez que cambia cualquier elemento que lee, que en este caso es state:
    • 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

Practica por tu cuenta: Compilador de Verilog online