Réalisation électronique d’une machine programmable manipulant des représentations numériques
CentraleSupélec
2025-11-02
Architecture des ordinateurs
ou plutôt
Réalisation électronique d’une machine programmable manipulant des représentations numériques
Philosophie du cours
Introduire les concepts sous-jacents à n’importe quelle architecture sans être un cours sur une architecture spécifique (ARM, Intel, MIPS, ..)
Abstraction progressive allant du bit à une architecture exécutant un jeu vidéo
Au programme
Intervention STMicro (Sébastien Ferroussat) 3h30: Architectures ARM
Site web : https://jeremyfix.github.io/Architecture/
Evaluation
Examen écrit 2h
Space Invaders (1978)
Une valeur, quelle que soit sa nature, doit être représentée en binaire :
Bonne représentation ?



Système Egyptien, un symbole par puissance de 10: \(1527\)
Système Mésopotamiens en base 60 :
\(1527 = (20 + 5) \times 60^1 + (20 + 7) \times 60^0\)
\(99 = 1 \times 4^3 + 2 \times 4^2 + 0 \times 4^1 + 3 \times 4^0\)
En base 10 : \[34 = 3 \times 10^1 + 4 \times 10^0\]
En base p : \[(a_{k-1}a_{k-2}\cdots a_{1}a_{0})_p = \sum_{i=0}^{k-1} a_i p^i\]
avec \(\forall i, a_i \in [0, p-1], a_{k-1} \neq 0\)
Comment passer de la représentation base p à la valeur en base 10 ? \[(a_{k-1}a_{k-2}\cdots a_{1}a_{0})_p = \sum_{i=0}^{k-1} a_i p^i\]
Comment passer de la valeur \(n\) en base 10 à la représentation en base p ? \[\sum_{i=0}^{k-1} a_i p^i = a_0 + p \times (\sum_{0}^{k-2} a_{i+1} p^i)\]
⇒ division euclidienne par \(p\)
\[\sum_{i=0}^{k-1} a_i p^i = a_0 + p \times (\sum_{0}^{k-2} a_{i+1} p^i)\]
Méthode des divisions successives :
| Division | Quotient | Reste |
|---|---|---|
| 39 ÷ 2 | 19 | 1 |
| 19 ÷ 2 | 9 | 1 |
| 9 ÷ 2 | 4 | 1 |
| 4 ÷ 2 | 2 | 0 |
| 2 ÷ 2 | 1 | 0 |
| 1 ÷ 2 | 0 | 1 |
Vérification :
| Puissance de 2 | \(2^5 = 32\) | \(2^4 = 16\) | \(2^3= 8\) | \(2^2=4\) | \(2^1 = 2\) | \(2^0 = 1\) |
|---|---|---|---|---|---|---|
| \(39_{10}\) | 1 | 0 | 0 | 1 | 1 | 1 |
16 chiffres : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Division par 16 :
| Division | Quotient | Reste |
|---|---|---|
| 39 ÷ 16 | 2 | 7 |
| 2 ÷ 16 | 0 | 2 |
Ou, à partir de la représentation binaire : \[39_{10} = (\overbrace{0010}^{2}\quad\overbrace{0111}^{7})\]
Autres exemples :
\[421 = \overbrace{0100}^{4} \overbrace{0010}^{2} \overbrace{0001}^{1}\]
| valeur | représentation binaire | représentation de 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 |
Exemple : 001 + 011
Demi-additionneur : \[(a,b) \rightarrow (retenue, reste)\]
| \(a\) | \(b\) | Retenue | Reste | |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | |
| 0 | 1 | 0 | 1 | |
| 1 | 0 | 0 | 1 | |
| 1 | 1 | 1 | 0 |
Additionneur complet : \[(a, b, r) \rightarrow (retenue, reste)\]
| \(a\) | \(b\) | \(r\) | Retenue | Reste |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 0 | 1 |
| 1 | 0 | 0 | 0 | 1 |
| 1 | 1 | 0 | 1 | 0 |
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 1 | 1 | 1 |
Soustraction :
Multiplication :
Division :
Entiers négatifs ?!
| \(n\) | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|---|---|---|
| \(x\) | \(000_{2K}\) | \(001_{2K}\) | \(010_{2K}\) | \(011_{2K}\) | \(100_{2K}\) | \(101_{2K}\) | \(110_{2K}\) | \(111_{2K}\) |
| \(n\) | -3 | -2 | -1 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|---|---|
| \(x\) | \(111_{2s}\) | \(110_{2s}\) | \(101_{2s}\) | \(100_{2s}\) ou \(000_{2s}\) | \(001_{2s}\) | \(010_{2s}\) | \(011_{2s}\) |
\[a +_{UB} b = 0 \Rightarrow b = \bar{a} + 1\]
car \(\bar{a} + a = 11\cdots 1\)
| \(n\) | -4 | -3 | -2 | -1 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|---|---|---|---|
| 1C | (011) | 100 | 101 | 110 | 111 ou 000 | 001 | 010 | 011 |
| 2C | 100 | 101 | 110 | 111 | 000 | 001 | 010 | 011 |
Mais :
\[x = \pm m \times p^{e}, m \in [0, p[, e \in \mathbb{Z}\]
| signe S (1 bit) | exposant E (\(n_e\) bits) | mantisse M (\(n_m\) bits) |
|---|
M code uniquement la partie fractionnaire, premier bit implicite (\(0\) pour les dénormalisées ou \(1\) pour les normalisées).
E en excess-K (plutôt que complément à \(2\)) permet de comparer deux nombres comme des entiers par comparaison bit à bit en partant des bits de poids fort : le signe à gauche, l’exposant en excess-K puis la mantisse.
Plusieurs conventions : binary-16, binary-32, binary-64
Arrondis : \((0.9 / 3) \times 3 \neq 0.9\)
Représentation sur 16 bits, \([-65504, \cdots -2^{-24}, \pm 0, 2^{-24}, \cdots, 65504] \cup \{\pm \infty, NaN\}\)
| Signe | Exposant | Mantisse | Valeur représentée | Note |
|---|---|---|---|---|
| 0 | 00000 | \(0 \cdots 0\) | +0 | |
| 1 | 00000 | \(0 \cdots 0\) | -0 | |
| s | 00000 | \(0\cdots 01\) | \((-1)^s 2^{-14} (2^{-10}) = (-1)^s 2^{-24}\) | Plus petit dénormalisé |
| s | 00000 | \(0\cdots 10\) | \((-1)^s 2^{-14} (2^{-9}) = (-1)^s 2^{-23}\) | Second plus petit |
| s | 00000 | \(1\cdots 11\) | \((-1)^s 2^{-14} (\sum_{1}^{n_m} (2^{-i}))=(-1)^s (2^{-14} - 2^{-24})\) | Plus grand dénormalisé |
| s | 00001 | \(0\cdots 00\) | \((-1)^s 2^{1-15} = (-1)^s 2^{-14}\) | Plus petit normalisé |
| s | 11110 | \(1\cdots 11\) | \((-1)^s 2^{30-15} (1+\sum_{1}^{n_m} 2^{-i}) = (-1)^s (2^{16} - 2^{5})\) | Plus grand normalisé |
| s | 11111 | \(0\cdots 00\) | \((-1)^s \infty\) | |
| x | 11111 | \(\neq 0\) | NaN (sNan ou qNan) | Exception, e.g 0/0, .. |
Caractères “spéciaux” : \t, \n \r, ..
Example en python : la variable \(c\) représente t’elle un caractère ? ord: \(char \mapsto int\), chr: \(int \mapsto char\)
Norme trop spécifique à l’américain \(\rightarrow\) Multiplicité des normes ISO-8859-x sur 8 bits \(\rightarrow\) Norme UTF-8
Quelle est la valeur de \((626F6E6A6F757221)_{16}\) ?
Un bit (0, 1) va être représenté physiquement par un niveau de tension
Par une valeur ? Par des domaines contigus ? Séparés par des marges ?

Des marges différentes en entrée et en sortie.
Il nous faut un composant avec une VTC (Votlage Transfer Characteristics) non linéaire

Bascule en quelques dizaines de nanosecondes.
On fait comment ??
On peut construire les portes AND, OR, NOT à partir de NAND.
La porte NAND est dite universelle.

Exemple d’une porte ET à 4 entrées.
⇒ Spécification fonctionnelle


⇒ Spécification fonctionnelle


⇒ Spécification fonctionnelle


Quel est le problème ? Example du multiplexeur.

Supprimer ce changement transitoire.



⇒ Read Only Memory (ROM)
UAL
Table de vérité :
| \(a_i\) | \(b_i\) | \(s_i\) | \(r\) |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Circuit :
Table de vérité :
| \(a_i\) | \(b_i\) | \(r_i\) | \(s_i\) | \(r_{i+1}\) |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Circuit :
Pour réaliser un circuit de logique combinatoire
Circuits logique combinatoire
Problème : un bouton (0/1) - une lumière (0/1)


⇒ mince ?!?!
Problème : un bouton (0/1) - une lumière (0/1)
Le nouvel état lumière dépend de l’entrée bouton et de l’ancien état lumière.
Ici, la sortie est caractéristique de l’état du système.
On reboucle simplement la sortie sur l’entrée ?
Ce n’est pas forcément la sortie qui est utilisée en entrée puisque je peux très bien avoir besoin de produire la même sortie dans des états différents
Transducteur fini (automate fini avec sorties)
On présente une donnée \(D\) écrite sur niveau haut \(Enable\).


Important


Important


\(Q=D\) au front montant d’horloge






Spécifications
Voir cette comparaison d’architectures ISA pour de vrais examples.
Additionner 16=0x0010 et 1=0x0001 et stocker le résultat à l’adresse 0x000A
| Adresses de base | Contenu | |||
|---|---|---|---|---|
| 0x0000 | 0010 | 0001 | 000A | 0000 |
| 0x0004 | 0000 | 0000 | 0000 | 0000 |
| 0x0008 | 0000 | 0000 | 0000 | 0000 |
Architecture de von Neumann : mémoire (data+prog) ↔︎ processeur
| Adresses | Contenu | |||
|---|---|---|---|---|
| 0000 | 0010 | 0001 | 000A | 0000 |
| 0004 | 0000 | 0000 | 0000 | 0000 |
| 0008 | 0000 | 0000 | 0000 | 0000 |
Architecture de von Neumann : mémoire (data+prog) ↔︎ processeur
| Adresses | Contenu | |||
|---|---|---|---|---|
| 0000 | LDAi | 0010 | LDBi | 0001 |
| 0004 | ADDA | STA | 000A | 0000 |
| 0008 | 0000 | 0000 | 0000 | 0000 |
| Nom de l’instruction | Code de l’instruction |
|---|---|
| LDAi | 0×1000 |
| LDAd | 0×1400 |
| LDBi | 0×2000 |
| STA | 0×1c00 |
| ADDA | 0×3000 |
| Adresses | Contenu | |||
|---|---|---|---|---|
| 0000 | 1000 | 0010 | 2000 | 0001 |
| 0004 | 3000 | 1c00 | 000A | 0000 |
| 0008 | 0000 | 0000 | 0000 | 0000 |
⇒ Programme en langage machine
L’instruction est :
Séquence de signaux de contrôle spécifique :
⇒ machine à états finis qui génère les micro-instructions et dont l’état est stocké dans un registre dédidé microPC
Réalisation matérielle ? Soyons astucieux sur le codage des états en codant les instructions à partir de l’adresse définie par les 8 bits de poids forts.
\[fact(n) = \begin{cases} \text{si } n=0 \text{ alors}& 1\\ \text{sinon }& n \times fact(n-1) \end{cases}\]
si … alors … sinon ? Indicateurs de l’UAL
JMP (0×7000) \[\texttt{JMP op} \Leftrightarrow PC := op\]
JZA (0×7400) \[\texttt{JZA op} \Leftrightarrow \begin{cases} PC := op & \text{si } A==0\\ PC := PC+1 & \text{sinon} \end{cases}\]
JZB (0×7800) \[\texttt{JZB op} \Leftrightarrow \begin{cases} PC := op & \text{si } B==0\\ PC := PC+1 & \text{sinon} \end{cases}\]
| CodeMCount | Z | \(S_1S_0\) | Sémantique |
|---|---|---|---|
| 000 | 0 ou 1 | 00 | MicroPC := MicroPC+1 |
| 001 | 0 ou 1 | 01 | MicroPC := @Adr |
| 010 | 0 ou 1 | 10 | MicroPC := Instruction |
| 011 | 0 | 00 | MicroPC := MicroPC+1 si la sortie de l’UAL ≠ 0 |
| 011 | 1 | 01 | MicroPC := @Adr si la sortie de l’UAL == 0 |
Dans les prochains slides, nous verrons :

Produced with quarto