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 dans ce module de formation porter notre attention sur les systèmes numériques utilisant une architecture existante non dédiée à un projet en particulier.

synthese

2. Architectures existantes généralistes.

On trouve cette organisation matérielle principalement dans 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.

newman
Figure 1. Architecture Von Neuman.

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’adresses 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.

harvard
Figure 2. Architecture Harvard.

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.

hierachie
Figure 3. Hierachie des mémoires.

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.

4004
Figure 4. Le premier microprocessueur de la société Intel en 1971.

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.

ext1
Figure 5. Vue extérieure du microprocesseur.

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.

min
Figure 6. Vue interne du microprocesseur au minimum.
  • 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.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.

ula
Figure 7. Unité arithmétique et logique.

Voici dans la table de fonctionnement ci-dessous un extrait des fonctions de UAL et de ses codes de sélections.

table
Figure 8. Table des opérations.

Après avoir rédigé votre démarche sur votre document réponse, vérifier vos résultats au fur et à mesure avec le questionnaire suivant:
  1. Quelle est la fonction sélectionnée? :
    1. Addition
    2. OU
    3. ET

    most
  2. D’après les valeurs imposées sur les entrées des registres A,B et de sélection, quelle sera la valeur binaire en sortie ?
    1. 01100111
    2. 00000100
    3. 01101011


  3. Le code de sélection est $84, la donnée sur l’accumulateur A est $66 et celle sur B est %0000 0101.Donner le résultat sur la sortie de l’accumulateur en binaire.
    1. 01100111
    2. 01101011
    3. 00000100

    most
  4. D’après les valeurs imposées sur les entrées des registres A,B et de sélection, quelle sera la valeur binaire en sortie ?
    1. 00000100
    2. 01101011
    3. 01100111

2.4.5. Travail à faire : Assembleur 6809

most
  • Un microprocesseur 6809 doit exécuter le programme en langage machine stocké dans sa mémoire externe. Quelle est l'adresse du début du programme?
    1. $2000
    2. 2000
    3. 86

  • Quel est le format du bus d'adresse?
    1. 8 bits
    2. 12 bits
    3. 16 bits

    most
  • En vous aidant des commentaires du code précédent en langage assembleur et de la table d'instruction du 6809 vu précédement. Quelle est l'opération que le microprocesseur doit réaliser?
    1. ET
    2. Soustraction
    3. Addition

  • Quelle est la première opérande?
    1. 25
    2. $25
    3. $15

  • Quel sera le résultat de l'opération?
    1. 5
    2. $5
    3. $3A

  • A quelle adresse sera stocké le résultat?
    1. $2000
    2. $2005
    3. $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

    LDR Rd, <memory ref>

    Load the value stored in the memory location specified by <memory ref> into register d.

    STR Rd, <memory ref>

    Store the value that is in register d into the memory location specified by <memory ref>.

    ADD Rd, Rn, <operand2>

    Add the value specified in <operand2> to the value in register n and store the result in register d.

    SUB Rd, Rn, <operand2>

    Subtract the value specified by <operand2> from the value in register n and store the result in register d.

    MOV Rd, <operand2>

    Copy the value specified by <operand2> into register d.

    CMP Rn, <operand2>

    Compare the value stored in register n with the value specified by <operand2>.

    B <label>

    Always branch to the instruction at position <label> in the program.

    B<condition><label>

    Conditionally branch to the instruction at position <label> in the program if the last comparison met the criteria specified by the <condition>. Possible values for <condition> and their meaning are: EQ :Equal to, NE:Not equal to, GT:Greater than, LT:Less than.

    AND Rd, Rn, <operand2>

    Perform a bitwise logical AND operation between the value in register n and the value specified by <operand2> and store the result in register d.

    ORR Rd, Rn, <operand2>

    Perform a bitwise logical OR operation between the value in register n and the value specified by <operand2> and store the result in register d.

    EOR Rd, Rn, <operand2>

    Perform a bitwise logical exclusive or (XOR) operation between the value in register n and the value specified by <operand2> and store the result in register d.

    MVN Rd, <operand2>

    Perform a bitwise logical NOT operation on the value specified by <operand2> and store the result in register d.

    LSL Rd, Rn, <operand2>

    Logically shift left the value stored in register n by the number of bits specified by <operand2> and store the result in register d.

    LSR Rd, Rn, <operand2>

    Logically shift right the value stored in register n by the number of bits specified by <operand2> and store the result in register d.

    HALT

    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 R0,R1,R2
    HALT
    • Simuler le fonctionnement du programme et vérifier hypothèse

    Correction
    • On met 10 dans le registre R0

    • On met 2 dans le registre R1

    • On additionne les contenus des restres R0 et R1 et on met le résultat dans le registre R2

    • A la fin de l’exécution, on a 12 dans R0

    • 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
    • On met 10 dans le registre R0

    • On décale le contenu de R0 de 1 bit vers la gauche et on met le résultat dans R0

    • \(10\) en binaire : \(00001010\) donc après décalage de \(1\) bit vers la gauche : \(00010100\) soit \(20\) en décimal

    • A la fin de l’exécution, on a \(20\) dans R0

    • Conclusion : un décalage de 1 vers la gauche revient à multiplier par 2

    • 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
    • On met 10 dans le registre R0

    • On décale le contenu de R0 de 1 bit vers la droite et on met le résultat dans R0

    • \(10\) en binaire : \(00001010\) donc après décalage de \(1\) bit vers la droite : \(00000101\) soit \(5\) en décimal

    • A la fin de l’exécution, on a \(5\) dans R0

    • Conclusion : un décalage de 1 vers la droite revient à diviser par 2

    • 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
    • On met 124 dans le registre R0

    • On met 1 dans le registre R1

    • On créer un label loop

    • On décale le contenu de R0 de 1 bit vers la droite et on met le résultat dans R0. On divise donc le contenu de R0 par 2.

    • On ajoute 1 au contenu du registre R1

    • On compare le contenu du regitre R1 avec la valeur 3

    • Si le résutat de la comparaison est négatif (voir le registre de status), on retourne au label loop et on recommence.

    • Lorsque le résultat de la comparaison est 0 (voir le registre de status), on cesse le branchement.

    • A la fin de l’exécution, on a \(15\) dans R0. On constate également l’apparition d’un 1 dans le bit C du registre de status. Il matérialise la retenue perdue lors de la dernière division : \( \frac{32}{2} = 15 + 1 \).

    • Conclusion : O a fait 3 décalage de 1 bit vers la droite, qui revient à faire une division entière par 8

    • Que fais le programme ci-dessous ?

    MOV R2,#65
    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
    • On met 65 dans le registre R2

    • On met 0 dans le registre R1

    • On créer un label LOOP

    • On ajoute 1 au contenu des registres R1 et R2

    • On sort le résultat sur le device 7 soit, un afficheur de caractères ASCII.

    • On compare le contenu du regitre R1 avec la valeur 3

    • Si le résutat de la comparaison est négatif (voir le registre de status), on retourne au label loop et on recommence.

    • Lorsque le résultat de la comparaison est 0 (voir le registre de status), on cesse le branchement.

    • A la fin de l’exécution, on a afficher ABC sur l’afficheur

    • Coder et simuler un programme qui affiche Hello !

    Correction
    MOV R2,#72
    OUT R2,7
    MOV R2,#101
    OUT R2,7
    MOV R2,#108
    OUT R2,7
    MOV R2,#108
    OUT R2,7
    MOV R2,#111
    OUT R2,7
    MOV R2,#33
    OUT R2,7
    HALT
    • Coder et simuler un programme qui effectue le calcul suivant : \( 4 \times 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
    INP R0,2
    LSL R0,R0,#2
    ADD R0,R0,#5
    OUT R0,4
    HALT

    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.

    decode
    Figure 9. Architecture minimum avec 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.

    map
    Figure 10. Exemple d’une répartition du plan mémoire pour un microprocesseur de 16 bits d’adresses.

    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.

    comment1
    Figure 11. Exemple de système avec son décodeur d’adresse (138).

    Nous pouvons également utiliser un PLD pour réaliser cette fonction décodage. Dans le schéma suivant un PAL 16L8.

    pal
    Figure 12. Exemple de système avec son décodeur d’adresse PAL 16L8(boitier IC4).

    2.5.2. Travail à faire : Solutions de décodage d’adresses

    • Répondre aux questions suivantes sur le circuit mémoire ci-dessous :


    most
    1. Donner le type de la mémoire schématisée ci-dessus:
      1. Mémoire RAM, car pas d'entrée d'écriture.
      2. Mémoire ROM, car pas d'entrée d'écriture.
      3. Mémoire EPROM, car pas d'entrée d'écriture et une entrée de programmation.

    2. Donner la capacité en octet et en bits de la mémoire schématisée ci-dessus:
      1. 8kbits
      2. 64kbits
      3. 8ko

    3. Quelles sont les lignes de bus de commande (contrôle) de cette mémoire.
      1. /CE,/OE
      2. /CE,/OE,/PGM
      3. /CE

      most
    4. Donner le type de la mémoire schématisée ci-dessus.
      1. Mémoire RAM, car une entrée d'écriture.
      2. Mémoire EPROM, une entrée d'écriture et pas d'entrée de programmation.
      3. ROM

    5. Donner la capacité en octet et en bits de la mémoire schématisée ci-dessus:
      1. 16ko
      2. 32kbits
      3. 256kbits

    6. Quelles sont les lignes de bus de commande (contrôle) de cette mémoire?
      1. /CE,/OE
      2. /CE,/OE,/PGM
      3. /CE,/OE,/WE

    7. Un microprocesseur peut adresser 64ko, et a un bus de données de 8 bits. Quel est le nombre de mots mémoire adressables?
      1. 64000
      2. 64
      3. 65536

    8. Un microprocesseur peut adresser 64ko, et a un bus de données de 8 bits. Quelle est la taille du bus d’adresses?
      1. 8bits
      2. 16bits
      3. 24bits

    9. Quel est le plus grand nombre décimal pouvant être sauvegardé dans un mot mémoire?
      1. 256
      2. 255
      3. 65535

      most
    10. Un microprocesseur a un bus d’adresse de 16bits et un bus de données de 8 bits. La figure illustre la mémoire du système formée par une PROM et une RAM. Quel est le nombre de bits permettant d’adresser la RAM ?
      1. 11
      2. 10
      3. 9

    11. Quelle est la capacité de la RAM ?
      1. 1024 octets
      2. 1ko
      3. 1024 bits

    12. Quelle est la capacité de la PROM ?
      1. 4kbits
      2. 4Ko
      3. 32kbits

    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.

    allinone

    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.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 MA*C : "*M*ultiply 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.

    dsp

    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.

    glue

    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é.

    esp32
    Figure 13. Exemple d’un SoC ESP32.
    soc
    Figure 14. Exemple d’intégration de fonctions dans un SoC ESP32.

    4. Sources