Sur la base de ma question précédente du même type, Construisez une machine à ajouter à l'aide de portes logiques NAND , cette fois, vous êtes invité à multiplier au lieu d'ajouter.
Construire un diagramme de (deux fils) portes logiques NON -ET qui prend les fils d'entrée A1
, A2
, A4
, B1
, B2
, B4
, représentant deux nombres binaires A
à B
de 0 à 7, et des valeurs de retour sur les fils de sortie C1
, C2
, C4
, C8
, C16
, et C32
, soit C
, qui est le produit de A
et B
.
Votre score est déterminé par le nombre de portes NAND que vous utilisez (1 point par porte). Pour simplifier les choses, vous pouvez utiliser les portes ET, OU, NON et XOR dans votre diagramme, avec les scores correspondants suivants:
NOT: 1
AND: 2
OR: 3
XOR: 4
Chacun de ces scores correspond au nombre de portes NAND qu'il faut pour construire la porte correspondante.
Le score le plus bas l'emporte.
la source
Réponses:
60 55 5048 portesL'original (60 portes) était l'approche systématique - multipliez chaque chiffre par chacun, puis additionnez-les. À savoir, voir les arbres Wallace et les arbres Dadda
La moitié supérieure est le réseau de multiplication - multipliez chaque chiffre par chacun et groupez les chiffres de sortie avec le même poids. Certains bits ont été laissés inversés pour sauver les portes.
La seconde moitié est le réseau d'additionneurs. Chaque boîte représente un additionneur unique - soit un demi-additionneur (5 portes - 1x XOR et un onduleur), soit un additionneur complet (9 portes - 2x XOR et NAND les bits de report inversés). Le haut sont des entrées, la sortie du bas est la somme, la sortie de gauche est le report. voir le défi précédent
Le multiplicateur 2x2 a ensuite été optimisé à la main pour un réseau à 13 portes construit sur mesure, qui est la taille optimale trouvée par @boothby . Merci!
Le coller dans le coin des bits bas et réoptimiser l'arbre d'addition permet d'économiser cinq portes (voir révision # 2). Cependant, le coller également dans le coin élevé produit un chevauchement. Un peu de maths nous dit, cependant, que la suppression du bit bas du multiplicateur élevé résout le chevauchement et ce qui reste à faire est d'ajouter les deux bits restants et de résumer les choses.
Cela seul, malheureusement, ne permet pas de réaliser des économies, mais il ouvre deux optimisations. Premièrement, les deux multiplicateurs ont deux portes en commun et peuvent être fusionnés ensemble. À ce stade, nous sommes de retour à 55. Deuxièmement, dans le réseau d'addition, nous n'avons pas besoin d'un demi-additionneur car nous savons que son portage sera nul. Nous pouvons le remplacer par un OU. Un OU est un NAND avec ses entrées inversées. Cela nous produit avec deux chaînes de 2 NOT sur chaque branche, qui peuvent ensuite être supprimées, pour une économie totale de cinq portes. Malheureusement, le demi-additionneur à C16 porte toujours, donc nous ne pouvons pas faire la même chose là-bas. Troisièmement, un additionneur complet a une propriété utile: si vous inversez ses entrées et ses sorties, il se comporte toujours de la même manière. Comme toutes ses entrées sont déjà inversées, on peut tout aussi bien déplacer les onduleurs derrière lui. Deux fois. Nous aurions pu faire la même chose dans l'original, mais ... tant pis. Nous avons encore un demi-additionneur avec deux entrées inversées. Je veux optimiser davantage cette partie, mais je doute que je puisse.
Puisque nous retirons un NOT de l'intérieur d'un composant, nous devons le signifier d'une manière ou d'une autre. Nous avons obtenu un demi-additionneur à portage inversé (AKA taraudé XOR) au prix de quatre portes.
En attendant, nous avons également redessiné le diagramme de manière significative.
la source
39 portes
Je suis sûr qu'il n'y a pas de conceptions plus simples que les miennes ici. C'était très difficile à faire. Je fais aussi d'autres circuits minimaux.
Le retard de transmission est indiqué par la position vers le bas de chaque porte NON-ET sur la feuille.
Code Verilog et tests:
Kim Øyhus
la source