Menu
Coddy logo textTech

Takterzeugung

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

Ein Takt ist ein Signal, das in regelmäßigen Abständen kontinuierlich zwischen 0 und 1 wechselt. Taktsignale sind essenziell für sequentielle Logik wie Flipflops und Zähler.

Warum ein Taktsignal generieren

In Testbenches benötigen Sie ein Taktsignal, um sequentielle Schaltungen zu testen. Der Takt steuert das Verhalten von Flip-Flops, Registern und Zustandsautomaten.

Methoden zur Takterzeugung

MethodeBeschreibung
always mit # VerzögerungHäufigste Methode
forever-SchleifeAlternative Methode
repeat-SchleifeFür eine feste Anzahl von Zyklen

Methode 1: Always-Block mit Verzögerung

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk;
  • clk = 0 zum Zeitpunkt 0
  • Alle 5 Zeiteinheiten wechselt clk den Zustand
  • Periode = 10 Zeiteinheiten
  • Frequenz = 1/10 = 0,1 pro Zeiteinheit

Methode 2: Forever-Schleife

reg clk;

initial begin
  clk = 0;
  forever begin
    #5 clk = ~clk;
  end
end

Dasselbe Ergebnis wie bei der always-Methode.

Methode 3: Wiederholung für feste Zyklen

reg clk;

initial begin
  clk = 0;
  repeat (10) begin
    #5 clk = ~clk;
  end
end

Erzeugt genau 10 Taktflanken (5 vollständige Zyklen) und stoppt dann.

challenge icon

Aufgabe

Fügen Sie den fehlenden Code hinzu, um einen Takt zu erzeugen, der alle 4 Zeiteinheiten umschaltet (Periode = 8 Zeiteinheiten).

Was zu tun ist:

  1. Initialisieren Sie clk zum Zeitpunkt 0 auf 0 unter Verwendung eines initial-Blocks
  2. Verwenden Sie einen always-Block mit einer Verzögerung, um clk alle 4 Zeiteinheiten umzuschalten

Spickzettel

Ein Takt (Clock) schaltet in regelmäßigen Abständen zwischen 0 und 1 um. Periode = 2 × Verzögerung (delay).

Methode 1: Always-Block (am gebräuchlichsten)

reg clk;

initial begin
  clk = 0;
end

always #5 clk = ~clk; // Periode = 10

Methode 2: Forever-Schleife

initial begin
  clk = 0;
  forever #5 clk = ~clk;
end

Methode 3: Repeat (feste Anzahl von Flanken)

initial begin
  clk = 0;
  repeat(10) #5 clk = ~clk; // 10 Flanken = 5 Zyklen
end

Probier es selbst

module clock_challenge;
  reg clk;
  
  // TODO: Schritt 1 - Initial-Block hinzufügen, um clk = 0 zu setzen
  
  
  // TODO: Schritt 2 - Always-Block hinzufügen, um clk alle 4 Zeiteinheiten umzuschalten
  

  initial begin
    $monitor("Time %0t: clk = %b", $time, clk);
    #20;
    $display("Clock generated for 20 time units");
    $finish;
  end
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