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 (führt einmal aus) und always (führt kontinuierlich aus). Schauen wir uns nun den initial-Block an.

Was ist ein Initial-Block?

Der initial-Block wird nur einmal zu Beginn der Simulation (Zeitpunkt 0) ausgeführt. Wenn er beendet ist, wird er nicht noch einmal ausgeführt.

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

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

Syntax

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

Grundelegendes Beispiel

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

Ausgabe:

Simulation started
This runs once

Verwendung von Initial Block für Test-Signale

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

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

Initial vs Always

 initialalways
RunsOnceKontinuierlich (dauerhaft)
Verwendung fürTestbenches, InitialisierungHardware (Flipflops, Zähler)
Synthetisierbar?Nein (nur Simulation)Ja (mit Sensitivitätsliste)

Wichtige Hinweise

  • initial-Blöcke sind nicht synthetisierbar — sie können nicht in Hardware umgesetzt werden
  • Verwenden Sie initial nur in Testbenches
  • Wenn die Testbench einen frei laufenden Takt enthält (z. B. always #5 clk = ~clk;), läuft die Simulation ewig, außer Sie rufen $finish auf; bei nur einem initial-Block stoppt der Simulator von selbst, wenn keine Ereignisse mehr vorhanden sind, aber das Hinzufügen von $finish ist dennoch bewährte Praxis
challenge icon

Aufgabe

Füge den fehlenden initial-Block hinzu, der a auf 0 setzt und nach 10 Zeiteinheiten a 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: Hier einen initial-Block 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