Kontinuierliche Zuweisung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 37 von 90.
In der Hardware ist eine Verbindung ein physischer Draht, der zwei Punkte in einem Schaltkreis miteinander verbindet. Sobald der Draht angebracht ist, ist die Verbindung dauerhaft und immer 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 Draht übertragen und ihn für immer verbunden halten. Der Vorgang, dies zu tun, wird als kontinuierliche Zuweisung bezeichnet.
Eine kontinuierliche Zuweisung verwendet das Schlüsselwort assign, um eine dauerhafte Verbindung zwischen einem Draht und einem Ausdruck herzustellen. Der Draht übernimmt kontinuierlich den Wert des Ausdrucks, 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 immer gleich a AND b. Wann immer 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
endmoduleAlle Zuweisungen laufen kontinuierlich parallel.
Häufige Anwendungen
Kontinuierliche Zuweisungen werden verwendet für:
- Einfache kombinatorische Logik (AND, OR, XOR)
- Drähte miteinander verbinden
- Tri-State-Puffer erstellen
- Ausgänge mit kombinatorischen Ausdrücken ansteuern
Aufgabe
Aufgabe:
- Füge die fehlende kontinuierliche Zuweisung hinzu, die
zgleichx AND ymacht.
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 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