Altifigence Academy

40 / 63 · Travaux pratiques

Travaux pratiques : déplacement série et ordre des bits

Vérifier sens, bits perdus et latence après reset avec motifs binaires et référence entière.

Circuit étudié et observation

À chaque front montantFront montant Instant où l'horloge passe de 0 à 1, distinct du niveau désignant tout l'intervalle CLK=1. En savoir plus, les deux bits bas de l'ancien q se déplacent à gauche et din entre au bit 0. Appliquez 1,0,1,1 et comparez le mouvement.

Avant de commencer

Préparez un projet Desktop Digital Design Studio et ses autorisations d'exécution. Chaque exemple se place dans un dossier distinct sous rtl/top.sv.

Source SystemVerilog

SystemVerilog
module top (
    input logic clk,
    input logic rst,
    input logic din,
    output logic [2:0] q
);
    // Old q[1:0] and din are captured together at each rising edge.
    always_ff @(posedge clk)
        if (rst) q <= 3'b000;
        else q <= {q[1:0], din};
endmodule

Exécution

Dans New analysis, choisissez Two-state single-clock v1, Clock port=clk et période=1000ps. Lancez Preflight puis Run RTL simulation avec :

RéglageValeur
Valeur initiale des registres, LSB en premier[false,false,false]
Reset portrst · Active high · 1 cycle
Maximum cycles / time5 / 5000ps

Stimuli

json
[
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        false
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  },
  {
    "inputs": {
      "din": [
        true
      ]
    }
  }
]

Chaque colonne observe un front montant : entrées avant, états after après mise à jour. L'alignement n'est pas un retard 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. La première colonne est 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 : son din=0 ne compte pas comme donnée reçue. Comparez les quatre entrées suivantes à l'ordre du JSON.

Stimuli d'entrée et déplacement de l'état sur trois bits
Voir les données du chronogramme
Données du chronogramme : chaque caractère représente un intervalle ; un point maintient l'état précédent ; p représente un cycle d'horloge.
SignalForme d'ondeValeurs du bus
edge23452E0 → E1 → E2 → E3 → E4
reset10...
din0101.
q après23452000 → 001 → 010 → 101 → 011

Résultats

5 cycles · q=011. Après les fronts : 000→001→010→101→011.

Le TP utilise du RTL 0/1 à horloge unique, sans banc #delay, initial ou X/Z. L'indication de leçon terminée est un suivi pédagogique, pas un résultat de simulation.

Vérifier la concaténation par une référence indépendante

Copier la concaténationConcaténation Juxtaposition de motifs de bits. La largeur résultante est la somme des largeurs, ce qui diffère d'une addition numérique. En savoir plus RTL dans l'attendu peut dupliquer l'erreur. Utilisez un modèle entier non signéNon signé Interprétation d'un motif de bits comme entier non négatif. Sur n bits, la plage va de 0 à 2^n−1 et peut différer de l'interprétation signée du même motif. En savoir plus.

Qk+1=(2Qk+dk) mod 8Q_{k+1}=(2Q_k+d_k)\bmod 8

Après reset, les entrées 1,0,1,1 donnent 0→1→2→5→30\to1\to2\to5\to3. Sur trois bits, cela doit correspondre au chronogramme. À la dernière étape, 2⋅5+1=112\cdot5+1=11 ; ne garder que trois bits donne 3.

Bits reçusEntréeq après le frontValeur entière
0Reset0000
110011
200102
311015
410113

Avec reset=0 et enable=1, sélectionnez din=1,0,1,1 et avancez à chaque fois : q=001,010,101,011. Prédisez dans ce modèle pas à pas, puis comparez au RTL réel. enable permet aussi de tester l'arrêt de l'exercice complémentaire.

Prévoir l'ordre des bits avant d'exécuter le RTL

Le reset synchrone est prioritaire sur enable. Si enable=0, conserver la valeur mémorisée. q=000; q_next = (2q + din) mod 8

Suivre un bit pour vérifier le sens

Après reset, entrez un 1 puis trois 0 : 001 → 010 → 100 → 000. Le 1 doit traverser les bits 0,1,2 puis disparaître. Tester seulement tous-0 ou tous-1 peut masquer une direction incorrecte.

Dans trois étagesRegistre 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, un bit capturé initialement au front kk arrive au bit 2 après le front k+2k+2. Compter depuis le front de lancement d'un registre externe donne une autre origine : indiquez départ et arrivée dans votre rapport.

Prolongement : déplacer seulement les entrées valides

Ajouter valid avec maintien de q lorsque valid=0 diffère d'un pipeline qui avance à chaque cycle en transportant un valid distinct. Le premier avance selon le nombre de bits reçus ; le second selon les cycles réels. Ne vérifiez pas les deux avec la même séquence attendue.

Essayez vous-même

Après reset, les bits valides sont 1,0,1. Un cycle valid=0 apparaît avant et après le deuxième bit ; q reste alors constant. Donnez q final et l'arrivée du premier 1 au bit 2.

Lire l’explication

Seules trois entrées valides changent l'état : q final=101. Le premier 1 atteint bit 2 au front capturant la troisième entrée valide. Il faut deux déplacements supplémentaires après sa première capture, plus deux cycles invalides en temps réel.

Lesson files

shift-top.sv ↓shift-inputs.json ↓

Votre choix s’applique à ce navigateur. Modifiez-le à tout moment en bas de page.