Menu
Coddy logo textTech

Zuweisung mit Operatoren

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

Sobald Sie die kontinuierliche Zuweisung verstehen, können Sie diese mit Operatoren kombinieren, um nützliche Logik zu erstellen. Die assign-Anweisung kann jeden Operator verwenden, um eine Leitung (wire) anzusteuern.

Grundlegende Syntax

assign wire_name = expression;

Der Ausdruck kann Folgendes enthalten:

  • Arithmetische Operatoren (+, -, *, /)
  • Bitweise Operatoren (&, |, ^, ~)
  • Logische Operatoren (&&, ||, !)
  • Vergleichsoperatoren (>, <, ==, !=)
  • Shift-Operatoren (<<, >>)
  • Bedingter Operator (? :)

Beispiele mit verschiedenen Operatoren

Bitweises UND:

assign out = a & b;

Addition:

assign sum = a + b;

Vergleich:

assign is_greater = (a > b);

Bedingung (Multiplexer):

assign out = sel ? a : b;

Verschiebung:

assign shifted = data << 2;

Verkettung:

assign bus = {high_byte, low_byte};

Code-Beispiel

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output mux_out
);
  
  assign and_out = a & b;           // Bitweises UND
  assign sum_out = a + b;           // Addition
  assign is_equal = (a == b);       // Vergleich
  assign mux_out = sel ? a : b;     // Bedingung (Multiplexer)
  
endmodule

Mehrere Operatoren in einer Zuweisung

Sie können Operatoren in einem einzigen Ausdruck kombinieren:

assign result = (a & b) | (c ^ d);
assign final = (a + b) > (c - d);
assign parity = ^data;   // Reduktions-XOR (ungerade Anzahl von 1en)

Operator-Rangfolge

Verilog folgt der Standard-Operator-Rangfolge. Verwenden Sie Klammern ( ), um Ihre Absicht zu verdeutlichen:

// Unklar
assign out = a & b | c;

// Klar
assign out = (a & b) | c;
challenge icon

Aufgabe

Füge die fehlenden assign-Anweisungen basierend auf den Aufgaben hinzu.

Was zu tun ist:

  1. Setze and_result gleich input_a AND input_b (bitweise)
  2. Setze or_result gleich input_a OR input_b (bitweise)
  3. Setze xor_result gleich input_a XOR input_b (bitweise)
  4. Setze not_result gleich NOT input_a (bitweise)

Spickzettel

Die assign-Anweisung unterstützt verschiedene Operatoren für kombinatorische Logik:

assign wire_name = expression;

Operatortypen:

  • Bitweise: &, |, ^, ~
  • Arithmetisch: +, -, *, /
  • Logisch: &&, ||, !
  • Vergleich: >, <, ==, !=
  • Shift: <<, >>
  • Bedingt: ? :
  • Verkettung: { }
assign and_out  = a & b;          // Bitwise AND
assign sum_out  = a + b;          // Addition
assign is_equal = (a == b);       // Comparison
assign mux_out  = sel ? a : b;    // Multiplexer
assign bus      = {high, low};    // Concatenation
assign parity   = ^data;          // Reduction XOR

Verwenden Sie Klammern, um die Rangfolge zu verdeutlichen:

assign out = (a & b) | c;

Probier es selbst

module assign_challenge (
  input input_a,
  input input_b,
  output and_result,
  output or_result,
  output xor_result,
  output not_result
);
  
  // TODO: Füge Zuweisungsanweisungen (assign statements) hinzu für:
  // and_result = input_a & input_b
  // or_result  = input_a | input_b
  // xor_result = input_a ^ input_b
  // not_result = ~input_a

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