SC91-A, architecture détaillée de l'ALU
SC91-A, instructions logiques et sauts, implémentation

Etape 12 : Présentation de l'ALU

L'ALU est donc, comme vu précédemment composée de différents blocs fonctionnel correspondant à une instruction. Quelques instructions sont factorisable en un seul bloc. A chaque cycle, chaque bloc calcule un résultat, quelque soit l'instruction demandée. L'instruction permettra la sélection de l'un de ces résultats au niveau du multiplexeur de sortie.

Chaque bloc peut se sourcer sur 3 bus distincts : DMM et DNN ou DATA_I correspondant à la sortie de l'interface mémoire. La sortie est envoyée sur DDD à destination du bloc de registre. Les écritures en mémoire sont faite sur DATA_O et déclenchées en positionnant le signal DATA_WE.

Schéma synoptique de l'ALU

Le diagramme suivant représente l'architecture détaillée du bloc Unité Arithmétique et Logique :

L'unité arithmétique et logique simple-cpu

Implémentation

L'ALU a une taille d'environ 1200 LUT. Sa fréquence maximum est de 30 MHz sur le composant utilisé. Le chemin critique passe par le multiplier 32bits ; ensuite la rotation / décallage à 4 étages.

ALU / UAL : bloc LOADx

Le bloc LOADx permet la copie de registre à registre et les lectures mémoire au travers des instructions LOADm et POP. Ce bloc va donc récupérer une donnée sur le bus DMM ou en mémoire et va la transformer en entier signé ou non de 8, 16 ou 32 bits. Ce bloc, fonction de la taille de la donnée à lire, va générer les signaux DATA_RE utilisés par l'interface mémoire pour déterminer quels octets accéder.

ALU / UAL : bloc Tests JB

Le bloc Tests-JB est précédé de la sélection du bit sur lequel le test est à effectuer. ce bit est sélectionné à partir des données de l'instruction. Le bloc Tests-JB reçoit en outre les flags (FL) et la valeur attendue du bit sélectionné V. Lorsque le résultat du test conduit à un saut, ce bloc envoie vers l'additionneur la valeur du saut tel qu'inscrit dans l'instruction. Cette valeur sera ajoutée à l'adresse courante grace à l'additionneur recevant R00 sur le bus DMM. Le résultat sera ensuite reachargé dans R00.

ALU / UAL : bloc Addition

Le bloc Addition est utilisé pour le calcul des sauts conditionnels relatifs et pour les opérations d'addition ADDd et ADDr. Pour la première, DNN sera ajouté à la valeur directe reçue des données de l'instruction ; pour la seconde le résultat sera la somme de DNN et DMM.

ALU / UAL : bloc CPYB

Le bloc CPYB permet la copie de bit effectuée par l'opération CPYB. Le bit à copier est sélectionné par le multiplexeur placé en entrée, ce bit sera recombiné avec la valeur lue sur DMM dans le bloc CPYB.

ALU / UAL : bloc Multiplication

Le bloc Multiplication réalise le produit de DNN par DMM en mode signé ou non signé.

ALU / UAL : bloc Division

Le bloc Division permet le calcul du quotien et du reste de la division de DNN par DMM. Ce bloc est le seul élément séquentiel de l'ALU. L'opération de division est dans un premier temps réalisée en 16 cycle, calculant les bits du résulat deux à deux. Une solution plus performante sera par la suite implémentée. Des signaux de synchronisation permettent d'indiquer au séquenseur le fin de la division.

ALU / UAL : bloc Rotation

Le bloc Rotation réalise les rotations / décallage en 4 étapes. Ce bloc est donc composé de 4 sous blocs permettant le décallage / rotation de 16 bits, 8 bits, 4 bits, 2 bits et 1 bit ; ces sous blocs sont enchaînés.

ALU / UAL : Interface mémoire pour l'écriture

Le bloc Interface d'écriture mémoire permet la génération des signaux DATA_WR indiquant quels octets sont à écrire en mémoire sur le mot de 32 bits passé. Ce bloc aiguille en outre sur le bus d'adresse le bus DNN ou le pointeur de pile R01 selon le type d'instruction.

Interface avec la mémoire
Simple-Cpu The Simple CPU project The Simple CPU project
Un projet de disk91
Small CPU project