Menu
Coddy logo textTech

Initial-Block

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

Verilog hat zwei prozedurale Blöcke: initial (wird einmal ausgeführt) und always (wird kontinuierlich ausgeführt). Sehen wir uns nun den initial-Block an.

Was ist ein Initial-Block?

Der initial-Block wird am Anfang der Simulation (Zeit 0) nur einmal ausgeführt. Wenn er fertig ist, wird er nicht erneut ausgeführt.

Es wird hauptsächlich in Testbenches verwendet für:

  • Das Festlegen von Anfangswerten
  • Das Erzeugen von Testsignalen
  • Das Anzeigen von Nachrichten
  • Das Starten der Simulation

Syntax

initial begin
  // Anweisungen werden einmal sequenziell ausgeführt
end

Grundlegendes Beispiel

initial begin
  $display("Simulation started");
  $display("This runs once");
  $finish;
end

Ausgabe:

Simulation started
This runs once

Initial-Block für Testsignale verwenden

initial begin
  a = 0;
  #10 a = 1;
  #10 a = 0;
  #10 $finish;
end

Dies ändert a zu den Zeitpunkten: 0, 10 und 20.

Initial vs. Always

 initialalways
AusführungEinmalKontinuierlich (für immer)
Verwendung fürTestbenches, InitialisierungHardware (Flip-Flops, Zähler)
Synthetisierbar?Nein (nur Simulation)Ja (mit Sensitivitätsliste)

Wichtige Hinweise

  • initial-Blöcke sind nicht synthetisierbar. Sie können nicht in Hardware umgewandelt werden
  • Verwende initial nur in Testbenches
  • Wenn die Testbench eine freilaufende Taktquelle enthält (z. B. always #5 clk = ~clk;), läuft die Simulation unendlich weiter, sofern du nicht $finish aufrufst; bei nur einem initial-Block stoppt der Simulator von selbst, sobald keine Ereignisse mehr vorhanden sind, aber das Hinzufügen von $finish ist trotzdem gute Praxis
challenge icon

Aufgabe

Füge den fehlenden initial-Block hinzu, der a auf 0 setzt und a anschließend nach 10 Zeiteinheiten auf 1 setzt.

Was zu tun ist:

  1. Füge initial begin und end hinzu
  2. Setze a = 0
  3. Warte #10
  4. Setze a = 1
  5. Füge $finish hinzu, um die Simulation zu beenden

Probier es selbst

module test;
  reg a;
  
  // TODO: Initial-Block hier hinzufügen
  // Setze a = 0
  // Warte #10
  // Setze a = 1
  // Füge $finish; hinzu, um die Simulation zu beenden
  
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