Definindo os Estados
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 79 de 90.
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 estados. Ela 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 saídas:
| Luz | Saída | Significado |
|---|---|---|
| Vermelho | red = 1 | Parar |
| Amarelo | yellow = 1 | Cuidado |
| Verde | green = 1 | Avançar |
As luzes seguem este ciclo:
Green → Yellow → Red → Green → …
Sequência de temporização
| Estado | Duração | Próximo estado |
|---|---|---|
| Verde | 30 segundos | Amarelo |
| Amarelo | 10 segundos | Vermelho |
| Vermelho | 40 segundos | Verde |
Nesta lição, você definirá os estados do controlador de semáforo.
Um semáforo tem três estados possíveis:
| Estado | Luz | Código |
|---|---|---|
| Verde | Luz verde LIGADA | 2'b00 |
| Amarelo | Luz amarela LIGADA | 2'b01 |
| Vermelho | Luz vermelha LIGADA | 2'b10 |
Complete o módulo adicionando as partes que faltam.
O que fazer:
Defina a codificação dos estados: 0=Verde, 1=Amarelo, 2=Vermelho
- Declare um registrador de 2 bits chamado
state - Declare um registrador de 6 bits chamado
counter(para temporização de até 40 segundos). Ele não é usado nesta etapa: a lógica de temporização que conta com ele será apresentada mais tarde neste projeto, na etapa Temporizando as transições - Adicione as atribuições das saídas dentro de um bloco always combinacional,
always @(*) begin ... end, com umcase (state)dentro dele.red,yellowegreensão declarados comooutput reg, e umregsó pode ser atribuído dentro desse tipo de bloco. O@(*)significa que o bloco é executado novamente sempre que qualquer coisa que ele lê for alterada, que neste caso éstate:- 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
- Quando o estado for 0:
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
endmoduleTodas as lições de Fundamentos
1Introdução
O que é VerilogHardware vs. SoftwareSeu primeiro móduloComentáriosNíveis de abstração de projeto4Operadores Parte 1
Operadores aritméticosOperador móduloOperadores de comparaçãoRecapitulação - Matemática simplesOperadores bit a bit7Atribuições e Portas
Atribuição ContínuaAtribuição com OperadoresPrimitivas de Portas IntegradasPortas AND, OR e NOTPortas XOR e XNORRecapitulação - Circuito de Portas Lógicas10Tomada de Decisões
Declaração IfIf - ElseRevisão - Comparador SimplesDeclaração CaseCasex e CasezRevisão - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteiro e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores - Parte 2
Operadores lógicosOperadores de reduçãoOperadores de deslocamentoOperador de concatenaçãoOperador condicionalRevisão - Desafio de operadores3Sistema Numérico
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRevisão - Formatos Numéricos6Módulos
Estrutura de MódulosPortas de Entrada e SaídaPortas InoutInstanciação de MódulosMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação — Construindo um Módulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRevisão - Always vs Initial15Controlador de Semáforo
Definindo os EstadosLógica da Máquina de EstadosPratique por conta própria: Compilador de Verilog online