6 / 37 · Concept
Indices des vecteurs, ordre des bits et signe
Lire les chemins de données en séparant indices, ordre de transmission série et interprétation arithmétique.
Les leçons sont gratuites. Inscrivez-vous pour enregistrer vos progrès.
L'indice est un nom ; le sens de déclaration fixe sa signification
Dans logic [7:0] a;, a[7] est à gauche. Dans logic [0:7] b;, c'est b[0]. Affecter 8'h96 aux deux donne le même motif de gauche à droite, 10010110, mais avec des indices différents. L'hypothèse « bit 0 = LSBLSB Bit de poids le plus faible. Vérifiez ensemble sens d'écriture et règles d'indexation. » exige donc de vérifier la déclaration.
Une direction cohérente dans toute l'interface facilite la revue. Précisez aussi l'ordre du visualiseur et des tableaux dans les fichiers. Les tableaux JSON d'entrée du cours sont écrits LSB d'abord ; les vecteurs RTL se lisent généralement MSBMSB Bit de poids le plus fort. Son indice dépend du sens de déclaration du vecteur ; ce n'est pas nécessairement l'indice numérique le plus grand. d'abord.
Vérifier le sens par les connexions réelles
Avec q <= {q[1:0], din};, le prochain q[2] prend l'ancien q[1], q[1] prend l'ancien q[0], et q[0] prend din.
La destination de chaque signal est une spécification plus précise que l'orientation graphique.
Les flèches indiquent les positions de stockage traversées. Tous les registresRegistre 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 lisent les anciennes valeurs au même front ; din ne traverse pas jusqu'à q2 en un seul front.
- din: Bit à accepter sur ce front
- q0: Capturer din
- q1: Capturer l'ancien q0
- q2: Capturer l'ancien q1
Décalage logique et arithmétique
>> est un décalage logique à droite qui remplit de zéros les positions libérées à gauche, du côté des poids forts. >>> effectue une extension du signe lorsque l'opérande gauche est signé. Le même motif peut donc donner un résultat différent selon sa déclaration signed.
logic signed [7:0] x;
logic [7:0] logical_right, arithmetic_right;
assign logical_right = x >> 1;
assign arithmetic_right = x >>> 1;Pour x=8'b11111000 (-8), les résultats sont 01111100 et 11111100. Le décalage arithmétique négatif ne suit pas toujours l'arrondi de la division entière des négatifs ; vérifiez ce point dans les algorithmes numériques.
Essayez vous-même
Pour q=101 sur trois bits et din=0, calculez les valeurs suivantes de q<={q[1:0],din} et q<={din,q[2:1]}.
Lire l’explication
Les deux donnent 010 : ces entrées rendent les directions accidentellement identiques. Avec q=001,din=0, on obtient respectivement 010 et 000, ce qui distingue l'erreur de direction.