Takterzeugung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 71 von 90.
Ein Taktsignal wechselt in regelmäßigen Abständen kontinuierlich zwischen 0 und 1. Taktsignale sind für sequenzielle Logik wie Flipflops und Zähler unverzichtbar.
Warum einen Takt erzeugen
In Testbenches brauchst du einen Takt, um sequenzielle Schaltungen zu testen. Der Takt steuert das Verhalten von Flipflops, Registern und Zustandsautomaten.
Methoden zur Erzeugung eines Takts
| Methode | Beschreibung |
|---|---|
always mit #-Verzögerung | Die gebräuchlichste Methode |
forever-Schleife | Alternative Methode |
repeat-Schleife | Fü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 = 0zum Zeitpunkt 0- Alle 5 Zeiteinheiten wechselt
clkseinen Zustand
- Periode = 10 Zeiteinheiten
- Frequenz = 1/10 = 0.1 pro Zeiteinheit
Methode 2: Endlosschleife
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endDasselbe Ergebnis wie bei der always-Methode.
Methode 3: Für eine feste Anzahl von Zyklen wiederholen
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endErzeugt genau 10 Taktflanken (5 vollständige Zyklen) und stoppt dann.
Aufgabe
Füge den fehlenden Code hinzu, um ein Taktsignal zu erzeugen, das alle 4 Zeiteinheiten umschaltet (Periode = 8 Zeiteinheiten).
Das ist zu tun:
- Initialisiere
clkzum Zeitpunkt 0 mit eineminitial-Block auf 0 - Verwende einen
always-Block mit einer Verzögerung, umclkalle 4 Zeiteinheiten umzuschalten
Probier es selbst
module clock_challenge;
reg clk;
// TODO: Schritt 1 - Einen initial-Block hinzufügen, um clk = 0 zu setzen
// TODO: Schritt 2 - Einen 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
endmoduleDiese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Grundlagen
1Einführung
Was ist VerilogHardware vs. SoftwareIhr erstes ModulKommentareAbstraktionsebenen des Designs4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – einfache MathematikBitweise Operatoren7Zuweisungen und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-GrundelementeUND-, ODER- und NICHT-GatterXOR- und XNOR-GatterRückblick – Logikgatter-Schaltung10Entscheidungsfindung
If-AnweisungIf – ElseRückblick – Einfacher KomparatorCase-AnweisungCasex und CasezRückblick – ALU-Entwurf13Zeitsteuerung und Verzögerungen
Was sind Verzögerungen?GatterverzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Zeitsteuerung2Datentypen
Wire-TypReg-TypInteger und RealVektorenArraysParameterZusammenfassung – Signale deklarieren5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenSchiebeoperatorenVerkettungsoperatorBedingter OperatorRückblick – Operatoren-Herausforderung11Schleifen
For-SchleifeWhile-SchleifeWiederholungsschleifeEndlosschleifeAnweisung deaktivierenRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit fester BreiteZahlen ohne feste BreiteNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturInput- und Output-PortsInout-PortsModulinstanziierungPortzuordnung nach NamenPortzuordnung nach ReihenfolgeRückblick – Ein Modul erstellenÜbe selbstständig: Online-Verilog-Compiler