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)
endmoduleMehrere 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;Aufgabe
Füge die fehlenden assign-Anweisungen entsprechend den Aufgaben hinzu.
Aufgaben:
- 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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler