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.
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.
la source
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).
la source