Menu
Coddy logo textTech

Continuous Assignment

Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 37 von 90.

In der Hardware ist eine Verbindung ein physischer wire, der zwei Punkte in einer Schaltung verbindet. Sobald der wire angebracht ist, ist die Verbindung dauerhaft und always 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 wire übertragen und ihn dauerhaft verbunden halten. Der Vorgang, dies zu tun, wird als continuous assignment bezeichnet.

Die kontinuierliche Zuweisung verwendet das Schlüsselwort assign, um eine dauerhafte Verbindung zwischen einem wire und einem expression herzustellen. Der wire nimmt kontinuierlich den Wert des expression an, 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;
TeilBedeutung
assignSchlüsselwort, das die kontinuierliche Zuweisung startet
wire_nameDie angesteuerte Leitung (kann nicht reg sein)
expressionDer Wert, der die Leitung ansteuert

Einfaches Beispiel

wire out;
assign out = a & b;

Das bedeutet: out ist always equal zu a AND b. Immer wenn 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
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.

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
endmodule

All Zuweisungen laufen parallel, continuously.

Häufige Verwendungen

Continuous assignments werden verwendet für:

  • Einfache kombinatorische Logik (AND, OR, XOR)
  • Zusammenschalten von Drähten
  • Erstellen von Tri-State-Puffern
  • Ansteuern von Ausgängen aus kombinatorischen Ausdrücken
challenge icon

Aufgabe

Was zu tun ist:

  1. Add die missing continuous assignment, 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

Übe selbstständig: Online-Verilog-Compiler