Menu
CoddyTech

Zuweisung mit Operatoren

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

Sobald du kontinuierliche Zuweisungen verstanden hast, kannst du sie mit Operatoren kombinieren, um nützliche Logik zu erstellen. Die Anweisung assign kann jeden Operator verwenden, um ein Wire anzusteuern.

Grundlegende Syntax

assign wire_name = expression;

Der Ausdruck kann Folgendes enthalten:

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

Beispiele mit verschiedenen Operatoren

Bitweises UND:

assign out = a & b;

Addition:

assign sum = a + b;

Vergleich:

assign is_greater = (a > b);

Bedingte Zuweisung (Multiplexer):

assign out = sel ? a : b;

Verschiebung:

assign shifted = data << 2;

Verkettung:

assign bus = {high_byte, low_byte};

Codebeispiel

module assign_operators (
  input [3:0] a, b,
  input sel,
  output [3:0] and_out,
  output [4:0] sum_out,
  output is_equal,
  output [3:0] 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;     // Bedingte Auswahl (Multiplexer)
  
endmodule

Mehrere Operatoren in einer Zuweisung

Du kannst Operatoren in einem einzelnen Ausdruck kombinieren:

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

Operatorrangfolge

Verilog folgt der üblichen Rangfolge von Operatoren. Verwende Klammern ( ), um deine Absicht klarzumachen:

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

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

Aufgabe

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

Aufgaben:

  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)

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 assign-Anweisungen 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

Übe selbstständig: Online-Verilog-Compiler