Menu
Coddy logo textTech

Conditional Operator

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

Der bedingte Operator ? : wählt basierend auf einer Bedingung zwischen zwei Werten aus. Er wird auch als ternärer Operator bezeichnet. Der bedingte Operator wertet eine Bedingung aus und gibt einen von zwei Werten zurück:

condition ? value_if_true : value_if_false

Wenn condition wahr (1) ist, wird der erste Wert zurückgegeben. Wenn sie falsch (0) ist, wird der zweite Wert zurückgegeben.

Warum den Conditional Operator verwenden

Er ist eine kompakte Möglichkeit, einfache If-Else-Logik in einer einzigen Zeile zu schreiben. Häufige Verwendungen sind:

  • Zwischen zwei signal wählen
  • Multiplexer erstellen
  • Standardwerte festlegen
  • Inline-bedingte Zuweisungen

Syntax und Beispiele

Grundlegendes Beispiel:

result = (a > b) ? a : b;   // result erhält den größeren von a und b

Zwischen Werten auswählen:

data_out = (enable) ? data_in : 8'b00000000;   // Output data if enabled, else 0

signal bedingt invertieren:

out = (invert) ? ~in : in;   // Wenn invert 1 ist, Ausgabe invertiert; sonst unverändert

Codebeispiel

module conditional_demo;
  reg [3:0] a, b, max;
  reg enable;
  reg [3:0] data_in, data_out;
  
  initial begin
    a = 4'd7;
    b = 4'd9;
    enable = 1;
    data_in = 4'b1010;
    
    max = (a > b) ? a : b;           // 9
    data_out = (enable) ? data_in : 4'b0000;   // 1010
    
    $display("max = %d", max);
    $display("data_out = %b", data_out);
    $finish;
  end
endmodule

Ausgabe:

max = 9
data_out = 1010

Verschachtelte bedingte Operatoren

Du kannst bedingte Operatoren für mehrere Auswahlen verschachteln:

result = (a > b) ? a : (b > c) ? b : c;   // a wenn a > b, ansonsten der größere von b und c

Verwende Klammern, um verschachtelte Bedingungen klar zu machen.

Wichtige Hinweise

  • Die condition muss ein einzelnes Bit sein (oder ein Ausdruck, der zu 0 oder 1 ausgewertet wird)
  • Beide value-Optionen müssen dieselbe Bitbreite haben. Falls sie sich unterscheiden, erweitert Verilog die schmalere Option stillschweigend
  • Der Operator kann in kontinuierlichen Zuweisungen (assign) und prozeduralen Blöcken (always, initial) verwendet werden
challenge icon

Aufgabe

Schreibe die korrekten bedingten Ausdrücke für jede Aufgabe.

Aufgabe:

  1. Setze max auf den largeren Wert von x und y
  2. Setze abs auf den absolute Wert von val (falls negativ, mache ihn positiv)
  3. Setze output_data auf data , falls enable gleich 1 ist, andernfalls auf 8'b0

Probier es selbst

module conditional_challenge;
  reg [3:0] x, y;
  reg [3:0] max;
  reg signed [3:0] val;
  reg [3:0] abs;
  reg enable;
  reg [7:0] data;
  reg [7:0] output_data;
  
  initial begin
    x = 4'd12;
    y = 4'd8;
    val = -4'sd5;
    enable = 1;
    data = 8'b10101010;
    
    max = ______;          // größerer von x und y
    abs = ______;          // Absolutwert von val
    output_data = ______;  // data wenn enable, sonst 0
    
    $display("max = %d", max);
    $display("abs = %d", abs);
    $display("output_data = %b", output_data);
    $finish;
  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