17 / 37 · Travaux pratiques
Travaux pratiques : reset, rebouclage et invariants du compteur
Comparer chaque front à une référence et isoler les effets de l'initialisation, du reset et de la largeur.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Circuit étudié et observation
L'état initial vaut 3 ; le premier front montantFront montant Instant où l'horloge passe de 0 à 1, distinct du niveau désignant tout l'intervalle CLK=1. En savoir plus applique le resetReset Commande ramenant l'état à la valeur initiale spécifiée. Son caractère synchrone/asynchrone et sa priorité sur les autres commandes doivent être définis. En savoir plus. Ensuite, les valeurs sont 0,1,2,3,0. Même avec reset actif, le compte reste inchangé avant le front.
Avant de commencer
Préparez un projet Desktop Digital Design Studio et ses autorisations d'exécution. Enregistrez chaque exemple dans un dossier distinct sous rtl/top.sv.
Source 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;
endmoduleExécution
Dans New analysis, choisissez Two-state single-clock v1, Clock port=clk et une période de 1000ps. Lancez Preflight puis Run RTL simulation avec :
| Réglage | Valeur |
|---|---|
| Valeur initiale des registres, LSB en premier | [true,true] |
| Reset port | rst · Active high · 1 cycle |
| Maximum cycles / time | 5 / 5000ps |
Stimuli
[
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
},
{
"inputs": {}
}
]Chaque colonne représente un front montant : entrées juste avant, états after juste après. L'alignement indique les échantillons, pas la propagation physiqueRetard de propagation Temps nécessaire après un changement d'entrée pour que la sortie se stabilise à sa valeur correcte. Équivalence logique et caractéristiques temporelles sont distinctes. En savoir plus. E0–E4 correspondent à 500,1500,2500,3500,4500ps. Comparez toutes les valeurs intermédiaires de count, pas seulement la dernière.
Voir les données du chronogramme
| Signal | Forme d'onde | Valeurs du bus |
|---|---|---|
| edge | 23452 | E0 → E1 → E2 → E3 → E4 |
| reset | 10... | |
| count avant | 23452 | 11 → 00 → 01 → 10 → 11 |
| count après | 23452 | 00 → 01 → 10 → 11 → 00 |
Résultats à comparer
5 cycles · count=00. Vérifiez 00→01→10→11→00 à 500,1500,2500,3500,4500ps.
Le TP utilise du RTL 0/1 à horloge unique, sans banc #delay, initial ou X/Z. L'indication de fin de leçon est une trace pédagogique, pas un résultat de simulation.
Calculer l'état attendu à chaque front
Le registreRegistre Circuit stockant plusieurs bits d'état. Les registres synchrones du cours capturent leur entrée définie sur un front d'horloge. En savoir plus commence à 3, mais le reset prime au premier front. Initialisation et reset sont distincts.
| Front montant | rst | count avant | count après |
|---|---|---|---|
| 500ps | 1 | 11 | 00 |
| 1500ps | 0 | 00 | 01 |
| 2500ps | 0 | 01 | 10 |
| 3500ps | 0 | 10 | 11 |
| 4500ps | 0 | 11 | 00 |
Sans reset, la relation suivante doit tenir à chaque front :
Vérifier seulement le 00 final peut laisser passer des états intermédiaires incorrects. Contrôlez toute la séquence et, séparément, la priorité du reset.
Changer un seul paramètre à la fois
- Avec une initialisation à 00, la séquence après le premier reset doit rester identique : vérifiez son indépendance de l'état initial.
- Avec Reset cycles=2, count doit valoir 00 aux deux premiers fronts ; l'incrémentation commence un front plus tard.
- Sur trois bits, le rebouclage demande huit incréments. Revoyez déclaration, largeurs des constantes, tableau initial et durée d'exécution.
Généraliser à modulo-10
Quatre bits représentent 0–15 : incrémenter ne donne donc pas automatiquement 0 après 9. Définissez explicitement :
Cette règle ramène 10–15 à 0 lorsqu'enable est actif. D'autres récupérations sont possibles, mais spécification et modèle de vérification doivent partager la même politique.
Essayez vous-même
Après le reset du premier front, le compteur original de deux bits effectue onze incréments sans commande enable. Calculez count sans énumérer les états intermédiaires.
Lire l’explication
Après reset, l'état est 0 ; , soit 11. « Onze fronts au total » diffère d'« onze incréments après reset » : si le premier des onze fronts réinitialise, il n'y a que dix incréments.