nsi:premiere:architecture:machine_von_neumann
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| nsi:premiere:architecture:machine_von_neumann [2022/04/07 16:48] – goupillwiki | nsi:premiere:architecture:machine_von_neumann [2023/04/19 23:29] (Version actuelle) – [Unité arithmétique et logique] goupillwiki | ||
|---|---|---|---|
| Ligne 9: | Ligne 9: | ||
| Dans ce [[nsi: | Dans ce [[nsi: | ||
| - | Nous utiliserons [[logiciels: | + | Nous utiliserons [[logiciels: |
| ===== Choix de la taille des données ===== | ===== Choix de la taille des données ===== | ||
| Ligne 20: | Ligne 20: | ||
| * Des adresses sur 5 bits également -- Nous n' | * Des adresses sur 5 bits également -- Nous n' | ||
| * La mémoire comme toute la machine est cadencée par une horloge **CLK**.\\ Les changements opèrent quand CLK a un **front montant** (passe de 0 à 1) | * La mémoire comme toute la machine est cadencée par une horloge **CLK**.\\ Les changements opèrent quand CLK a un **front montant** (passe de 0 à 1) | ||
| - | * **RD** signifie que la mémoire | + | * **sel** permet d' |
| - | * **WR** signifie que la mémoire | + | * **ld** met la mémoire |
| ===== Unité arithmétique et logique ===== | ===== Unité arithmétique et logique ===== | ||
| Ligne 37: | Ligne 37: | ||
| * **LD :** (//LOAD//) charge W dans ACC | * **LD :** (//LOAD//) charge W dans ACC | ||
| * **RD :** écrit ACC sur le BUS | * **RD :** écrit ACC sur le BUS | ||
| + | |||
| + | Par ailleurs l'UAL transmet des informations sur ACC : | ||
| + | * si ACC = 0 | ||
| + | * si ACC > 0 | ||
| + | |||
| + | <WRAP tip>Pour l' | ||
| ===== Jeu d' | ===== Jeu d' | ||
| - | On définit ce que notre machine saura faire. | + | On définit ce que notre machine saura faire. Pour chaque instruction, |
| - | <WRAP tip>Les données en mémoire font 1 octet = 8 bits. On pourrait faire 2 lectures pour obtenir un mot de 2 octets = 16 bits. C' | + | <WRAP tip>Les données en mémoire font 1 octet = 8 bits. On pourrait faire 2 lectures pour obtenir un mot de 2 octets = 16 bits. C' |
| Nous choisissons qu'une instruction **fera toujours 1 octet**. Voici les instructions que nous voulons avoir : | Nous choisissons qu'une instruction **fera toujours 1 octet**. Voici les instructions que nous voulons avoir : | ||
| * **HLT :** //halt//, le programme s' | * **HLT :** //halt//, le programme s' | ||
| - | * **ADD :** // | + | * **ADD :** // |
| + | * **SUB :** // | ||
| + | * **LDA :** // | ||
| + | * **STO :** // | ||
| + | * **BRA :** // | ||
| + | * **BRZ :** // | ||
| + | * **BRP :** // | ||
| + | <WRAP tip>Sans les deux dernières instructions, | ||
| + | <WRAP box> | ||
| + | La mémoire contient :\\ //écrit en hexadécimal, | ||
| + | <code lang-none> | ||
| + | 6A 2B 8C 00 00 00 00 00 00 00 05 03 00 00 00 00 | ||
| + | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| + | </ | ||
| + | - Y a-t-il un moyen de savoir quelles cases correspondent aux instructions d'un programme ? | ||
| + | - Les 4 premiers octets sont les instructions d'un programme.\\ Écrivez ces octets en binaire puis traduisez-les selon le code définit plus haut. | ||
| + | - Que fait ce programme ? | ||
| + | </ | ||
| + | ===== Les registres ===== | ||
| + | {{ : | ||
| + | En plus des registres W et ACC dans l'UAL, nous utiliserons 3 registres très importants : | ||
| + | * Registre d' | ||
| + | * Registre instruction **RI** : contient l' | ||
| + | * Pointeur de ligne (//Program Counter//) **PC** : contient le numéro de la prochaine ligne programme\\ Cette ligne correspond à la case mémoire de même numéro.\\ Comme le fonctionnement basique est de passer à la ligne suivante, ce registre est doté d'une commande +1. | ||
| + | ===== Cycle instruction ===== | ||
| + | {{ : | ||
| - | ==== Quelques définitions ==== | + | L' |
| - | * Les données ne sont pas de simples bits. On les regroupe en mots -- en général 1 octet, 2 octets, ... 8 octets en 64 bits. | + | Vous pouvez constater que l'UC pilote |
| - | * Une unité de mémoire contenant un mot est un **registre**. | + | |
| - | * On nomme **UC** | + | |
| - | * On nomme **UAL** l' | + | |
| - | * Le pointeur de ligne, **PL** ou parfois **PC** (//program counter//) est un registre permettant de savoir où on en est du programme. | + | |
| - | * Le registre instruction **RI** contient l' | + | |
| - | * Le registre d' | + | |
| - | * Le **Bus** est le faisceau de câbles reliant les différents organes et permettant de transporter les données d'un point à un autre. | + | |
| ==== Cycle instruction ==== | ==== Cycle instruction ==== | ||
| - | * Le | + | Le graphique ci-dessous décrit la totalité du fonctionnement de l' |
| + | |||
| + | {{ : | ||
| + | |||
| + | === Comment lire ce diagramme === | ||
| + | |||
| + | Ce diagramme décrit une **machine à état**. Chaque cercle jaune représente un état. | ||
| + | * L'UC commence dans l' | ||
| + | * à chaque front d' | ||
| + | * dans certains cas, plusieurs chemins quittent un état. La machine emprunte alors le seul chemin possible selon le cas (//des conditions sont précisées surs ces transitions// | ||
| + | * dans les états, on précise ce que doit faire la machine.\\ Par exemple, dans l' | ||
| + | * Pour mémoriser l' | ||
| + | |||
| + | <WRAP box>=== Questions === | ||
| + | - Quel signaux l'UC doit-elle activer pour produire le transfert MEM -> RI ? | ||
| + | - Dans quels états le signal WR du registre R@ doit-il être activé ? | ||
| + | - Déduisez-en l' | ||
| + | - Un peu plus difficile : à quelle condition $Q_3$ doit passer à 1 ?\\ //Pour répondre, constatez que $Q_3$ vaut 1 dans les états 8 et 9 et que l'on active 8 si on est dans l' | ||
| + | </ | ||
| + | |||
| + | <WRAP tip>Ces quelques questions vous montre comment on peut définir les équations logiques de tous les signaux dont nous avons besoin et obtenir les transitions prévues par le schéma. Si nous voulions une UC plus performante avec un jeu d' | ||
| + | |||
| + | ===== Simulation sur Logisim ===== | ||
| + | |||
| + | Chargez {{ .: | ||
| + | |||
| + | Pour simuler, choisissez l' | ||
| + | |||
| + | Ensuite, vous ferez avancer la simulation pas à pas en faisant des tops d' | ||
| + | |||
| + | <WRAP box>=== À faire === | ||
| + | * Avec l' | ||
| + | * Entrez dans la mémoire le contenu vu précédemment :<code lang-none> | ||
| + | 6A 2B 8C 00 00 00 00 00 | ||
| + | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 | ||
| + | </ | ||
| + | | ||
| + | </ | ||
| + | |||
| + | <WRAP box>=== Plus gros programme === | ||
| + | |||
| + | * Télécharger le fichier {{ : | ||
| + | * dans la mémoire, chargez ce fichier, | ||
| + | * décodez le contenu de ce programme.\\ En particulier vous devez deviner quelles cases mémoires correspondent à des instructions et quelles cases correspondent à des données utilisées par le programme. | ||
| + | * Exécutez et vérifiez le bon fonctionnement. | ||
| + | </ | ||
| + | |||
| + | <WRAP tip>Dans le 2e cas, faire toute l' | ||
nsi/premiere/architecture/machine_von_neumann.1649342888.txt.gz · Dernière modification : de goupillwiki
