Takterzeugung
Teil des Abschnitts Grundlagen der Verilog-Journey von Coddy. Lektion 71 von 90.
Ein Taktsignal ist ein Signal, das in regelmäßigen Abständen kontinuierlich zwischen 0 und 1 wechselt. Taktsignale sind für sequentielle Logik wie Flip-Flops und Zähler unerlässlich.
Warum einen Takt erzeugen?
In Testbenches benötigst du einen Takt, um sequentielle Schaltungen zu testen. Der Takt steuert das Verhalten von Flip-Flops, Registern und Zustandsautomaten.
Methoden zum Erzeugen einer Uhr
| Methode | Beschreibung |
|---|---|
always mit #-Verzögerung | Gängigste Methode |
forever-Schleife | Alternative Methode |
repeat-Schleife | Für eine festgelegte Anzahl von Zyklen |
Methode 1: Immer-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 eine Uhr zu erzeugen, die alle 4 Zeiteinheiten umschaltet (Periode = 8 Zeiteinheiten).
Aufgabe:
- Initialisiere
clkzum Zeitpunkt 0 mithilfe einesinitial-Blocks 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 - 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. 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