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)
endmoduleMehrere 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;Aufgabe
Füge die fehlenden assign-Anweisungen basierend auf den Aufgaben hinzu.
Was zu tun ist:
- Setze
and_resultgleichinput_a AND input_b(bitweise) - Setze
or_resultgleichinput_a OR input_b(bitweise) - Setze
xor_resultgleichinput_a XOR input_b(bitweise) - Setze
not_resultgleichNOT 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 XORVerwenden 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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen