1. Introduction
Nous avions terminé le cours sur la logique séquentielle en comparant deux grandes solutions pour réaliser un système numérique.
-
L’architecture spécifique.
-
L’architecture existante.
Nous allons consacrer dans ce module de formation notre attention sur les systèmes numériques utilisant une architecture existante non dédiée à un projet en particulier.
2. Architectures existantes généralistes.
On trouve cette organisation matérielle principalement sur les ordinateurs (de bureau, de jeux, portables…). Elle est basée sur l’utilisation d’une carte mére embarquant de nombreux composants dont le microprocesseur et différents types de mémoires avec au moins une mémoire ROM et une mémoire RAM.
Nous trouvons à cette étape deux architectures:
-
Von Neumann
-
Harvard
La principale différence entre ces deux architectures et la façon d’accéder à la mémoire ROM et RAM.
2.1. Architecture Von Neuman
Avec l’architecture Von Neumann, tout se passe comme si les deux mémoires étaient fusionnées en une seule mémoire. Une adresse bien précise va ainsi correspondre soit à la mémoire RAM, soit à la mémoire ROM, mais pas aux deux.
Quand une adresse est envoyée sur le bus, les deux mémoires vont la recevoir mais une seule va répondre.
Il faut deux instructions différentes pour accéder à la mémoire programme et à la mémoire de données |
2.2. Architecture Harvard
Si ces deux mémoires sont reliées au processeur par deux bus d’adresse séparés, on a une architecture Harvard.
L’avantage de cette architecture est qu’elle permet de charger une instruction et une donnée simultanément :
-
une instruction chargée sur le bus relié à la mémoire programme
-
une donnée chargée sur le bus relié à la mémoire de données.
Sur ces architectures, une adresse peut correspondre soit à la ROM, soit à la RAM : le processeur voit bien deux mémoires séparées.
On accéde à la mémoire programme et à la mémoire de données avec une seule instruction. |
2.3. Complément sur les mémoires.
Une mémoire idéale serait une mémoire de grande capacité, capable de stocker un maximum d’informations et possédant un temps d’accès très faible afin de pouvoir travailler rapidement sur ces informations. Mais il se trouve que les mémoires de grande capacité sont souvent très lente et que les mémoire rapides sont très chères. Et pourtant, la vitesse d’accès à la mémoire conditionne dans une large mesure les performances d’un système.
Afin d’obtenir le meilleur compromis coût-performance, on définie donc une hiérarchie mémoire. On utilise des mémoires de faible capacité mais très rapide pour stocker les informations dont le microprocesseur se sert le plus et on utilise des mémoires de capacité importante mais beaucoup plus lente pour stocker les informations dont le microprocesseur se sert le moins.
Ainsi, plus on s’éloigne du microprocesseur et plus la capacité et le temps d’accès des mémoire vont augmenter.
2.4. Le microprocesseur.
Un microprocesseur est un circuit intégré complexe. Il résulte de l’intégration sur une puce de fonctions logiques combinatoires (logiques et/ou arithmétique) et séquentielles (registres, compteur, etc…). Il est capable d’interpréter et d’exécuter les instructions d’un programme. Son domaine d’utilisation est donc presque illimité.
En 1971, Intel sorti le premier microprocesseur, le 4004, qui était une unité de calcul 4 bits fonctionnant à 108 kHz. Il résultait de l’intégration d’environ 2300 transistors.
2.4.1. Vu de l’éxterieur.
Pour traiter une information, un microprocesseur seul ne suffit pas, il faut l’insérer au sein d’une architecture minimum comme nous l’avons décrit précédemment.
Vu de l’extérieur un microprocesseur peut être modélisé par le schéma ci-dessous.
le microprocesseur est chargé d’interpréter et d’exécuter les instructions d’un programme, de lire ou de sauvegarder les résultats dans la mémoire et de communiquer avec les unités d’échange. Toutes les activités du microprocesseur sont cadencées par une horloge.
On caractérise le microprocesseur par :
-
Sa fréquence d’horloge : GHz
-
Le nombre d’instructions par secondes qu’il est capable d’exécuter : en MIPS
-
La taille des données qu’il est capable de traiter : en bits
2.4.2. Vu de l’intérieur.
Dans un microprocesseur, on trouve au moins les fonctions du schéma ci-dessous.
-
L’horloge : fixe la vitesse de travail. Elle peut être configurée par des registres.
-
Le compteur de programme (PC) constitué par un registre dont le contenu est initialisé avec l’adresse de la première instruction du programme. Il contient toujours l’adresse de l’instruction à exécuter.
-
Le registre d’instruction et le décodeur d’instruction : chacune des instructions à exécuter est rangée dans le registre instruction puis est décodée par le décodeur d’instruction.
-
L’Unité Arithmétique et Logique (UAL) est un circuit complexe qui assure les fonctions logiques (ET, OU, Comparaison, Décalage , etc…) ou arithmétique (Addition, soustraction).
-
Les accumulateurs sont des registres de travail qui servent à stocker une opérande au début d’une opération arithmétique et le résultat à la fin de l’opération.
2.4.3. Pause vidéo.
2.4.4. Travail à faire : Utilisation de l’UAL
L’unité arithmétique et logique (UAL) effectue l’opération sélectionnée sur les données présentes dans le registre accumulateur A et le registre accumulateur B.
Voici dans la table de fonctionnement ci-dessous un extrait des fonctions de UAL et de ses codes de sélections.
- 01100111
- 01101011
- 00000100
- 00000100
- 01101011
- 01100111
2.4.5. Travail à faire : Assembleur 6809
- $2000
- 2000
- 86
- 8 bits
- 12 bits
- 16 bits
- ET
- Soustraction
- Addition
- 25
- $25
- $15
- 5
- $5
- $3A
- $2000
- $2005
- $A000
2.4.6. Travail à faire : Programmation assembleur
Nous allons utiliser un simulateur développé par Peter Higginson. Ce simulateur est basé sur une architecture de von Neumann et dispose de :
-
une RAM
-
un CPU
-
une interface d’entrée
-
une interface de sortie
-
un jeu d’instructions assembleur
Instructions | Description |
---|---|
|
Load the value stored in the memory location specified by |
|
Store the value that is in register |
|
Add the value specified in |
|
Subtract the value specified by |
|
Copy the value specified by |
|
Compare the value stored in register |
|
Always branch to the instruction at position |
|
Conditionally branch to the instruction at position |
|
Perform a bitwise logical |
|
Perform a bitwise logical |
|
Perform a bitwise logical exclusive or ( |
|
Perform a bitwise logical |
|
Logically shift left the value stored in register |
|
Logically shift right the value stored in register |
|
Stop the execution of the program. |
-
<operand2> can be #nnn or Rm to use either a constant or the contents of register Rm.
-
Registers are R0 to R12.
-
Que fais le programme ci-dessous ?
MOV R0,#10
MOV R1,#2
ADD R2,R1,R0
HALT
-
Simuler le fonctionnement du programme et vérifier hypothèse
Correction
|
-
Que fais le programme ci-dessous ?
MOV R0,#10
LSL R0,R0,#1
HALT
-
Simuler le fonctionnement du programme et vérifier hypothèse
Correction
|
-
Que fais le programme ci-dessous ?
MOV R0,#10
LSR R0,R0,#1
HALT
-
Simuler le fonctionnement du programme et vérifier hypothèse
Correction
|
-
Que fais le programme ci-dessous ?
MOV R0,#124
MOV R1,#0
loop:
LSR R0,R0,#1
ADD R1,R1,#1
CMP R1,#3
BLT loop
HALT
-
Simuler le fonctionnement du programme et vérifier hypothèse
Correction
|
-
Que fais le programme ci-dessous ?
MOV R2,#64
MOV R1,#0
LOOP:
ADD R2,R2,#1
ADD R1,R1,#1
OUT R2,7
CMP R1,#3
BLT LOOP
HALT
-
Simuler le fonctionnement du programme et vérifier hypothèse
Correction
|
-
Coder et simuler un programme qui affiche
Hello !
Correction
|
-
Coder et simuler un programme qui effectue le calcul suivant : \$( 4 . x + 4 )\$ avec ( x ) un nombre entier fourni par l’utilsateur. Utiliser pour àa l’instruction
INP
-
Sortir le résultat sur l’afficheur.
Correction
|
Le bouton SELECT permet de choisir l’un des quelques exemples de programmes à assembler.
-
Tester ces programmes et les modifier à volonté et sans modération.
2.5. Le décodage d’adresse.
A notre système minimum nous devons ajouter une fonction indispensable le décodage d’adresse.
La multiplication des périphériques autour du microprocesseur oblige la présence d’un décodeur d’adresse chargé d’aiguiller les données présentes sur le bus de données.
En effet, le microprocesseur peut communiquer avec les différentes mémoires et les différents boîtier d’interface. Ceux-ci sont tous reliés sur le même bus de données et afin d’éviter des conflits, un seul composant doit être sélectionné à la fois.
Lorsqu’on réalise un système microprogrammé, on attribue donc à chaque périphérique une zone d’adresse et une fonction « décodage d’adresse » est donc nécessaire afin de fournir les signaux de sélection de chacun des composants.
Lorsqu’un composant n’est pas sélectionné, ses sorties sont mises à l’état haute impédance (noté Z) « afin de ne pas perturber les données circulant sur le bus. ( elle présente une impédance de sortie très élevée = circuit ouvert ). On parle également de sortie à logique 3 états. |
Le décodage d’adresses permet d’allouer à chaque périphérique une zone de l’espace adressable.
2.5.1. Comment?
Nous allons utiliser un décodeur (138) qui sera chargé de valider le bon périphérique avec les signaux de sélection CE ou CS.
Nous pouvons également utiliser un PLD pour réaliser cette fonction décodage. Dans le schéma suivant un PAL 16L8.
2.5.2. Travail à faire : Répondre au QCM
- /CE,/OE
- /CE,/OE,/PGM
- /CE
- Mémoire RAM, car une entrée d'écriture.
- Mémoire EPROM, une entrée d'écriture et pas d'entrée de programmation.
- ROM
- 16ko
- 32kbits
- 256kbits
- /CE,/OE
- /CE,/OE,/PGM
- /CE,/OE,/WE
- 64000
- 2^16
- 65536
- 8bits
- 16bits
- 24bits
- 256
- 255
- 65535
- 11
- 10
- 9
- 1024 octets
- 1Ko
- 1024 bits
- 4kbits
- 4Ko
- 32kbits
2.5.3. Travail à faire : Compléter la fiche d’exercices ci-dessous.
2.6. Les ordinateurs.
Pour cette partie nous allons parcourir les composants matériels constituant un ordinateur.
Vous aller suivre le document suivant:
2.6.1. Focus sur les technologies des mémoires.
3. Architectures existantes dédiées.
3.1. Le microcontrôleur.
Ce sont des processeurs moins puissants que les microprocesseurs, mais dont les capacités de calcul peuvent être relativement très élevées au regard des besoins.
Le microcontrôleur rassemble en un seul circuit les composants d’une carte mère d’un petit ordinateur (processeur, mémoire, périphériques…) auquel on ajoute un nombre important d’entrée-sorties.
ARM se place très bien sur ce secteur, il ne fabrique pas de circuits. Il ne fait (et c’est déjà pas mal) que les concevoir pour vendre par la suite les licences liées à cette conception. STMicro et NXP sont de grands utilisateurs des architectures ARM. En dehors d’ARM, Microchip avec ses PIC et Atmel avec ses AVR (arduino) sont des acteurs bien présents sur le marché.
les microcontrôleurs sont LES processeurs utilisés dans le monde de l’embarqué. Ils sont conçus pour consommer le moins de courant possible, ce qui en fait leur force pour ce secteur d’activité. Une des explications du succès d’ARM (dont les processeurs équipent près de 90% des smartphones) réside dans sa capacité à minimiser cette consommation, ce qui de facto augmente l’autonomie du système embarqué.
3.1.1. Description de quelques périphériques.
Port d’entrée / sortie.
C’est l’interface qui traduit les niveaux logiques en tensions et réciproquement.
Une broche peut en général être configurée en entrée ou en sortie, le plus souvent avec des niveaux de tension de 0V pour l’état 0 et 5V ou 3.3V pour l’état 1.
Les entrées analogiques.
La tension mesurée en entrée est convertie en une valeur numérique sur 10 bits en général.
-
Un convertisseur 8 bits sera moins précis qu’un convertisseur 10 bits.
-
La conversion dure un certain temps (Acquisition + Conversion).
-
Il existe plusieurs types de convertisseurs : simple rampe, double rampes, approximation successive, flash, Sigma Delta…
-
Celui utilisé dans les µC est en général un approximation successive car on maîtrise parfaitement le temps de conversion.
Les ports de communication.
On trouve en général un(ou plusieurs) port série pour échanger des données avec un autre circuit. Un seul circuit peut être connecté sur le portsérie, la sortie transmission de l’un est reliée sur la réception de l’autre et réciproquement
On trouve aussi un ou plusieurs bus de communication pour échanger des données entre circuits (I2C, SPI, CAN), le même bus peut communiquer avec plusieurs circuits, ils se distinguent par des adresses différentes.
Les sorties PWM
Ces unités PWM fournissent un signal binaire carré périodique dont on peut agir sur le rapport entre le temps à l’état haut et le temps à l’état bas.
Dans l’exemple ci-dessous le signal est d’une période fixe Tp .
Au début de la séquence le ratio Th1/Tp est fixé à 75%. Au temps τ , ce ratio est changé à 37%, le période Tp ne change pas, c’est le temps Th2 qui est diminué par rapport à Th1 .
Ce signal appliqué à un moteur à courant continu permettra de faire varier sa vitesse.
Avec un choix adapté de la PWM le moteur à courant continu voit une tension analogique variable à ses bornes.
On ne parle cependant pas de convertisseur numérique analogique.
Ces CNA ou DAC unités sont peu courantes sur les microcontrôleurs. La raison principale est que ce genre de circuit consomme beaucoup d’énergie.
Si la PWM n’est pas suffisante, il est possible d’ajouter une fonction DAC extérieure communiquant en SPI avec le microcontrôleur.
3.2. Le DSP(Data system Processing).
Comme leur nom l’indique ces processeurs ont des architectures qui leur permettent de traiter du signal rapidement et efficacement.
C’est un microcontrôleur optimisé pour le calcul numérique.
Ce qui le caractérise par rapport au microcontrôleur c’est une instruction particulière appelée MAC: Multiply and AC cumulate" qui est réalisée en un cycle instruction. Cette instruction permet de faire une addition et une multiplication en même temps, le résultat est stocké sur 40 bits.
Ils possèdent également des périphériques d’entrées/sorties analogiques précis et rapides qui répondent aux besoins spécifiques des applications pour traiter des signaux (son, image,voix …).
Parmi les grands noms de l’industrie du semi-conducteur qui développe et commercialise des DSP, Texas Instrument est sans doute le plus connu.
3.3. SoC (System on Chip)
L’objectif est de diminuer au minimum le nombre de composants sur une carte électronique pour mettre tout sur une seule puce.
On peut intégrer de la logique, de la mémoire (statique, dynamique, flash, ROM, PROM, EPROM, EEPROM), des dispositifs (capteurs) mécaniques, opto-électroniques, chimiques ou biologiques, des DSP, des circuits radio (Wifi,bluetooth)…
L'esp32 de chez espressif en est un exemple particulièrement représentatif de SoC . 32bits pour moins de 10€ l’unité.