17 / 37 · Esercitazione
Laboratorio: reset, ritorno e invarianti del contatore
Confrontare ogni fronte con un riferimento e separare effetti di inizializzazione, reset e larghezza.
Le lezioni sono gratuite. Iscriviti per salvare i progressi.
Oggetto del laboratorio e osservazione
Partite da 3 e applicate resetReset Controllo che riporta allo stato iniziale specificato. Occorre definirne sincronicità e priorità rispetto agli altri controlli. Approfondisci al primo fronte di salitaFronte di salita Passaggio del clock da 0 a 1, distinto dall’intero intervallo di livello CLK=1. Approfondisci. Poi la sequenza è 0,1,2,3,0. Anche con reset attivo, prima del fronte il valore resta invariato.
Prima di iniziare
Preparate un progetto Desktop in Digital Design Studio e autorizzazioni di esecuzione valide. Salvate ogni esempio come rtl/top.sv in una cartella separata.
Sorgente SystemVerilog
module top (
input logic clk,
input logic rst,
output logic [1:0] count
);
// Active-high synchronous reset: sampled only at the rising clock edge.
always_ff @(posedge clk)
if (rst) count <= 2'b00;
else count <= count + 2'b01;
endmoduleEsecuzione
In New analysis selezionate Two-state single-clock v1. Clock port è clk e il periodo è 1000ps. Con i valori seguenti eseguite Preflight, poi Run RTL simulation, e confrontate i risultati.
| Impostazione | Valore |
|---|---|
| Valori iniziali dei registri, dal LSB | [true, true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Stimoli d'ingresso
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]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 con „after“ 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. E0–E4 sono i fronti a 500,1500,2500,3500,4500ps. Confrontate ogni colonna count, non solo il finale.
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 |
Confronto dei risultati
5 cycles · count=00. A 500,1500,2500,3500,4500ps verificate 00 → 01 → 10 → 11 → 00.
Il laboratorio usa RTL 0/1 con un solo clock. Non include testbench con #delay, initial o X/Z. Il contrassegno di completamento documenta l’apprendimento, non un risultato di simulazione reale.
Calcolare gli stati attesi per fronte
Il registroRegistro Memorizza uno stato di più bit. I registri sincroni del corso acquisiscono gli ingressi specificati al fronte di clock. Approfondisci parte da 3, ma al primo fronte prevale reset. Inizializzazione e reset non sono la stessa cosa.
| Fronte di salita | rst | count prima | count dopo |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Senza reset deve valere a ogni fronte:
Controllare solo il finale 00 può nascondere stati intermedi errati. Verificate separatamente l'intera sequenza e la priorità del reset.
Cambiare una sola condizione alla volta
- Partendo da 00 la sequenza dopo il primo reset resta uguale: si verifica l'indipendenza dallo stato iniziale.
- Con Reset cycles=2, i primi due fronti devono dare count=00; l'incremento comincia un fronte più tardi.
- Con tre bit il periodo è di otto incrementi. Controllate anche larghezza delle costanti, array iniziale e durata del test, oltre alla dichiarazione.
Generalizzare al modulo 10
Quattro bit rappresentano 0–15: il semplice incremento non torna a 0 dopo 9. Occorre una funzione di stato successivo specifica.
Questa definizione recupera anche gli stati inutilizzati 10–15 portandoli a 0 con enable. Sono possibili altre politiche, ma specifica e modello di verifica devono condividerle.
Prova tu
Qual è count nel contatore originale a due bit dopo undici incrementi incondizionati successivi al reset del primo fronte? Calcolate senza elencare gli stati.
Leggi la spiegazione
Dopo reset lo stato è 0: , cioè 11. Undici fronti totali non equivalgono a undici incrementi dopo reset: se il primo azzera, gli incrementi sono dieci.