Definire gli stati
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 79 di 90.
Sfida
Un controller di un semaforo è una macchina a stati finiti che passa ciclicamente da uno stato del semaforo all'altro (rosso, giallo, verde) con intervalli di tempo specifici. Una macchina a stati finiti (FSM) è un circuito che può trovarsi in uno tra un numero limitato di stati. Passa da uno stato all'altro in base agli input o alla temporizzazione.
In questo progetto realizzerai un controller di un semaforo per un semplice incrocio. Il semaforo ha tre uscite:
| Luce | Uscita | Significato |
|---|---|---|
| Rosso | red = 1 | Fermati |
| Giallo | yellow = 1 | Attenzione |
| Verde | green = 1 | Via |
Le luci si alternano in questo ordine:
Green → Yellow → Red → Green → …
Sequenza temporale
| Stato | Durata | Stato successivo |
|---|---|---|
| Verde | 30 secondi | Giallo |
| Giallo | 10 secondi | Rosso |
| Rosso | 40 secondi | Verde |
In questa lezione definirai gli stati del controller del semaforo.
Un semaforo ha tre stati possibili:
| Stato | Luce | Codice |
|---|---|---|
| Verde | Luce verde ACCESA | 2'b00 |
| Giallo | Luce gialla ACCESA | 2'b01 |
| Rosso | Luce rossa ACCESA | 2'b10 |
Completa il modulo aggiungendo le parti mancanti.
Cosa fare:
Definisci la codifica degli stati: 0=Verde, 1=Giallo, 2=Rosso
- Dichiara un registro a 2 bit chiamato
state - Dichiara un registro a 6 bit chiamato
counter(per la temporizzazione fino a 40 secondi). Non viene usato in questo passaggio: la logica di temporizzazione che lo usa per contare verrà aggiunta più avanti in questo progetto, nel passaggio Temporizzazione delle transizioni - Aggiungi le assegnazioni delle uscite all'interno di un blocco always combinatorio,
always @(*) begin ... end, con uncase (state)al suo interno.red,yellowegreensono dichiarate comeoutput rege unregpuò essere assegnato solo all'interno di un blocco di questo tipo.@(*)significa che il blocco viene eseguito di nuovo ogni volta che cambia uno qualsiasi dei valori che legge; in questo caso,state:- Quando lo stato è 0:
green = 1,yellow = 0,red = 0 - Quando lo stato è 1:
green = 0,yellow = 1,red = 0 - Quando lo stato è 2:
green = 0,yellow = 0,red = 1
- Quando lo stato è 0:
Provalo tu
module traffic_light (
input clk,
input reset,
output reg red,
output reg yellow,
output reg green
);
// TODO: Attività 1 - Dichiarare il registro di stato (2 bit)
// TODO: Attività 2 - Dichiarare il registro contatore (6 bit)
// TODO: Attività 3 - Assegnare le uscite usando case (state)
// stato 0: green=1, yellow=0, red=0
// stato 1: green=0, yellow=1, red=0
// stato 2: green=0, yellow=0, red=1
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