Projet Architecture 2019/20 : exécution d'une séquence de calcul

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 ainsi qu'un rapport écrit. 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.

Partie 1 : unité de calcul

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 pour deux nombres. Elle devra également préciser qu'un débordement a eu lieu pendant un calcul.

Partie 2 : exécution d'une séquence de calcul

La séquence de calcul à exécuter sera stockée dans une mémoire. La séquence est composée d'une suite de valeurs, codant un entier puis une opération et ainsi de suite. Le code d'une opération à réaliser est donné dans la table ci-dessous :

Code Opération
00Fin du calcul
01Addition
02Soustraction en valeur absolue
03Multiplication
04Division

Une séquence de calcul aura toujours la forme suivante : nb1 op1 nb2 op2 nb3 op3 nb4... nbn fin qui réalise le calcul suivant : ( ... ( ( ( nb1 op1 nb2 ) op2 nb3 ) op3 nb4 ) ... nbn )

Ainsi, par exemple, le contenu mémoire suivant (en hexa):

05 03 0C 01 11 04 02 02 16 00

exécute le calcul :

(((( 5 * 12 ) + 17 ) / 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.

Dans Logisim, il existe des composants mémoire, soit de type RAM, soit de type ROM. Il est possible de charger ces mémoires avec un contenu pré-enregistré. Le fichier sequence1.mem contient le codage de la séquence de calcul définie ci-dessus et débutant à l'adresse 0 de la mémoire.

Partie 3 : ajout d'une opération de lecture en mémoire

Une nouvelle opération est ajoutée : il s'agit de la lecture d'un entier en mémoire à la place d'un entier précisé directement dans la séquence. Le code de cette opération intégrera simultanément l'indication qu'il s'agit d'une opération de lecture et l'adresse à lire. L'indication qu'il s'agit d'une opération de lecture se fera en plaçant le bit de poid fort à 1, soit la valeur de 128. On y additionnera ensuite l'adresse à laquelle accèder.

Ainsi, la valeur 149, soit 128 + 21, correspondra à la lecture de la valeur placée à l'adresse 21 de la mémoire.

Si l'on reprend la séquence précédente dont les valeurs de 5 et de 17 sont maintenant respectivement placées à l'adresse 12 et 13 (soit les codages d'adresse 140 et 141, ou 8C et 8D en hexa), elle devient, en incluant ces deux données en mémoire :

8C 03 0C 01 8D 04 02 02 16 00 00 00 05 11 00

Le fichier sequence2.mem contient cette séquence sous forme de contenu mémoire Logisim.

Note : avec ce codage, comme il faut pouvoir différencier un entier donné directement et un accès en mémoire, toute valeur supérieure à 128 est considérée comme une lecture en mémoire. On ne peut donc pas inclure de nombre supérieur à 127 directement dans la séquence de calcul.

Travail attendu

Vous m'enverrez par mail, pour le XXXX Décembre le fichier Logisim implémentant votre circuit. Pour réaliser ce circuit, vous pouvez réutiliser sans restriction tous les composants proposés par Logisim.

Vous préciserez dans votre mail où vous en êtes arrvés du projet (si tout est fonctionnel ou seulement telle partie).

Chaque circuit sera testé. Si vous n'avez pas réussi à réaliser tout ce qui est demandé, assurez vous d'envoyez un circuit qui permet de tester au moins ce qui a été fait (notamment votre composant de calcul). 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 :