Continuous Assignment
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 37 von 90.
In der Hardware ist eine Verbindung ein physischer wire, der zwei Punkte in einer Schaltung verbindet. Sobald der wire angebracht ist, ist die Verbindung dauerhaft und always aktiv. Wenn sich ein Ende ändert, ändert sich das andere Ende sofort.
In Verilog benötigen wir eine Möglichkeit, dieses Verhalten zu modellieren. Wir möchten einen Wert auf einen wire übertragen und ihn dauerhaft verbunden halten. Der Vorgang, dies zu tun, wird als continuous assignment bezeichnet.
Die kontinuierliche Zuweisung verwendet das Schlüsselwort assign, um eine dauerhafte Verbindung zwischen einem wire und einem expression herzustellen. Der wire nimmt kontinuierlich den Wert des expression an, genau wie ein physischer Draht.
Stell es dir eher als das Anlöten eines Drahtes vor, statt einen Wert einmal zu schreiben.
Syntax
assign wire_name = expression;| Teil | Bedeutung |
|---|---|
assign | Schlüsselwort, das die kontinuierliche Zuweisung startet |
wire_name | Die angesteuerte Leitung (kann nicht reg sein) |
expression | Der Wert, der die Leitung ansteuert |
Einfaches Beispiel
wire out;
assign out = a & b;Das bedeutet: out ist always equal zu a AND b. Immer wenn sich a oder b ändert, ändert sich out sofort.
So funktioniert es
Im Gegensatz zu einem reg, das einen Wert speichert, wird ein wire mit kontinuierlicher Zuweisung ständig aktualisiert:
module continuous_demo;
reg a, b;
wire c;
assign c = a & b; // c folgt a AND b jederzeit
initial begin
a = 0; b = 0;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0
a = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=0 (1&0=0)
b = 1;
#10 $display("a=%d, b=%d, c=%d", a, b, c); // c=1 (1&1=1)
$finish;
end
endmoduleAusgabe:
a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1Jedes Mal, wenn sich a oder b ändert, wird c automatisch aktualisiert.
Mehrere Zuweisungen
Du kannst mehrere kontinuierliche Zuweisungen in einem Modul haben:
module multiple_assign (
input a, b, c,
output x, y
);
assign x = a & b;
assign y = x | c; // y hängt von x ab
endmoduleAll Zuweisungen laufen parallel, continuously.
Häufige Verwendungen
Continuous assignments werden verwendet für:
- Einfache kombinatorische Logik (AND, OR, XOR)
- Zusammenschalten von Drähten
- Erstellen von Tri-State-Puffern
- Ansteuern von Ausgängen aus kombinatorischen Ausdrücken
Aufgabe
Was zu tun ist:
- Add die missing continuous assignment, die
zequal zux AND ymakes.
Probier es selbst
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Füge die fehlende continuous assignment hinzu, die z gleich x AND y macht
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