25 / 63 · Travaux pratiques
Travaux pratiques : test exhaustif du MUX et sortie enregistrée
Appliquer les mêmes entrées aux chemins combinatoire et enregistré, puis vérifier avec la table de vérité et les instants de capture.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
Circuit étudié et conditions d'observation
Avec sel=0, y prend a ; avec sel=1, il prend b. sampled_y stocke y au front montantFront montant Instant où l'horloge passe de 0 à 1, distinct du niveau désignant tout l'intervalle CLK=1. En savoir plus. Même si les entrées changent, sampled_y reste inchangé jusqu'au prochain front montant.
Avant de commencer
Préparez un projet Desktop Digital Design Studio et les autorisations d'exécution nécessaires. Enregistrez chaque exemple dans son propre dossier sous rtl/top.sv.
Commencez avec a et b différents. Vérifiez y=a pour sel=0 et y=b pour sel=1, puis comparez chaque ligne du fichier d'entrée.
y = sel ? b : a
Source SystemVerilog
module top (
input logic clk,
input logic a,
input logic b,
input logic sel,
output logic y,
output logic sampled_y
);
assign y = sel ? b : a;
// Explicit observation register: y remains purely combinational.
// The register makes this design eligible for logic-netlist-1 simulation.
always_ff @(posedge clk) sampled_y <= y;
endmoduleExécution
Dans New analysis, choisissez Two-state single-clock v1. Clock port : clk ; période : 1000ps. Avec les réglages suivants, lancez Preflight puis Run RTL simulation et comparez les résultats.
| Réglage | Valeur |
|---|---|
| Valeur initiale des registres, LSB en premier | [false] |
| Reset port | Vide |
| Maximum cycles / time | 8 / 8000ps |
Chaque colonne correspond à une entrée du fichier ci-dessous. Les valeurs combinatoires attendues sont 0,0,0,1,1,0,1,1. Le schéma prédit la fonction dans l'ordre des entrées ; il ne représente pas les instants de mise à jour de sampled_y.
Voir les données du chronogramme
| Signal | Forme d'onde | Valeurs du bus |
|---|---|---|
| a | 0...1... | |
| b | 0.1.0.1. | |
| sel | 01010101 | |
| y attendu | 0..1.01. |
Stimuli d'entrée
[
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
false
],
"b": [
true
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
false
],
"sel": [
true
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
false
]
}
},
{
"inputs": {
"a": [
true
],
"b": [
true
],
"sel": [
true
]
}
}
]Comparaison des résultats
8 cycles · y=1 · sampled_y=1. À 3000ps, vérifiez y=1 et sampled_y=0.
La manipulation utilise du RTL 0/1 à horloge unique, sans banc de test #delay, initial ou X/Z. L'indication de fin de leçon est un suivi pédagogique, pas un résultat de simulation.
Écrire d'abord les résultats attendus
Avant d'exécuter le simulateur, calculez pour la séquence : . Cela couvre les huit combinaisons et apporte davantage de preuves qu'une seule valeur finale correcte.
La sortie du 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 change au front montant, pas au changement du stimulus. Notez séparément y juste avant le front et la sortie stockée juste après.
L'entrée échantillonnée au front définit l'état après ce front ; sampled_y représente cet état. Même à une même coordonnée temporelle, vérifiez l'ordre des événements d'application des entrées et de mise à jour des registres.
Trois vérifications pour distinguer les défauts
- Sélection inversée : avant de remplacer l'expression par
sel ? a : b, prévoyez le premier vecteur en échec. Les vecteurs ne détectent pas cette erreur. - Point d'observation : expliquez pourquoi comparer immédiatement
sampled_yà la réponse combinatoire, au lieu dey, fait échouer même un circuit correct. - Maintien : changez seulement l'entrée non sélectionnée et vérifiez que reste stable. En revanche, doit suivre l'entrée sélectionnée.
Pour chaque erreur, consignez entrée, instant d'observation, attendu et obtenu. « Le chronogramme est étrange » ne distingue pas une sélection incorrecte d'une latence d'un cycle.
Prolongement
Avec des données sur quatre bits, l'espace combinatoire compte cas. Le test exhaustif reste possible ; commencez toutefois par 0, le maximum, 0101, 1010 et les motifs à un seul bit à 1 pour révéler vite les erreurs de position. Actualisez aussi configuration et fichier d'entrée pour la nouvelle largeur.
Essayez vous-même
Après avoir capturé sur un front montant, vous passez seulement à 1 avant le front suivant. Donnez après stabilisation, puis sampled_y avant et après le prochain front montant.
Lire l’explication
La sortie combinatoire vaut . sampled_y reste à 0 jusqu'au prochain front montant, puis stocke 1. On suppose que les entrées restent stables pendant la durée nécessaire à l'échantillonnage.