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:51] 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 118: Ligne 118:
 ===== Simulation sur Logisim ===== ===== Simulation sur Logisim =====
  
-Chargez{{ .:vonneumann.circ |}} et ouvrez-le avec 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.
  
-<WRAP box>=== À faire ===+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.
  
-Entre le programme vu précédemment et exécutez-le pas à pas. +<WRAP box>=== À faire === 
- +  * Avec l'outil de sélection activé, cliquez-droit sur la mémoire et choisissez //Edit Contents// 
-<code lang-none>+  * 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 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 00 00 00 00 00 00 00 00   00 00 00 00 00 00 00 00
 </code> </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.1649436699.txt.gz · Dernière modification : de goupillwiki