Menu
Coddy logo textTech

Istruzione case

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

L’istruzione case ti permette di scegliere tra molte azioni diverse in base al valore di una singola espressione. È un’alternativa più pulita 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 un ramo a più vie.

Sintassi:

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

Si consiglia vivamente di includere sempre <strong>default</strong> in un'istruzione combinatoria <strong>case</strong>. Senza default, se sel assume un valore imprevisto (come X o Z), out non verrà assegnato e manterrà (latch) il valore precedente. Questo crea una memoria indesiderata (un latch) invece di una logica puramente combinatoria.

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 riceve 0.

Più istruzioni per caso

Usa begin ed 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 case devono essere univociIn presenza di duplicati, viene eseguito solo il primo ramo corrispondente
I valori devono corrispondere alla larghezza in bit2'b01 non 1'b1
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 complicato
EsempioMultiplexer, decoderComparatore, verifiche 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: Aggiungi 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