Comment les différentes fonctions (par exemple, ajouter, soustraire, etc.) sont-elles implémentées dans ALU?


9

Je me demande, car il y a tellement de fonctions qu'une ALU doit faire, comment pourrais-je commencer à en implémenter une (un devoir où je suis censé implémenter un système MIPS avec Logisim, en utilisant des portes de base, des tongs, etc.).

La partie qui me dérange est de savoir comment puis-je implémenter une ALU qui peut faire différentes fonctions comme Ajouter / Soustraire / AND / OR / etc. Ai-je besoin de plus de logique de contrôle (voir en haut à droite dans "affectation précédente" ci-dessous).

Dans une affectation précédente, j'ai implémenté une ALU qui peut faire Add / Subtract / Negate. Maintenant, je pense qu'un ALU devrait être capable de faire des fonctions comme

Ma mission précédente

Réponses:


7

Bien que le calcul interne de toutes les réponses, puis l'utilisation d'un multiplexeur pour les sélectionner fonctionnera, ce n'est certainement pas une conception minimale.

Considérez que vous pouvez découper le problème en bits; au lieu d'un seul bloc logique avec deux entrées 8 bits, vous pouvez le partitionner en deux sections 4 bits, tant que vous pouvez les lier pour obtenir un résultat global correct. Heureusement, la liaison des tranches n'est pas pire qu'un seul bit, qui dans le cas de l'addition représente le bit de retenue. Ainsi, chaque tranche de 4 bits a un bit de reprise et un bit de reprise. (Notez que les logiques comme AND et NOR n'en auront même pas besoin, mais si plus tard vous implémentez des décalages gauche / droite, ce bit est facilement réutilisé).

Poussé à l'extrême, vous pouvez utiliser 8 tranches de 1 bit chacune. Il est utile de penser aux tranches de 1 bit, car cela facilite la réflexion sur une approche qui évolue vers des tranches plus grandes. Ainsi, avec une tranche de 1 bit, vous n'avez que 7 entrées: le code de fonction 4 bits, un bit de l'entrée A, un bit de l'entrée B et un bit de reprise. Vous avez également seulement deux sorties: fonction out et exécution. Alors maintenant, vous pouvez écrire les deux fonctions de sortie en termes de seulement 7 entrées, ce qui est du domaine de la capacité humaine à réduire raisonnablement. Vous vous retrouverez avec une poignée de portes qui ne calculeront pas nécessairement toujours toutes les fonctions, mais peu importe ce qui se passe à l' intérieur la tranche, mais seulement qu'elle produit le résultat correct lorsqu'elle est vue de l'extérieur.

Maintenant, vous pouvez aller de deux façons. Une façon consiste simplement à utiliser 8 de ces tranches de 1 bit et vous avez terminé. Une autre façon consiste à faire de plus grosses tranches, puis à les utiliser. En passant de 1 bit à 2 bits, les équations vont de 7 entrées à 9, et 4 bits nécessiteront des fonctions de 13 entrées. Ce n'est pas nécessairement facile, mais donnera des résultats plus compacts que l'approche compute-everything-then-mux. De plus, si vous regardez les internes d'une tranche ALU 74181 4 bits, vous ne verrez pas de multiplexeur à l'intérieur.


Je visais plus ma réponse à la fin du spectre "facile à comprendre", mais merci d'avoir signalé une possibilité plus optimale (au niveau matériel).
Martin Thompson

5

Oui, vous avez besoin de plus de logique de contrôle.

Votre mission précédente était purement arithmétique (est-ce un mot?), Vous pouvez donc utiliser un seul additionneur et masser les entrées en utilisant les signaux de contrôle pour créer les fonctions que vous souhaitez

Vos nouvelles fonctions sont logiques , vous avez donc besoin d'un autre bloc pour effectuer des opérations logiques. Les signaux de commande changeront la fonctionnalité de ce bloc.

Ensuite, au bas de votre diagramme, vous aurez besoin d'un multiplexeur (parfois appelé "multiplexeur") piloté par les signaux de contrôle pour choisir laquelle des réponses vous allez produire (celle de l'additionneur et son circuit de "massage d'entrée" ou celui de l'opérateur logique).

Si vous pouvez choisir de nouveaux encodages pour vos lignes de contrôle ALU, je serais peut-être tenté d'utiliser le MSB comme une sélection "arithmétique / logique", et les autres pour sélectionner la "sous-fonction" si cela a du sens, car cela simplifie le décodage pour le mux final.


Oui, l' arithmétique est un mot :)
Majenko

1
Il me semble que l' arithmétique est le mot que vous voulez. Notez que ce mot a l'accent sur la troisième syllabe. Avec l'accent sur la deuxième syllabe, c'est un mot différent qui se réfère à la mécanique de l'exécution d'opérations numériques de base comme vous apprenez à l'école primaire.
Olin Lathrop

1

Une bonne approche pour gérer les opérations logiques consiste à faire en sorte que les bits des deux opérandes servent d’ entrées de sélecteur à un multiplexeur à 4 entrées et à alimenter les entrées "données" du multiplexeur selon un modèle à quatre bits correspondant à l’opération souhaitée (généralement en une ALU 8 bits, il y aurait huit multiplexeurs - un pour chaque bit - et les entrées "données" des 8 multiplexeurs seraient liées ensemble).


sorte d'utiliser un multiplexeur comme une très petite ROM - et c'est une autre façon de faire, d'utiliser des ROM réelles.
JustJeff

Une ROM Nx1 bits est un multiplexeur dont les entrées "données" sont câblées. Dans le scénario que j'ai décrit, les entrées "données" du multiplexeur seraient sélectionnées par l'opérateur. En pratique, on utiliserait probablement une petite ROM pour sélectionner quelques-unes des 16 opérations logiques possibles, ainsi que quelques autres opérations, à partir d'un opcode à 3 ou 4 bits (on pourrait, si on le souhaite, passer directement l'opcode à la unité logique, mais utilisez d'autres multiplexeurs pour sélectionner d'autres opérations dans les cas où l'opcode ne générerait pas une opération logique utile).
supercat
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.