Menu
Coddy logo textTech

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;
TeilBedeutung
assignSchlüsselwort, das die kontinuierliche Zuweisung startet
wire_nameDie Leitung (wire), die angesteuert wird (darf kein reg sein)
expressionDer 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
endmodule

Ausgabe:

a=0, b=0, c=0
a=1, b=0, c=0
a=1, b=1, c=1

Jedes 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
endmodule

Alle 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
challenge icon

Aufgabe

Was zu tun ist:

  1. Füge die fehlende kontinuierliche Zuweisung hinzu, die z gleich x AND y macht.

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 b

Mehrere Zuweisungen laufen parallel ab:

assign x = a & b;
assign y = x | c; // y hängt von x ab, alle werden kontinuierlich aktualisiert

Wichtige 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
  

endmodule
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Grundlagen