Ce projet est noté et compte pour la note de contrôle continu du module d'architecture des ordinateurs. Le résultat à fournir est le fichier du circuit réalisé sous le logiciel Logisim. Le travail est à faire par binôme.
Le but de ce projet, à l'aide du logiciel Logisim, est de réaliser un circuit comprenant une unité de calcul en nombres entiers non signés et exécutant une séquence de calculs exprimée en notation polonaise inverse.
Votre unité de calcul manipulera des nombres entiers non signés sur 8 bits. Elle sera capable de réaliser l'addition, la soustraction en valeur absolue, la muliplication et la division entière pour deux nombres. Elle devra également préciser qu'un débordement a eu lieu pendant un calcul, c'est-à-dire si le résultat n'est pas codable sur 8 bits.
Le composant de votre unité de calcul aura comme entrées/sorties :
Vu la notation en polonaise inverse, l'exécution de la séquence de calcul nécessite de passer par une pile qui contiendra les paramètres et résultats des calculs. Cette pile contiendra des valeurs sur 8 bits et aura une taille quelconque. Quand elle sera activée, la pile pourra soit empiler une nouvelle valeur, soit dépiler et retourner la valeur en son sommet.
En détail, les entrées/sorties du composant pile :
La séquence de calcul à exécuter sera stockée dans une mémoire (composant RAM ou ROM de Logisim). La séquence est composée d'une suite de valeurs, codant soit des entiers soit des opérations.
La séquence sera codée selon le principe de la notation polonaise inverse. Son principe est que dans l'écriture du calcul, les opérandes précèdent l'opérateur. Dans l'interprétation de la séquence, si un nombre est rencontré, il est empilé et quand une opération est rencontrée, deux valeurs sont dépilées, l'opération est appliquée dessus et le résultat est empilé. Par exemple, 4 + 3 s'écrit 4 3 + et 4 x ((5 - 8) / 2) s'écrit 5 8 - 2 / 4 x.
Afin de différencier le codage d'une opération de celui d'un entier, on utilisera le principe suivant : si le bit de poids fort est à 1, il s'agit du code d'une opération, sinon, il s'agit du codage d'un entier. La valeur particulière 0 signifiera la fin du calcul. Ainsi, les entiers codés dans une séquence auront une valeur comprise entre 1 et 127 (mais l'unité de calcul ou la pile manipuleront des entiers sur 8 bits entre 0 et 255).
Le code d'une opération à réaliser est donné dans la table ci-dessous, en hexa :
Code | Opération |
00 | Fin du calcul |
81 | Addition |
82 | Soustraction en valeur absolue |
83 | Multiplication |
84 | Division entière |
Sachant qu'en mémoire une séquence de calcul est stockée à partir de l'adresse 0 de la RAM le contenu mémoire suivant (en hexa) :
11 05 0C 83 81 02 84 16 82 00
exécute le calcul :
((( 17 + ( 5 * 12 )) / 2 ) - 22 ) = 16
A la fin de l'exécution de la séquence de calculs, le résultat final restera affiché. Si le résultat du calcul n'est pas bon à cause d'un débordement d'un des calculs de la séquence, une diode de débordement sera activée.
Vous m'enverrez par mail et par binôme, pour le Vendredi 17 Décembre à 20h au plus tard :
Chaque circuit sera testé. Si vous n'avez pas réussi à réaliser tout ce qui est demandé, assurez vous d'envoyer un circuit qui permet de tester au moins ce qui a été fait (notamment votre composant de calcul et votre pile). Un circuit ne se lançant pas à cause d'erreurs ou ne faisant rien ne peut pas être évalué et donc noté.
Le barême approximatif est le suivant :