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 einen Wire anzusteuern.
Grundlegende Syntax
assign wire_name = expression;Der Ausdruck kann Folgendes enthalten:
- Arithmetische Operatoren (
+,-,*,/) - Bitweise Operatoren (
&,|,^,~) - Logische Operatoren (
&&,||,!)
- Vergleichsoperatoren (
>,<,==,!=) - Shift-Operatoren (
<<,>>) - Ternärer Operator / Bedingungsoperator (
? :)
Beispiele mit verschiedenen Operatoren
Bitweises AND:
assign out = a & b;Addition:
assign sum = a + b;Vergleich:
assign is_greater = (a > b);Bedingt (Multiplexer):
assign out = sel ? a : b;Shift:
assign shifted = data << 2;Concatenation:
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 AND
assign sum_out = a + b; // Addition
assign is_equal = (a == b); // Vergleich
assign mux_out = sel ? a : b; // Bedingt (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 Precedence
Verilog folgt den Standard-Operatorrangfolgen. Verwenden Sie Klammern ( ), um Ihre Absicht deutlich (Clear) zu machen:
// 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)
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
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