La plupart des erreurs de codage signé viennent d'une extension incorrecte ou d'un mélange silencieux entre std_logic_vector, signed et unsigned.
Code Gray
Le code Gray change un seul bit entre deux valeurs consécutives. Il est utile quand une valeur est lue pendant une transition mécanique ou asynchrone.
Décimal
Binaire
Gray
0
000
000
1
001
001
2
010
011
3
011
010
4
100
110
5
101
111
6
110
101
7
111
100
Exemples d'usage :
encodeur rotatif ;
mesure de position ;
pointeurs de FIFO asynchrone ;
passage d'information entre deux domaines d'horloge.
L'intérêt est de réduire le risque de lire une valeur intermédiaire incohérente quand plusieurs bits changeraient en même temps.
BCD
Le BCD (binary coded decimal) code chaque chiffre décimal sur 4 bits.
12₁₀ = 0001 0010 en BCD12₁₀ = 0000 1100 en binaire pur
Le BCD est moins compact que le binaire pur, mais il simplifie les interfaces orientées affichage : afficheurs 7 segments, saisie décimale, montres, compteurs visibles par l'utilisateur.
Attention : en BCD, les codes 1010 à 1111 ne représentent pas des chiffres décimaux valides.
Le BCD 8421 est un code pondéré : chaque position possède un poids fixe.
Bit
Poids
b3
8
b2
4
b1
2
b0
1
Par exemple, 0101 vaut 4 + 1 = 5.
Excess-3
Le code Excess-3 est un autre codage décimal sur 4 bits. On ajoute 3 au chiffre décimal, puis on code le résultat en binaire naturel.
Chiffre
+3
Excess-3
0
3
0011
1
4
0100
5
8
1000
9
12
1100
Il n'est pas plus compact que le BCD, mais il apparaît dans certains cours car il illustre qu'un mot de 4 bits peut porter une convention différente du binaire naturel.
Parité
Un bit de parité ajoute une information minimale pour détecter certaines erreurs de transmission ou de stockage.
Avec une parité paire, le nombre total de bits à 1 doit être pair. En pratique, le XOR de tous les bits protégés et du bit de parité doit valoir 0.
Exemple :
données : 1011 (3 bits à 1)parité paire : 1mot protégé : 1011 1 (4 bits à 1)
Une parité simple détecte une erreur sur un nombre impair de bits, mais elle ne dit pas quel bit est faux. Elle ne corrige donc pas l'erreur à elle seule.
Hamming (7,4)
Le code Hamming (7,4) protège 4 bits de données avec 3 bits de parité. Il produit un mot de 7 bits capable de corriger une erreur simple.
Dans la convention classique, les positions puissances de deux portent les parités :
Position
1
2
3
4
5
6
7
Rôle
P1
P2
D1
P4
D2
D3
D4
Au décodage, on recalcule les équations de parité. Le résultat s'appelle le syndrome :
syndrome 0 : aucune erreur simple détectée ;
syndrome non nul : position du bit probablement erroné ;
correction : inverser le bit indiqué par le syndrome.
Sans bit de parité globale supplémentaire, un Hamming (7,4) classique ne corrige pas deux erreurs et ne les détecte pas toujours proprement. Avec une parité globale, on obtient une logique de type SECDED : correction d'une erreur simple, détection d'une erreur double.
Choisir le codage
Besoin
Codage recommandé
Compteur, adresse, taille
unsigned
Calcul avec valeurs positives et négatives
signed en complément à deux
Position lue pendant une transition
Gray
Affichage décimal direct
BCD
Détection d'erreur simple
Parité
Correction d'une erreur simple
Hamming
Masques, flags, trames
std_logic_vector
Un bon design indique clairement le codage dans les noms, les types et les commentaires utiles. Cela évite les conversions implicites et rend les simulations plus lisibles.