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). Behandeln wir nun den initial-Block.

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 erneut ausgeführt.

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

  • Setzen von Initialwerten
  • Erzeugen von Testsignalen
  • Anzeigen von Meldungen
  • Starten der Simulation

Syntax

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

Einfaches Beispiel

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

Ausgabe:

Simulation started
This runs once

Verwendung des Initial-Blocks für Testsignale

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ührungEinmaligKontinuierlich (dauerhaft)
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 umgesetzt werden
  • Verwenden Sie initial nur in Testbenches
  • Ohne $finish läuft die Simulation ewig (kein Takt, um sie zu stoppen)
challenge icon

Aufgabe

Fügen Sie den fehlenden initial-Block hinzu, der a auf 0 setzt und dann nach 10 Zeiteinheiten a auf 1 setzt.

Was zu tun ist:

  1. Fügen Sie initial begin und end hinzu
  2. Setzen Sie a = 0
  3. Warten Sie #10
  4. Setzen Sie a = 1
  5. Fügen Sie $finish hinzu, um die Simulation zu beenden

Spickzettel

Der initial-Block wird einmal zum Simulationszeitpunkt 0 ausgeführt. Er wird nur in Testbenches verwendet (nicht synthetisierbar).

initial begin
  a = 0;       // gesetzt zum Zeitpunkt 0
  #10 a = 1;   // gesetzt zum Zeitpunkt 10
  #10 a = 0;   // gesetzt zum Zeitpunkt 20
  $finish;     // Simulation beenden
end

Ohne $finish läuft die Simulation unendlich lange.

initialalways
AusführungEinmalKontinuierlich
Verwendung fürTestbenchesHardware
Synthetisierbar?NeinJa

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