Timing The Transitions
Parte da seção Fundamentos do Journey de Verilog da Coddy. Lição 81 de 90.
Desafio
Nesta lição, você adicionará a lógica do counter que controla por quanto tempo cada luz permanece acesa. O counter faz a contagem regressiva de um valor predefinido até zero e, então, aciona a próxima mudança de estado.
Requisitos de timing
| State | Duração | Valor do counter |
|---|---|---|
| Green | 30 segundos | 30 |
| Yellow | 10 segundos | 10 |
| Red | 40 segundos | 40 |
Como o counter funciona
- Quando um estado começa, o counter recebe o valor da duração
- A cada pulso de clock, o counter diminui em 1
- Quando o counter chega a 0, é hora de mudar para o próximo estado
Sua tarefa é adicionar a lógica ausente do counter à máquina de estados.
O que fazer:
- Adicione uma declaração
reg [5:0] counter - No reset, defina
countercomo 0 - Quando
counter == 0:- Carregue a duração do próximo estado no counter
- Mude para o próximo estado
- Caso contrário, diminua o counter em 1 a cada pulso de clock
Experimente você mesmo
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// TODO: Declarar registrador do contador (6 bits)
// Atribuições de saída
always @(*) begin
case (state)
0: begin green = 1; yellow = 0; red = 0; end
1: begin green = 0; yellow = 1; red = 0; end
2: begin green = 0; yellow = 0; red = 1; end
default: begin green = 0; yellow = 0; red = 1; end
endcase
end
// Máquina de estados com temporização
always @(posedge clk or posedge reset) begin
if (reset) begin
state <= 2; // Inicia em Vermelho
// TODO: Definir contador como 0
end else begin
if (counter == 0) begin
case (state)
0: begin
state <= 1;
// TODO: Carregar contador para Amarelo (10 segundos)
end
1: begin
state <= 2;
// TODO: Carregar contador para Vermelho (40 segundos)
end
2: begin
state <= 0;
// TODO: Carregar contador para Verde (30 segundos)
end
endcase
end else begin
// TODO: Decrementar contador em 1
end
end
end
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