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 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:
| Luz | Saída | Significado |
|---|---|---|
| Vermelho | red = 1 | Pare |
| Amarelo | yellow = 1 | Atenção |
| Verde | green = 1 | Siga |
As luzes alternam nesta ordem:
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 para o 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 de estado: 0=Green, 1=Yellow, 2=Red
- Declare um registrador de 2 bits chamado
state - Declare um registrador de 6 bits chamado
counter(para temporização de até 40 segundos) - 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
- 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 SoftwareNíveis de Abstração de ProjetoSeu Primeiro MóduloComentários4Operadores Parte 1
Operadores AritméticosOperador de MóduloOperadores de ComparaçãoRecapitulação - Matemática SimplesOperadores Bitwise7Atribuição e Portas Lógicas
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ão
Instrução IfIf - ElseRecapitulação - Comparador SimplesInstrução CaseCasex e CasezRecapitulação - Projeto de ALU2Tipos de Dados
Tipo WireTipo RegInteger e RealVetoresArraysParâmetrosRecapitulação - Declarar Sinais5Operadores Parte 2
Operadores LógicosOperadores de ReduçãoOperadores de DeslocamentoOperador de ConcatenaçãoOperador CondicionalRecapitulação - Desafio de Operadores3Sistemas de Numeração
Representação BináriaNúmeros com Tamanho DefinidoNúmeros sem Tamanho DefinidoNúmeros NegativosValores Especiais X e ZRecapitulação - Formatos de Números6Módulos
Estrutura de MóduloPortas de Entrada e SaídaPortas InoutInstanciação de MóduloMapeamento de Portas por NomeMapeamento de Portas por OrdemRecapitulação - Construa um Módulo9Blocos Procedurais
Bloco AlwaysBloco InitialLista de SensibilidadeAtribuição BloqueanteAtribuição Não BloqueanteRecapitulação - Always vs Initial15Controlador de Semáforo
Definindo os EstadosLógica da Máquina de Estados