Outils pour utilisateurs

Outils du site


nsi:premiere:architecture:machine_von_neumann

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:premiere:architecture:machine_von_neumann [2022/04/08 18:45] goupillwikinsi:premiere:architecture:machine_von_neumann [2023/04/19 23:29] (Version actuelle) – [Unité arithmétique et logique] goupillwiki
Ligne 21: Ligne 21:
    * 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)
    * **sel** permet d'activer la mémoire, soit en lecture soit en écriture    * **sel** permet d'activer la mémoire, soit en lecture soit en écriture
-   * **ld** met la mémoire en lecture (Mémoire vers **BUS**). ld = 0, signifie qu'on est dans l'autr sens (BUS vers mémoire)+   * **ld** met la mémoire en lecture (Mémoire vers **BUS**). ld = 0, signifie qu'on est dans l'autre sens (BUS vers mémoire)
  
 ===== Unité arithmétique et logique ===== ===== Unité arithmétique et logique =====
Ligne 39: Ligne 39:
  
 Par ailleurs l'UAL transmet des informations sur ACC : Par ailleurs l'UAL transmet des informations sur ACC :
-  * si UAL = 0 +  * si ACC = 0 
-  * si UAL > 0+  * si ACC > 0
  
 <WRAP tip>Pour l'éventualité de nombres négatifs, on utilise le [[nsi:premiere:ca2|CA2]].</WRAP> <WRAP tip>Pour l'éventualité de nombres négatifs, on utilise le [[nsi:premiere:ca2|CA2]].</WRAP>
Ligne 57: Ligne 57:
   * **LDA :** //chargement//, l'UC demande de charger une valeur de la mémoire dans ACC\\ code : ''011@@@@@''   * **LDA :** //chargement//, l'UC demande de charger une valeur de la mémoire dans ACC\\ code : ''011@@@@@''
   * **STO :** //stockage//, l'UC demande l'écriture de ACC dans un case mémoire\\ code : ''100@@@@@''   * **STO :** //stockage//, l'UC demande l'écriture de ACC dans un case mémoire\\ code : ''100@@@@@''
-  * **BRA :** //branchement//, l'UC change la valeur de la ligne d'exécution en cours\\ code ''101#####''\\ ''#####'' représente le nouveau numéro de ligne +  * **BRA :** //branchement//, l'UC change la valeur de la ligne d'exécution en cours\\ code ''101#####''\\ ''#####'' représente le nouveau numéro de ligne 
-  * **BRZ :** //branchement si zéro//. Même chose que le précédent mais à condition que ACC = 0 +  * **BRZ :** //branchement si zéro//. Même chose que le précédent mais à condition que ACC = 0\\ code : ''110#####'' 
-  * **BRP :** //branchement si positif//. Même chose que le précédent mais à condition que ACC > 0+  * **BRP :** //branchement si positif//. Même chose que le précédent mais à condition que ACC > 0\\ code : ''111#####''
  
 <WRAP tip>Sans les deux dernières instructions, un programme ferait toujours la même suite d'instruction. Ces deux instructions sont comme des ''if''.</WRAP> <WRAP tip>Sans les deux dernières instructions, un programme ferait toujours la même suite d'instruction. Ces deux instructions sont comme des ''if''.</WRAP>
  
 <WRAP box>===Questions === <WRAP box>===Questions ===
-La mémoire contient :\\//écrit en hexadécimal, octets séparés par un espace//+La mémoire contient :\\ //écrit en hexadécimal, octets séparés par un espace//
 <code lang-none> <code lang-none>
 6A 2B 8C 00 00 00 00 00   00 00 05 03 00 00 00 00 6A 2B 8C 00 00 00 00 00   00 00 05 03 00 00 00 00
Ligne 105: Ligne 105:
   * 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 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'état 1 il faut faire le transfert MEM -> RI et aussi incrémenter PC (//faire +1//)   * dans les états, on précise ce que doit faire la machine.\\ Par exemple, dans l'état 1 il faut faire le transfert MEM -> RI et aussi incrémenter PC (//faire +1//)
-  * Pour mémoriser l'état dans lequel est la machine, on utilise des mémoires. Ici 4 mémoires $Q_3Q_2Q_1_Q_0$ suffisent. Par exemple pour l'état 5, on a $Q_3Q_2Q_1_Q_0 = 0101$+  * Pour mémoriser l'état dans lequel est la machine, on utilise des mémoires. Ici 4 mémoires $Q_3Q_2Q_1Q_0$ suffisent. Par exemple pour l'état 5, on a $Q_3Q_2Q_1Q_0 = 0101$
  
 <WRAP box>=== Questions === <WRAP box>=== Questions ===
Ligne 115: Ligne 115:
  
 <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'instruction plus riche, le principe serait le même mais avec une machine à état plus volumineuse.</WRAP> <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'instruction plus riche, le principe serait le même mais avec une machine à état plus volumineuse.</WRAP>
 +
 +===== Simulation sur Logisim =====
 +
 +Chargez {{ .:vonneumann.circ |}} et ouvrez-le avec logisim.
 +
 +Pour simuler, choisissez l'outil avec la main (en haut à gauche) puis appuyez sur le bouton RESET une fois.
 +
 +Ensuite, vous ferez avancer la simulation pas à pas en faisant des tops d'horloge. Pour cela vous pouvez par exemple faire **CTRL+T** au clavier ce qui change l'état de l'horloge. La simulation avance chaque fois que l'horloge passe de 0 à 1.
 +
 +<WRAP box>=== À faire ===
 +  * Avec l'outil de sélection activé, cliquez-droit sur la mémoire et choisissez //Edit Contents//
 +  * Entrez dans la mémoire le contenu vu précédemment :<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
 +</code>
 +  * Exécutez (comme décrit ci-dessus).\\ Observez que le programme se déroule bien comme prévu, en passant bien par tous les états indiqués par la machine à états.
 +</WRAP>
 +
 +<WRAP box>=== Plus gros programme ===
 +
 +  * Télécharger le fichier {{ :nsi:premiere:architecture:p2.txt |}},
 +  * 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>
 +
 +<WRAP tip>Dans le 2e cas, faire toute l'exécution pas à pas peut être long. Contentez-vous alors de faire quelque pas pour voir ce qui se produit, puis passez en mode automatique en appuyant **CTRL+K**. Quand vous constaterez que la simulation est bloquée sur HLT, ce sera que l'exécution est terminée. Rappuyez alors sur CTRL+K et constatez le résultat en mémoire.</WRAP>
nsi/premiere/architecture/machine_von_neumann.1649436326.txt.gz · Dernière modification : de goupillwiki