1. Les Bus
5. Exemple de calcul de la mémoire adressable
6. Communication avec les entrées-sorties
7. Mémoire
a. Les ROM (Read Only Memory) :
b. Les RAM (Random Access Memory) :
8. Compteur de programme (PC en anglais)
9. Chien de garde (watchdog)
10. Les Interruptions
11. Registres
12. L’horloge
13. Cache
14. Le Timer –
15. DMA (Direct Memory Access)
16. Chaine de compilation, langage d’assembleur et langage machine
17. Jeux d’instruction
Liens vers les autres articles :
Dans cette seconde partie sur les processeur, je vais vous présenter les éléments communs aux processeurs-microprocesseurs-microcontrôleurs-SoC
Éléments communs
Le terme générique Processeur peut être remplacé par microprocesseur ou microcontrôleur
Les Bus
Le processeur est relié à tous ses éléments par trois bus qui permettent la transmission d’informations :
Les informations sont codées en 8 bits (octet), 16 bits (mot ou word) ou 32bits (mot double ou double word)
Le bus d’adresses
Il permet de sélectionner la mémoire ou le périphérique par le processeur.
Le bus de données
Birectionnelle , il permet le transfert de données, d’instructions entre les différents éléments et le processeur.
Le bus de contrôle
Ce bus permet le contrôle de l’ensemble des composants. Il est rarement représenté sur les schémas.
Exemple de calcul de la mémoire adressable
Si le largueur du bus d’adresses est de 16 bits et celle de la données est de 8 bits, quelle est la taille maximale d’une mémoire ?
Réponse : 512 koctets
Calcul : avec 16 bits, il y a adresses possibles et comme une adresse correspond à une donnée de 8 bits =
Communication avec les entrées-sorties
Le processeur utilise le contrôleur associé à l’entrée ou sortie pour lui envoyer des informations de commande ou récupérer des informations d’états.
Mémoire
La mémoire est utilisée pour stocker deux types d’informations :
- Les instructions, code
- Les données utilisées par le processeur
Il existe deux types de mémoire, volatiles signifie qu’une fois le courant supprimé les données sont perdues :
Les ROM (Read Only Memory) :
Ou mémoire morte, elles sont utilisés pour stocker le programme qui initialise le système au démarrage, un peu comme le bios. Ce type de mémoire est écrit une fois pour toute à la fabrication et ne peut être que lue. Par analogie, la mémoire est composée de fusibles qui sont détruit lors de la première et seule écriture.
Plusieurs types :
- EPROM (Erasable Programmable ROM) : vieille technologie qui consistait à mettre le composant sous une lumière ultra-violette.
- EEPROM (Electrically Erasable Programmable ROM) : on peut le prononcer E2PROM, l’effacement et la réécriture se fait par courant électrique. L’accès au support est assez lent et l’écriture se fait octet par octet. C’est la technologie ROM la plus utilisé avec Flash.
- Flash : assez similaire à l’EEPROM, plus rapide, mais l’accès en lecture-écriture se fait par secteur, de taille 8, 16 ou 32 bits.
Les RAM (Random Access Memory) :
Ou mémoire vive, elles permettent le stockage des données et variables en lecture et écriture mais s’efface dès qu’elles ne sont plus alimentées en courant.
- DRAM (Dynamic RAM) : ce sont celles qu’on trouve comme mémoire de PC sur des supports de type barrette DIMM. On y trouve les DDR SDRAM.
- SRAM (Static RAM) : mémoire très rapide mais onéreuse elles sont réservées au cache, mémoires tampons. Ne nécessite aucun rafraichissement.
Compteur de programme (PC en anglais)
Compteur de Programme sur AVR (Arduino)
Il contient toujours l’adresse de la prochaine instruction à exécuter.
Chien de garde (watchdog)
C’est (encore) un registre qui doit être régulièrement mis à zéro. Si le watchdog atteint une certaine valeur, le processeur est redémarré.
Dans le cas où le processeur se bloque, il ne peut donc plus agir sur le watchdog qui le redémarre.
Les Interruptions
Interruptions sur ARM (Nucleo)
Les interruptions qui peuvent être logicielles ou matérielles, sont utilisées pour prévenir le processeur, d’une demande émanant d’un périphérique (arrivée d’un message, erreurs, …), d’une entrée/sortie ou même d’un programme.
Un système de priorité permet au processeur de prendre en charge la demande la plus prioritaire.
Registres
Registres sur AVR (Arduino)
Les registres sont utilisés par l’UAL pour effectuer des opérations. La particularité c’est qu’un registre permet le stockage d’un seul type de données :
- Registres d’adresses (de la mémoire)
- Registre d’état (comme des Flags, erreurs, informations, débordement …)
- Registres d’instructions
L’horloge
Les systèmes d’horloge sur le RP2040 (RPi Pico)
Permet le cadencement du processeur. Cela peut être un quartz ou une PLL (Phase-locked loop en électronique appelée aussi boucle à verrouillage de phase). Un « coup » d’horloge est égal à une instruction.
On parle de fréquence d’horloge qui correspond au nombre d’instructions exécutées par secondes.
À noter que les processeurs cadencés à des fréquences élevées (900 MHz) sont très fortement ralentis lorsqu’ils interagissent avec des périphériques ou certaines mémoires.
Cache
Ou antémémoire, est une mémoire de faible capacité mais très rapide et très proche du processeur.
Souvent, on parle de L1 cache qui se trouve à l’intérieur du processeur et la L2 qui s’interpose entre la mémoire et le CPU :
Deux caches sur les Pentium
Le Timer –
Timer sur RP2040
Le Timer qui est un registre qui émet une interruption dès qu’il est arrivé à une certaine valeur (ou décrémenté jusqu’à zéro)
Il peut être cadencé par :
- L’horloge du système, dans ce cas, c’est une sorte de réveil (mode Timer) qui permet de gère le temps.
- Par une impulsion : rôle de compteur (mode Counter)
Il en existe le plus souvent plusieurs dans les processeurs (TIMER0, TIMER1 …)
DMA (Direct Memory Access)
.
Zynq-7000 SoC
Lors de l’accès répété aux données, le processeur est sollicité pour faire sans cesse le lien entre l’entrée/sortie et la mémoire. Pour le décharger de cette tâche, le DMA peut être utilisé : il permet l’accès direct à la mémoire sans passer par le processeur ce qui permet d’effectuer d’autres tâches.
Chaine de compilation, langage d’assembleur et langage machine
Le compilateur va transformer le code langage C en assembleur puis le programme d’assemblage va traduire le code ‘Assembleur’ en binaire.
Le langage d’assembleur ou plus communément appelé assembleur, est une suite d’instructions. Par exemple :
Langage C | Assembleur 8086 | Langage machine |
if ax=0
ax=1 ; else { Ax=2 ; BX = BX-1 ; } |
CMP AX,0
JNZ label MOV AX,1 JMP End LABEL : mov AX,2 DEC BX End: |
0101101101101101
1011010111111101 1111110110101010 1010101110101101 1011011010010110 1101110010101101 1011101110110001 1101101101011010 |
La dernière colonne a été écrite de façon aléatoire.
Jeux d’instruction
Définition
Ces instructions effectuent des opérations élémentaires tel que mettre en mémoire, faire une addition, écrire dans un registre.
Par exemple pour le 8086 :
Quelques instructions de l’assembleur 8086 | |
MOV AX,10 | Met 10 dans AX qui est un registre |
ADD AX,BX | Additionne et met le résultat dans AX |
SUB AX,BX | Idem mais soustrait |
SHL AX,3 | Décale 3 bits vers la gauche et met le résultat dans AX <-> AX*2*2*2 |
… |
CISC (Complex Instruction Set Computer)
C’est le cas le plus répandu celui des PCs (intel x86): le microprocesseur peut gérer un grand nombre d’instructions possibles. Certaines instructions effectuent plus instructions élémentaires à la fois.
RISC (Reduced Instruction Set Computer)
C’est plutôt le cas des microcontrôleurs comme ceux à base d’ARM: moins d’instruction à gérer, donc plus facile à mettre en œuvre, architecture simplifiée.
La taille des instructions est fixe et l’utilisation de registres obligatoire : il est impossible de déplacer directement le contenu d’une adresse mémoire à une autre, il faut passer par des registres.
Si vous aviez à écrire à la main, le même programme RISC, serait plus long que son équivalent CISC, donc un besoin en stockage de données plus importants, mais peut-être plus simple à écrire.
Maintenant c’est la tâche des compilateurs.