Lista di sensibilità
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 48 di 90.
L’elenco di sensibilità indica al blocco always quando eseguire. Si scrive tra parentesi dopo il simbolo @.
L’elenco di sensibilità è un insieme di segnali o eventi che attivano il blocco always. Quando cambia un qualsiasi segnale nell’elenco, il blocco viene eseguito.
Sintassi:
always @(sensitivity_list) begin
// Il codice viene eseguito quando cambiano i segnali nell'elenco
endTipi di lista di sensibilità
| Tipo | Sintassi | Quando viene eseguito il blocco |
|---|---|---|
| Tutti i segnali (combinazionale) | always @(*) | Quando cambia un qualsiasi segnale al suo interno |
| Segnali specifici | always @(a or b) | Quando cambia a o b |
| Attivazione sul fronte (sequenziale) | always @(posedge clk) | Sul fronte di salita del clock |
| Più fronti | always @(posedge clk or posedge reset) | Sul fronte del clock o sul fronte di reset |
Opzione 1: Tutti i segnali (*)
Il più sicuro e comune per la logica combinatoria.
always @(*) begin
out = a & b; // Si attiva quando a o b cambia
end* include automaticamente tutti i segnali letti nel blocco.
Opzione 2: Segnali specifici
always @(a or b) begin
out = a & b; // Viene eseguito quando a o b cambia
endSe dimentichi un segnale, l'output non si aggiorna nella simulazione quando quel segnale cambia, quindi la simulazione non corrisponde più all'hardware sintetizzato.
Opzione 3: Attivazione sul fronte (posedge)
always @(posedge clk) begin
q <= d; // Viene eseguito sul fronte di salita del clock
endUsa posedge per il fronte di salita, negedge per il fronte di discesa.
Opzione 4: più fronti
always @(posedge clk or posedge reset) begin
if (reset)
q <= 0;
else
q <= d;
endViene eseguito sul fronte di clock o sul fronte di reset.
Errori comuni
| Errore | Perché è sbagliato |
|---|---|
always @(a or b or c) ma usa d | Manca d → l'output diventa obsoleto nella simulazione (discordanza tra sim/synth) |
always @(posedge clk or reset) | Manca posedge per reset |
always @(clk) | Per i flip-flop si dovrebbe usare posedge clk |
Sfida
Cosa fare:
- Aggiungi l'elenco di sensibilità corretto per far funzionare questo flip-flop. Il blocco deve essere eseguito sul fronte di salita di
clk.
Provalo tu
module flipflop (
input clk,
input d,
output reg q
);
always @(______) begin
q <= d;
end
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte 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 1Esercitati da solo: Compilatore Verilog online