Menu
CoddyTech

Istruzione case

Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 55 di 90.

L'istruzione case ti consente di scegliere tra molte azioni diverse in base al valore di una singola espressione. È un'alternativa più ordinata a più istruzioni if-else quando confronti la stessa variabile con molti valori diversi.

L'istruzione case confronta un'espressione con un elenco di valori ed esegue il blocco corrispondente. È simile a una diramazione a più vie.

Sintassi:

case (expression)
  value1: statement1;
  value2: statement2;
  default: default_statement;
endcase

È fortemente consigliato includere sempre default in un'istruzione case combinatoria. Senza default, se sel assume un valore non elencato in alcun caso, a out non viene assegnato un valore e mantiene quello precedente. Quando un valore di sel composto solo da bit 0 e 1 non ha un ramo corrispondente, la sintesi crea una memoria non intenzionale (un latch) invece di una logica puramente combinatoria. Anche una X o una Z su sel lascia out invariato nella simulazione, ma non crea un latch.

Esempio semplice

case (sel)
  2'b00: out = a;
  2'b01: out = b;
  2'b10: out = c;
  default: out = 0;
endcase

Se sel è 00, out riceve a. Se sel è 01, out riceve b. Se sel è 10, out riceve c.

Altrimenti, out assume il valore 0.

Più istruzioni per caso

Usa begin e end per più istruzioni:

case (state)
  2'b00: begin
    out = a;
    flag = 1;
  end
  2'b01: begin
    out = b;
    flag = 0;
  end
  default: out = 0;
endcase

Regole importanti

RegolaSpiegazione
I valori dei casi devono essere univociIn presenza di duplicati, viene eseguito solo il primo ramo corrispondente
I valori devono corrispondere alla larghezza in bitScrivi 2'b01, non 1'b1 (un valore più corto viene completato con zeri)
default è facoltativo ma consigliatoGestisce i valori non mappati
Senza default, i valori non mappati causano latchNella logica combinatoria

Case vs If-Else

 CaseIf-Else
Ideale perUna variabile, molti valoriCondizioni complesse
LeggibilitàMolto chiaroPuò diventare disordinato
EsempioMultiplexer, decoderComparatore, controlli di intervallo
challenge icon

Sfida

Completa l'istruzione case

Cosa fare:

Aggiungi l'istruzione case mancante per far funzionare questo multiplexer.

Come funziona:

  • Quando select = 2'b00, result = in0
  • Quando select = 2'b01, result = in1
  • Quando select = 2'b10, result = in2
  • Quando select = 2'b11, result = in3

Provalo tu

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: Aggiungere un'istruzione case
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fondamenti

Esercitati da solo: Compilatore Verilog online