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;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 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)Operatorrangfolge
Verilog folgt der standardmäßigen Operatorrangfolge. Verwende Klammern ( ), um deine Absicht klar 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. 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