Menu
Coddy logo textTech

Bedingter 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 die condition wahr (1) ist, wird der erste Wert zurückgegeben. Wenn falsch (0), wird der zweite Wert zurückgegeben.

Warum man den bedingten Operator verwendet

Es ist eine kompakte Möglichkeit, einfache if-else-Logik in einer einzigen Zeile zu schreiben. Häufige Anwendungen sind:

  • Auswahl zwischen zwei Signalen
  • Erstellung von Multiplexern
  • Festlegen von Standardwerten
  • Inline-Zuweisungen mit Bedingungen

Syntax und Beispiele

Grundlegendes Beispiel:

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

Zwischen Werten auswählen:

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

Invert signal conditionally:

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

Code-Beispiel

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

Output:

max = 9
data_out = 1010

Verschachtelte bedingte Operatoren

Sie können bedingte Operatoren für mehrere Auswahlen verschachteln:

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

Verwenden Sie Klammern, um verschachtelte Bedingungen übersichtlich zu gestalten.

Wichtige Hinweise

  • Die condition muss ein einzelnes Bit sein (oder ein Ausdruck, der zu 0 oder 1 ausgewertet wird)
  • Halten Sie beide Werteoptionen auf derselben Bitbreite — wenn sie sich unterscheiden, erweitert Verilog die schmalere stillschweigend
  • Der Operator kann in kontinuierlichen Zuweisungen (assign) und prozeduralen Blöcken (always, initial) verwendet werden
challenge icon

Aufgabe

Schreiben Sie die richtigen bedingten Ausdrücke für jede Aufgabe.

Was zu tun ist:

  1. Setzen Sie max auf den größeren Wert von x und y
  2. Setzen Sie abs auf den Absolutwert von val (wenn negativ, positiv machen)
  3. Setzen Sie output_data auf data , wenn enable 1 ist, ansonsten 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ößere 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