Systèmes de numération
Comprendre les bases binaire, décimale, octale et hexadécimale utilisées en électronique numérique.
Pourquoi plusieurs bases ?
Un circuit numérique manipule des niveaux électriques interprétés comme des bits : 0 et 1. Pour un humain, écrire une longue suite binaire devient vite illisible. Les bases hexadécimale et octale servent donc de notations compactes, tout en gardant un lien direct avec les bits.
| Base | Chiffres utilisés | Usage courant |
|---|---|---|
| 2, binaire | 0, 1 | Valeur réelle vue par le hardware |
| 10, décimale | 0 à 9 | Lecture humaine, calculs usuels |
| 8, octale | 0 à 7 | Groupes de 3 bits |
| 16, hexadécimale | 0 à 9, A à F | Groupes de 4 bits, registres, bus |
La règle générale est toujours la même : chaque position possède un poids. En base 2, ces poids sont 1, 2, 4, 8, 16, etc.
Lire un nombre binaire
Le nombre 101101₂ se lit en additionnant les poids des bits à 1 :
| Bit | 1 | 0 | 1 | 1 | 0 | 1 |
|---|---|---|---|---|---|---|
| Poids | 32 | 16 | 8 | 4 | 2 | 1 |
101101₂ = 32 + 8 + 4 + 1 = 45₁₀En électronique numérique, cette lecture est essentielle pour interpréter une valeur de bus, une adresse mémoire ou un compteur.
Passer du décimal au binaire
Pour convertir un entier décimal en binaire, on divise par 2 et on lit les restes de bas en haut.
Exemple avec 45₁₀ :
| Division | Quotient | Reste |
|---|---|---|
| 45 / 2 | 22 | 1 |
| 22 / 2 | 11 | 0 |
| 11 / 2 | 5 | 1 |
| 5 / 2 | 2 | 1 |
| 2 / 2 | 1 | 0 |
| 1 / 2 | 0 | 1 |
45₁₀ = 101101₂Le bit de droite est le LSB (least significant bit) : il a le poids le plus faible. Le bit de gauche est le MSB (most significant bit) : il a le poids le plus fort.
Hexadécimal : la notation des bus
L'hexadécimal est très utilisé car un chiffre hexadécimal représente exactement 4 bits.
| Hex | Binaire | Décimal |
|---|---|---|
0 | 0000 | 0 |
1 | 0001 | 1 |
2 | 0010 | 2 |
3 | 0011 | 3 |
4 | 0100 | 4 |
5 | 0101 | 5 |
6 | 0110 | 6 |
7 | |
Exemple :
0x2D = 0010 1101₂ = 45₁₀Sur un FPGA, un bus de 32 bits s'écrit souvent sur 8 chiffres hexadécimaux :
constant C_MASK : std_logic_vector(31 downto 0) := x"0000_FF00";Octal : groupes de 3 bits
L'octal regroupe les bits par paquets de 3. Il est moins courant que l'hexadécimal dans les projets FPGA modernes, mais il reste utile à connaître.
101101₂ = 101 101₂ = 55₈Chaque groupe vaut entre 000₂ et 111₂, donc entre 0₈ et 7₈.
Fractions binaires
Les bits à droite du point binaire portent des poids fractionnaires :
| Position | Poids |
|---|---|
2^-1 | 0,5 |
2^-2 | 0,25 |
2^-3 | 0,125 |
2^-4 | 0,0625 |
101.01₂ = 4 + 1 + 0,25 = 5,25₁₀Cette idée revient dans les filtres numériques, les PWM, les calculs en virgule fixe et les blocs DSP.
Points d'attention en VHDL
La valeur binaire ne suffit pas toujours : il faut aussi connaître son type et sa largeur.
signal count_u : unsigned(7 downto 0);
signal data_s : signed(7 downto 0);
signal flags : std_logic_vector(7 downto 0);unsignedreprésente un entier positif.signedreprésente un entier signé en complément à deux.std_logic_vectorest seulement un paquet de bits : son sens dépend du contexte.
Deux bus peuvent contenir les mêmes bits mais ne pas représenter la même valeur. C'est une source classique d'erreurs lors des comparaisons, additions et extensions de taille.
À retenir
- Le hardware manipule des bits, mais les humains utilisent des notations compactes.
- L'hexadécimal est le format naturel pour lire des bus larges.
- Un nombre numérique se comprend toujours avec sa base, sa largeur et son interprétation.
- En VHDL, choisir
unsigned,signedoustd_logic_vectorclarifie l'intention du circuit.
📝 Tester mes connaissances - Quiz du chapitre