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 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;
TeilBedeutung
assignSchlüsselwort, das die kontinuierliche Zuweisung startet
wire_nameDer angesteuerte Wire (kann nicht reg sein)
expressionDer 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
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, 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
endmodule

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

Aufgabe

Was zu tun ist:

  1. Fügen Sie die fehlende continuous assignment hinzu, die z equal zu x AND y makes.

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
  

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