Menu
Coddy logo textTech

Definindo os Estados

Parte da seção Fundamentos do Journey de Verilog da Coddy — lição 79 de 90.

challenge icon

Desafio

Um controlador de semáforo é uma máquina de estados finitos que alterna entre diferentes estados de luz (Vermelho, Amarelo, Verde) com intervalos de tempo específicos. Uma máquina de estados finitos (FSM) é um circuito que pode estar em um de um número limitado de estados. Ela muda de um estado para outro com base em entradas ou temporização.

Neste projeto, você construirá um controlador de semáforo para um cruzamento simples. O semáforo tem três saídas:

LuzSaídaSignificado
Vermelhored = 1Pare
Amareloyellow = 1Atenção
Verdegreen = 1Siga

As luzes alternam nesta ordem:

Green → Yellow → Red → Green → …

Sequência de Temporização

EstadoDuraçãoPróximo Estado
Verde30 segundosAmarelo
Amarelo10 segundosVermelho
Vermelho40 segundosVerde

Nesta lição, você definirá os estados para o controlador de semáforo.

Um semáforo tem três estados possíveis:

EstadoLuzCódigo
VerdeLuz verde ligada2'b00
AmareloLuz amarela ligada2'b01
VermelhoLuz vermelha ligada2'b10

Complete o módulo adicionando as partes que faltam.

O que fazer:

Defina a codificação de estado: 0=Green, 1=Yellow, 2=Red

  1. Declare um registrador de 2 bits chamado state
  2. Declare um registrador de 6 bits chamado counter (para temporização de até 40 segundos)
  3. Adicione as atribuições de saída:
    • Quando o estado for 0: green = 1, yellow = 0, red = 0
    • Quando o estado for 1: green = 0, yellow = 1, red = 0
    • Quando o estado for 2: green = 0, yellow = 0, red = 1

Experimente você mesmo

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

  // TODO: Tarefa 3 - Atribuições de saída 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 as lições de Fundamentos