Defining The States
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 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:
| Luz | output | Significado |
|---|---|---|
| Vermelho | red = 1 | Parar |
| Amarelo | yellow = 1 | Atenção |
| 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 state 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 de state: 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) - Adicione as atribuições de output dentro de um bloco combinacional
always @(*) begin ... end, com umcase (state)dentro dele.red,yellowegreensão declarados comooutput reg, e umregsó 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
- Quando state é 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 projeto4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicPratique por conta própria: Compilador de Verilog online