Generazione del clock
Fa parte della sezione Fondamenti del percorso Verilog di Coddy. Lezione 71 di 90.
Un clock è un segnale che alterna continuamente tra 0 e 1 a intervalli regolari. I clock sono essenziali per la logica sequenziale, come i flip-flop e i contatori.
Perché generare un clock
Nei testbench, hai bisogno di un clock per testare i circuiti sequenziali. Il clock determina il comportamento dei flip-flop, dei registri e delle macchine a stati.
Metodi per generare un clock
| Metodo | Descrizione |
|---|---|
always con ritardo # | Metodo più comune |
Ciclo forever | Metodo alternativo |
Ciclo repeat | Per un numero fisso di cicli |
Metodo 1: Blocco always con ritardo
reg clk;
initial begin
clk = 0;
end
always #5 clk = ~clk;clk = 0al tempo 0- Ogni 5 unità di tempo,
clkcambia stato
- Periodo = 10 unità di tempo
- Frequenza = 1/10 = 0.1 per unità di tempo
Metodo 2: ciclo infinito
reg clk;
initial begin
clk = 0;
forever begin
#5 clk = ~clk;
end
endStesso risultato del metodo always.
Metodo 3: Ripetere per un numero fisso di cicli
reg clk;
initial begin
clk = 0;
repeat (10) begin
#5 clk = ~clk;
end
endGenera esattamente 10 fronti di clock (5 cicli completi), poi si ferma.
Sfida
Aggiungi il codice mancante per generare un clock che cambia stato ogni 4 unità di tempo (periodo = 8 unità di tempo).
Cosa fare:
- Inizializza
clka 0 al tempo 0 usando un bloccoinitial - Usa un blocco
alwayscon un ritardo per cambiare lo stato diclkogni 4 unità di tempo
Provalo tu
module clock_challenge;
reg clk;
// TODO: Passaggio 1 - Aggiungi un blocco initial per impostare clk = 0
// TODO: Passaggio 2 - Aggiungi un blocco always per commutare clk ogni 4 unità di tempo
initial begin
$monitor("Time %0t: clk = %b", $time, clk);
#20;
$display("Clock generated for 20 time units");
$finish;
end
endmoduleQuesta lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Tutte le lezioni di Fondamenti
1Introduzione
Cos'è VerilogHardware e software a confrontoIl tuo primo moduloCommentiLivelli di astrazione della progettazione4Operatori - Parte 1
Operatori aritmeticiOperatore moduloOperatori di confrontoRiepilogo - Matematica sempliceOperatori bitwise7Assegnazioni e porte
Assegnazione continuaAssegnazioni con operatoriPrimitive di porte integratePorte AND, OR e NOTPorte XOR e XNORRiepilogo: circuito con porte logiche10Decisioni
Istruzione ifIf-ElseRiepilogo - Comparatore sempliceIstruzione caseCasex e casezRiepilogo - Progettazione di una ALU13Tempi e ritardi
Cosa sono i ritardiRitardi nei gateRitardi nelle assegnazioniDirettiva timescaleGenerazione del clockRiepilogo - Controllo dei tempi5Operatori Parte 2
Operatori logiciOperatori di riduzioneOperatori di scorrimentoOperatore di concatenazioneOperatore condizionaleRiepilogo - Sfida sugli operatori3Sistema numerico
Rappresentazione binariaNumeri con dimensione specificataNumeri senza dimensione specificataNumeri negativiValori speciali X e ZRiepilogo - Formati numerici6Moduli
Struttura di un moduloPorte di input e outputPorte InoutIstanziazione di un moduloMappatura delle porte per nomeMappatura delle porte per ordineRiepilogo - Costruire un modulo9Blocchi procedurali
Blocco alwaysBlocco initialLista di sensibilitàAssegnazione bloccanteAssegnazione non bloccanteRiepilogo: always vs initial12Progetto Multiplexer
Progettazione di un mux da 2 a 1Progettazione di un mux da 4 a 1Esercitati da solo: Compilatore Verilog online