Takterzeugung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy — Lektion 71 von 90.
Ein Clock-Signal (Uhrsignal) ist ein Signal, das kontinuierlich in regelmäßigen Abständen zwischen 0 und 1 wechselt. Clocks sind essenziell für sequentielle Logik wie Flip-Flops und Zähler.
Warum ein Clock-Signal erzeugen
In Testbenches benötigen Sie ein Clock-Signal, um sequentielle Schaltungen zu testen. Das Clock-Signal steuert das Verhalten von Flip-Flops, Registern und Zustandsautomaten.
Methoden zur Erzeugung eines Takts (Clock)
| Methode | Beschreibung |
|---|---|
always mit #-Verzögerung | Häufigste 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 = 0bei Zeit 0- Alle 5 Zeiteinheiten wechselt
clkden Zustand
- Period = 10 time units
- Frequenz = 1/10 = 0.1 pro time unit
Methode 2: Forever-Schleife
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endDasselbe Ergebnis wie bei der always-Methode.
Methode 3: Repeat für eine feste Anzahl von Zyklen
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endErzeugt genau 10 Takflanken (5 vollständige Zyklen) und stoppt dann.
Aufgabe
Füge den fehlenden Code hinzu, um einen clk-Takt zu erzeugen, der alle 4 Zeiteinheiten umschaltet (Period = 8 Zeiteinheiten).
Was zu tun ist:
- Initialisiere
clkzum Zeitpunkt 0 mit eineminitial-Block auf 0 - Verwende einen
always-Block mit einer Verzögerung, umclkalle 4 Zeiteinheiten umzuschalten (toggle)
Probier es selbst
module clock_challenge;
reg clk;
// TODO: Schritt 1 - Füge einen initial-Block hinzu, um clk = 0 zu setzen
// TODO: Schritt 2 - Füge einen always-Block hinzu, 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. SoftwareAbstraktionsebenen im DesignDein erstes ModulKommentare4Operatoren Teil 1
Arithmetische OperatorenModulo-OperatorVergleichsoperatorenWiederholung – Einfache MathematikBitweise Operatoren7Zuweisung und Gatter
Kontinuierliche ZuweisungZuweisung mit OperatorenIntegrierte Gatter-PrimitiveAND OR NOT GatterXOR XNOR GatterZusammenfassung - Logikgatterschaltung10Entscheidungsfindung
If-AnweisungIf - ElseWiederholung - Einfacher KomparatorCase-AnweisungCasex und CasezWiederholung - ALU-Design13Timing und Verzögerungen
Was sind VerzögerungenGatter-VerzögerungenZuweisungsverzögerungenTimescale-DirektiveTakterzeugungZusammenfassung – Timing-Steuerung5Operatoren Teil 2
Logische OperatorenReduktionsoperatorenShift-OperatorenVerkettungsoperatorBedingter OperatorZusammenfassung – Operator-Challenge11Schleifen
For-SchleifeWhile-SchleifeRepeat-SchleifeEndlosschleifeDisable-AnweisungRückblick – Schleifenmuster3Zahlensystem
Binäre DarstellungZahlen mit GrößenangabeZahlen ohne GrößenangabeNegative ZahlenSpezialwerte X und ZZusammenfassung – Zahlenformate6Module
ModulstrukturEingangs- und Ausgangs-PortsInout-PortsModul-InstanziierungPort-Mapping nach NamePort-Mapping nach ReihenfolgeZusammenfassung – Ein Modul erstellen