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 verbindet. 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 auf einen Draht übertragen und ihn für immer verbunden halten. Der Vorgang, dies zu tun, wird als kontinuierliche Zuweisung bezeichnet.

Eine kontinuierliche Zuweisung verwendet das Schlüsselwort assign, um eine dauerhafte Verbindung zwischen einem Draht und einem Ausdruck herzustellen. Der Draht übernimmt kontinuierlich den Wert des Ausdrucks, 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 immer gleich a AND b. Wann immer 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

Alle Zuweisungen laufen kontinuierlich parallel.

Häufige Anwendungen

Kontinuierliche Zuweisungen werden verwendet für:

  • Einfache kombinatorische Logik (AND, OR, XOR)
  • Drähte miteinander verbinden
  • Tri-State-Puffer erstellen
  • Ausgänge mit kombinatorischen Ausdrücken ansteuern
challenge icon

Aufgabe

Aufgabe:

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

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