Menu
Coddy logo textTech

Case Statement

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 55 von 90.

Mit der case-Anweisung kannst du anhand des Werts eines einzelnen Ausdrucks zwischen vielen verschiedenen Aktionen wählen. Sie ist eine übersichtlichere Alternative zu mehreren if-else-Anweisungen, wenn dieselbe Variable mit vielen verschiedenen Werten verglichen wird.

Die case-Anweisung vergleicht einen expression mit einer Liste von Werten und führt den passenden Block aus. Sie ist wie eine Mehrwegeverzweigung.

Syntax:

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

Es wird dringend empfohlen, in einer kombinatorischen <strong>case</strong>-Anweisung immer <strong>default</strong> einzuschließen. Ohne default wird out nicht zugewiesen, wenn sel einen unerwarteten Wert annimmt (wie X oder Z), und behält seinen vorherigen Wert durch ein Latch bei. Dadurch entsteht unbeabsichtigter Speicher (ein Latch) anstelle einer rein kombinatorischen Logik.

Einfaches Beispiel

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

Wenn sel 00 ist, erhält out den Wert a. Wenn sel 01 ist, erhält out den Wert b. Wenn sel 10 ist, erhält out den Wert c.

Andernfalls erhält out den Wert 0.

Mehrere Anweisungen pro Fall

Verwende begin und end für mehrere Anweisungen:

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

Wichtige Regeln

RegelErklärung
case-Werte sollten eindeutig seinBei Duplikaten wird nur der erste passende Zweig ausgeführt
Werte müssen zur Bitbreite passen2'b01 nicht 1'b1
default ist optional, wird aber empfohlenFängt nicht zugeordnete Werte ab
Ohne default verursachen nicht zugeordnete Werte LatchesIn kombinatorischer Logik

Case vs. If-Else

 CaseIf-Else
Am besten geeignet fürEine Variable, viele WerteKomplexe Bedingungen
LesbarkeitSehr übersichtlichKann unübersichtlich werden
BeispielMultiplexer, DecoderKomparator, Bereichsprüfungen
challenge icon

Aufgabe

case-Anweisung vervollständigen

Aufgabe:

Add die fehlende case-Anweisung hinzu, damit dieser Multiplexer funktioniert.

So funktioniert es:

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

Probier es selbst

module mux4 (
  input [1:0] select,
  input in0, in1, in2, in3,
  output reg result
);
  
  always @(*) begin
    // TODO: Case-Anweisung hinzufügen
    // select=00 -> result = in0
    // select=01 -> result = in1
    // select=10 -> result = in2
    // select=11 -> result = in3
    // default -> result = 0
  end
  
endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen

Übe selbstständig: Online-Verilog-Compiler