Logica della macchina a stati
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 80 di 90.
Sfida
In questa lezione aggiungerai la logica di transizione degli stati al controller del semaforo. La macchina a stati determina quando passare da uno stato al successivo.
La logica della macchina a stati controlla quando e come il semaforo cambia stato.
Sequenza degli stati
Verde → Giallo → Rosso → Verde → …
Il tuo compito è aggiungere la logica della macchina a stati al modulo.
In questo passaggio, un nuovo segnale di input, next, attiva ogni cambiamento; il contatore temporale verrà introdotto nel passaggio successivo. Mantieni tutto ciò che hai scritto nel passaggio precedente (il registro state, la dichiarazione inutilizzata di counter e il blocco di output always @(*)).
Cosa fare:
- Aggiungi una porta di input a 1 bit chiamata
nextall'intestazione del modulo, doporeset:input next,. Il banco di prova genera impulsi su di essa per richiedere lo stato successivo - Aggiungi un blocco
always @(posedge clk or posedge reset) - In caso di reset, imposta
statesu Rosso (2) - Quando
nextè 1, passa allo stato successivo:- Se lo stato è Verde (0): passa a Giallo
- Se lo stato è Giallo (1): passa a Rosso
- Se lo stato è Rosso (2): passa a Verde
Provalo tu
module traffic_light (
input clk,
input reset,
input next, // Attivatore per cambiare stato
output reg red,
output reg yellow,
output reg green
);
reg [1:0] state;
// Assegnazioni delle uscite
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
// TODO: Aggiungere la logica della macchina a stati (senza temporizzazione)
// always @(posedge clk or posedge reset) begin
// if (reset) begin
// state <= 2;
// end else if (next) begin
// case (state)
// 0: state <= 1;
// 1: state <= 2;
// 2: state <= 0;
// endcase
// end
// end
endmoduleTutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 115Controllore del semaforo
Definire gli statiLogica della macchina a statiEsercitati da solo: Compilatore Verilog online