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 einer Schaltung verbindet. Sobald der Draht verlegt 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 für immer verbunden lassen. Dieser Vorgang wird als continuous assignment bezeichnet.
Continuous assignment verwendet das assign-Schlüsselwort, um eine permanente Verbindung zwischen einem wire und einer expression herzustellen. Der wire nimmt continuously den Wert der expression an — genau wie ein physischer wire.
Stellen Sie es sich eher wie das Löten eines Drahtes vor, als das einmalige Schreiben eines Wertes.
Syntax
assign wire_name = expression;| Teil | Bedeutung |
|---|---|
assign | Schlüsselwort, das die kontinuierliche Zuweisung startet |
wire_name | Der angesteuerte Wire (kann nicht reg sein) |
expression | Der Wert, der den Wire ansteuert |
Einfaches Beispiel
wire out;
assign out = a & b;Das bedeutet: out ist always equal zu 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 AND 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, wird c automatisch aktualisiert.
Multiple Assignments
Sie können mehrere continuous assignments in einem module 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 parallel, kontinuierlich.
Häufige Verwendungen
Kontinuierliche Zuweisungen werden verwendet für:
- Einfache Kombinationslogik (AND, OR, XOR)
- Verbinden von Wires
- Erstellen von Tri-State-Puffern
- Ansteuern von Ausgängen aus kombinatorischen Ausdrücken
Aufgabe
Was zu tun ist:
- Fügen Sie die fehlende
continuousassignmenthinzu, diezequalzux 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. 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