Systèmes électroniques à base de processeurs – Partie 2 – Les éléments communs –



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.

 

Leave a Reply