Réalisation électronique d’une machine programmable manipulant des représentations numériques
CentraleSupélec
2026-08-11
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 |
| Code | Nom | Mots | Description |
|---|---|---|---|
| 0x0c00 | END | 1 | Fin du programme |
| 0x1000 | LDAi | 2 | Charge la valeur de l’opérande dans le registre A. [A:=opérande] |
| 0x1400 | LDAd | 2 | Charge la valeur dans la RAM pointée par l’opérande dans le registre A. [A:=Mem[opérande]]. |
| 0x1c00 | STA | 2 | Sauvegarde en mémoire la valeur du registre A à l’adresse donnée par l’opérande. [Mem[opérande]:= A] |
| 0x2000 | LDBi | 2 | Charge la valeur de l’opérande dans le registre B. [B:=opérande] |
| 0x2400 | LDBd | 2 | Charge la valeur dans la RAM pointée par l’opérande dans le registre B. [B:=Mem[opérande]]. |
| 0x2c00 | STB | 2 | Sauvegarde en mémoire la valeur du registre B à l’adresse donnée par l’opérande. [Mem[opérande]:= B] |
| 0x3000 | ADDA | 1 | Ajoute le contenu des registres A et B et mémorise le résultat dans le registre A. [A:=A+B] |
| 0x3400 | ADDB | 1 | Ajoute le contenu des registres A et B et mémorise le résultat dans le registre B. [B:=A+B] |
| 0x3800 | SUBA | 1 | Soustrait le contenu des registres A et B et mémorise le résultat dans le registre A. [A:=A-B] |
| 0x3c00 | SUBB | 1 | Soustrait le contenu des registres A et B et mémorise le résultat dans le registre B. [B:=A-B] |
| 0x4000 | MULA | 1 | Multiplie le contenu des registres A et B et mémorise le résultat dans le registre A. [A:=AxB] |
| 0x4400 | MULB | 1 | Multiplie le contenu des registres A et B et mémorise le résultat dans le registre B. [B:=AxB] |
| 0x4800 | DIVA | 1 | Divise le contenu du registre A par deux et mémorise le résultat dans A. [A:=A/2] |
| 0x5000 | ANDA | 1 | Calcule un ET logique entre le contenu des registres A et B et mémorise le résultat dans A. [A:=A&B] |
| 0x5400 | ANDB | 1 | Calcule un ET logique entre le contenu des registres A et B et mémorise le résultat dans B. [B:=A&B] |
| 0x5800 | ORA | 1 | Calcule un OU logique entre le contenu des registres A et B et mémorise le résultat dans A. [A:=A|B] |
| 0x5c00 | ORB | 1 | Calcule un OU logique entre le contenu des registres A et B et mémorise le résultat dans B. [B:=A|B] |
| 0x6000 | NOTA | 1 | Mémorise dans A la négation de A. [A:=!A] |
| 0x6400 | NOTB | 1 | Mémorise dans B la négation de B. [B:=!B] |
| 0x7000 | JMP | 2 | Saute inconditionnellement à l’adresse donnée par l’opérande. [PC:=operande] |
| 0x7400 | JZA | 2 | Saute à l’adresse donnée par l’opérande si le contenu du registre A est nul. [PC:=operande si A=0] |
| 0x7800 | JZB | 2 | Saute à l’adresse donnée par l’opérande si le contenu du registre B est nul. [PC := operande si B=0] |
Séquenceur
Programme
La notre
Beaucoup d’architectures :
https://en.wikipedia.org/wiki/List_of_instruction_sets
Du Intel 8086(1978) jusqu’au Intel Core i7 (2015)
Note
Intel 64 and IA-32 Architectures Software Developer Manuals
https://software.intel.com/en-us/articles/intel-sdm
Carry Flag (CF), Sign Flag (SF), Zero Flag (ZF),
Beaucoup d’instructions : 1.300 mnémoniques, plusieurs modes d’adressages, ..
Documentation des instructions https://cdrdv2.intel.com/v1/dl/getContent/671110.
Acorn RISC Machine architecture (1980) jusqu’au ARMv8.3-A (2016)
Note
http://infocenter.arm.com/help/index.jsp
Voir l’intervention de ST Micro.

Produced with quarto