Menu
Coddy logo textTech

Defining The States

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 percorre diferentes estados das luzes (Vermelho, Amarelo, Verde) com intervalos de tempo específicos. Uma máquina de estados finitos (FSM) é um circuito que pode estar em um número limitado de state. Ele muda de um estado para outro com base nas entradas ou no tempo.

Neste projeto, você construirá um controlador de semáforo para uma interseção simples. O semáforo tem três output:

LuzoutputSignificado
Vermelhored = 1Parar
Amareloyellow = 1Atenção
Verdegreen = 1Avançar

As luzes seguem este ciclo:

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 state do 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 state: 0=Verde, 1=Amarelo, 2=Vermelho

  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 output dentro de um bloco combinacional always @(*) begin ... end, com um case (state) dentro dele. red, yellow e green são declarados como output reg, e um reg só pode receber atribuições dentro desse tipo de bloco. O @(*) significa que o bloco é executado novamente sempre que qualquer coisa que ele lê mudar, que neste caso é state:
    • Quando state é 0: green = 1, yellow = 0, red = 0
    • Quando state é 1: green = 0, yellow = 1, red = 0
    • Quando state é 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

Pratique por conta própria: Compilador de Verilog online