30 / 63 · Concetto
Stato successivo del contatore e priorità del reset
Unire incremento, mantenimento, reset e ritorno in una specifica e calcolare ogni fronte.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Definire prima la funzione di stato successivo
Un contatore libero a bit con reset sincrono ed enable si descrive così:
Il resetReset Controllo che riporta allo stato iniziale specificato. Occorre definirne sincronicità e priorità rispetto agli altri controlli. ha priorità; con enable=0 si mantiene il valore. Nella visualizzazione seguente potete cambiare enable per confrontare incremento e mantenimento.
Partendo da q=11, scegliete reset=1: cambia solo il prossimo stato in 00. Avanzate il clock per osservare quando cambia il registro. Rilasciate reset e percorrete 00→01→10→11→00. Con enable=0 il numero di fronti deve continuare ad aumentare, mentre q deve restare fermo.
Il reset sincrono ha priorità su enable. Con enable=0, il valore memorizzato viene mantenuto. q=11; q_next = (q + 1) mod 4
Preparare i valori attesi per ogni fronte
Con stato iniziale 3 e reset=1 solo al primo fronte, un contatore a due bit produce poi 0,1,2,3,0. Attivare il reset sincrono fra i fronti non porta subito a 0 il registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci prima del fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci.
| Fronte | reset prima | C precedente | C aggiornato |
|---|---|---|---|
| 1 | 1 | 3 | 0 |
| 2 | 0 | 0 | 1 |
| 3 | 0 | 1 | 2 |
| 4 | 0 | 2 | 3 |
| 5 | 0 | 3 | 0 |
Ogni colonna registra un fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci. Gli ingressi sono quelli immediatamente precedenti; gli stati indicati con «after» sono quelli subito dopo l’aggiornamento. Le colonne indicano l’ordine dei campioni, non il ritardo fisico di propagazioneRitardo di propagazione Tempo dalla variazione d’ingresso all’assestamento corretto dell’uscita. Equivalenza logica e proprietà temporali sono distinte. Approfondisci. Si parte da 3; al primo fronte reset prevale sull'incremento. L'ultimo fronte riporta da 3 a 0.
Mostra i dati della forma d’onda
| Segnale | Forma d’onda | Valori del bus |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count before | 23452 | 11 → 00 → 01 → 10 → 11 |
| count after | 23452 | 00 → 01 → 10 → 11 → 00 |
Non confondere i tipi di reset
if(rst) dentro always_ff @(posedge clk) è sincrono. Non equivale al reset asincrono che aggiunge un fronte reset alla lista eventi. Il rilascio asincrono ha vincoli recovery/removal propri: non sceglietelo solo perché porta a 0 più rapidamente.
Per un contatore a impulsi periodici bisogna definire anche quando emettere il segnale: durante lo stato massimo oppure per un ciclo dopo il ritorno a 0. Cambiano formula d'uscita e istante d'osservazione.
Prova tu
Un contatore a tre bit vale 7. Prima rst=0, en=0, poi rst=0, en=1: quali stati seguono?
Leggi la spiegazione
Prima mantiene 7, poi ritorna a 0 nel campo a tre bit. Per conservare 8 serve più larghezza o una politica separata di saturazione/errore.