Assign With Operators
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. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine LogicÜbe selbstständig: Online-Verilog-Compiler