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
| 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 = 0zum Zeitpunkt 0- Alle 5 Zeiteinheiten wechselt
clkden 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
endDasselbe 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
endErzeugt genau 10 Taktflanken (5 vollständige Zyklen) und stoppt dann.
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:
- Initialisieren Sie
clkzum Zeitpunkt 0 auf 0 unter Verwendung einesinitial-Blocks - Verwenden Sie einen
always-Block mit einer Verzögerung, umclkalle 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 = 10Methode 2: Forever-Schleife
initial begin
clk = 0;
forever #5 clk = ~clk;
endMethode 3: Repeat (feste Anzahl von Flanken)
initial begin
clk = 0;
repeat(10) #5 clk = ~clk; // 10 Flanken = 5 Zyklen
endProbier 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
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