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 verknüpft. 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 an einen Wire übergeben und ihn dauerhaft verbunden lassen. Der Prozess, dies zu tun, wird als kontinuierliche Zuweisung bezeichnet.
Kontinuierliche Zuweisung verwendet das assign-Schlüsselwort, um eine dauerhafte Verbindung zwischen einem Wire und einem Ausdruck herzustellen. Der Wire nimmt kontinuierlich den Wert des Ausdrucks an — genau wie ein physischer Draht.
Stellen Sie es sich eher wie das Löten eines Drahtes vor, als wie das einmalige Schreiben eines Wertes.
Syntax
assign wire_name = expression;| Teil | Bedeutung |
|---|---|
assign | Schlüsselwort, das die kontinuierliche Zuweisung startet |
wire_name | Die Leitung (wire), die angesteuert wird (darf kein 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.
Wie es funktioniert
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 UND b zu jeder Zeit
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, aktualisiert sich c automatisch.
Mehrfache Zuweisungen
Sie können 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 werden kontinuierlich und parallel ausgeführt.
Häufige Anwendungen
Kontinuierliche Zuweisungen werden verwendet für:
- Einfache Kombinationslogik (AND, OR, XOR)
- Verbinden von Leitungen (Wires)
- Erstellen von Tri-State-Puffern
- Ansteuern von Ausgängen aus kombinatorischen Ausdrücken
Aufgabe
Was zu tun ist:
- Füge die fehlende kontinuierliche Zuweisung hinzu, die
zgleichx AND ymacht.
Spickzettel
Kontinuierliche Zuweisung erzeugt eine dauerhafte Verbindung zwischen einem Wire und einem Ausdruck unter Verwendung des assign-Schlüsselworts:
assign wire_name = expression;Der Wire spiegelt kontinuierlich den Wert des Ausdrucks wider — wann immer sich die Eingänge ändern, wird der Ausgang sofort aktualisiert:
wire out;
assign out = a & b; // out ist immer gleich a UND bMehrere Zuweisungen laufen parallel ab:
assign x = a & b;
assign y = x | c; // y hängt von x ab, alle werden kontinuierlich aktualisiertWichtige Regeln: Nur wire (nicht reg) kann durch assign angesteuert werden.
Probier es selbst
module continuous_challenge (
input x,
input y,
output z
);
// TODO: Füge die fehlende kontinuierliche Zuweisung hinzu, die z gleich x UND 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. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen