Casex e casez
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 56 di 90.
A volte ti interessano solo bit specifici di un valore, mentre gli altri possono essere ignorati. Per esempio, in un codificatore di priorità, vuoi trovare il primo bit 1 indipendentemente dagli altri bit.
Un'istruzione case ordinaria richiederebbe di elencare ogni possibile combinazione dei bit indifferenti, cosa impossibile per bus ampi.
casez e casex risolvono questo problema consentendoti di contrassegnare determinati bit come "indifferenti" usando ?, z o x.
Casez vs Casex vs case normale
| Istruzione | Bit indifferenti | Ideale per |
|---|---|---|
case | Nessuno | Corrispondenza esatta |
casez | z o ? | Codificatori di priorità (consigliato) |
casex | x, z o ? | Da evitare (nasconde i bug) |
casezignora i bit che sonozo?(consigliato)casexignora anche i bitx, che possono nascondere errori di simulazione
Usa sempre casez, non casex. casex è pericoloso perché ignora i valori x (che spesso indicano registri non inizializzati o errori di simulazione). casez è l'alternativa più sicura perché non tratta x come un valore indifferente.
Esempio
casez (data)
4'b???1: out = 0; // Bit0 must be 1, others don't matter
4'b??1?: out = 1; // Bit1 must be 1, others don't matter
4'b?1??: out = 2; // Bit2 must be 1, others don't matter
4'b1???: out = 3; // Bit3 must be 1, others don't matter
endcase? significa "indifferente". Quel bit può essere 0, 1 o qualsiasi altro valore.
Sfida
Cosa fare:
Aggiungi l'istruzione casez mancante per far funzionare questo decodificatore.
Come funziona:
input = 4'b???1→out = 4'b0001input = 4'b??1?→out = 4'b0010input = 4'b?1??→out = 4'b0100input = 4'b1???→out = 4'b1000- Predefinito →
out = 4'b0000
Provalo tu
module decoder (
input [3:0] in,
output reg [3:0] out
);
always @(*) begin
// TODO: Aggiungi l'istruzione casez
// in = 4'b???1 -> out = 4'b0001
// in = 4'b??1? -> out = 4'b0010
// in = 4'b?1?? -> out = 4'b0100
// in = 4'b1??? -> out = 4'b1000
// default -> out = 4'b0000
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