Inspiré par la popularité récente de nandgame sur TNB, et mon propre défi précédent .
Contexte
La décimale dense (DPD) est un moyen de stocker efficacement les chiffres décimaux en binaire. Il stocke trois chiffres décimaux (000 à 999) sur 10 bits, ce qui est beaucoup plus efficace que BCD naïf (qui stocke un chiffre sur 4 bits).
Table de conversion
DPD est conçu pour convertir facilement entre les bits et les chiffres par simple correspondance de motifs de haut en bas. Chaque motif binaire définit le nombre de chiffres élevés (8-9) du nombre, où ils se trouvent et comment déplacer les bits pour former la représentation décimale.
Ce qui suit est la table de conversion de 10 bits de DPD à trois chiffres décimaux. Chaque chiffre décimal est représenté en binaire 4 bits (BCD). Les deux côtés sont écrits de gauche à droite du chiffre le plus significatif au moins.
Bits => Decimal (Digit range)
a b c d e f 0 g h i => 0abc 0def 0ghi (0-7) (0-7) (0-7)
a b c d e f 1 0 0 i => 0abc 0def 100i (0–7) (0–7) (8–9)
a b c g h f 1 0 1 i => 0abc 100f 0ghi (0–7) (8–9) (0–7)
g h c d e f 1 1 0 i => 100c 0def 0ghi (8–9) (0–7) (0–7)
g h c 0 0 f 1 1 1 i => 100c 100f 0ghi (8–9) (8–9) (0–7)
d e c 0 1 f 1 1 1 i => 100c 0def 100i (8–9) (0–7) (8–9)
a b c 1 0 f 1 1 1 i => 0abc 100f 100i (0–7) (8–9) (8–9)
x x c 1 1 f 1 1 1 i => 100c 100f 100i (8–9) (8–9) (8–9)
Notations
- Les lettres minuscules
a
ài
sont les bits copiés dans la représentation décimale. 0
et1
sont les bits exacts dans les modèles de bits d'entrée ou de sortie.x
les bits sont ignorés dans la conversion.
Tâche
Créez un circuit logique à l'aide de portes NAND à deux entrées pour convertir 10 bits de DPD en 12 bits de BCD.
Exemples
Les bits accentués sont les bits de correspondance de modèle.
DPD Decimal BCD
0 0 0 0 0 0 0 1 0 1 005 0000 0000 0101
^
0 0 0 1 1 0 0 0 1 1 063 0000 0110 0011
^
0 0 0 1 1 1 1 0 0 1 079 0000 0111 1001
^ ^ ^
0 0 0 0 0 1 1 0 1 0 090 0000 1001 0000
^ ^ ^
0 0 0 1 0 1 1 1 1 0 098 0000 1001 1000
^ ^ ^ ^ ^
1 0 1 0 1 1 1 0 1 0 592 0101 1001 0010
^ ^ ^
0 0 1 1 0 0 1 1 0 1 941 1001 0100 0001
^ ^ ^
1 1 0 0 1 1 1 1 1 1 879 1000 0111 1001
^ ^ ^ ^ ^
1 1 1 0 0 0 1 1 1 0 986 1001 1000 0110
^ ^ ^ ^ ^
0 0 1 1 1 1 1 1 1 1 999 1001 1001 1001
^ ^ ^ ^ ^
1 1 1 1 1 1 1 1 1 1 999 1001 1001 1001
^ ^ ^ ^ ^
Critère de notation et de victoire
Le score est le nombre de portes NAND à deux entrées utilisées dans votre circuit. Le score le plus bas l'emporte.
Vous pouvez définir de petits composants en termes de portes NAND à deux entrées, puis les utiliser dans votre construction finale. Si un composant X
comprend N
des portes NAND à deux entrées, chaque utilisation de X
ajoute N
à votre score. Pour les portes logiques de base, cela signifie:
- PAS: +1
- 2 entrées ET: +2
- 2 entrées OU: +3
- XOR 2 entrées: +4
a
ài
dire et le processus de conversion. Passez par les étapes, plutôt que de simplement montrer des exemples et en espérant que nous comprenons de cela.Réponses:
45 NAND (ou 43)
45 semble être le minimum absolu, mais il est possible d'atteindre 43 NAND par une astuce: en supposant que les plus grands nombres sont correctement encodés.
888, 889, 898, 899, 988, 989, 998, 999 doivent être codés avec le 2 MSB en 00, nécessitant seulement 43 NAND pour le décodage.
Cependant, dans la spécification de décodage, ils sont spécifiés pour être ignorés, ce qui signifie qu'ils peuvent être n'importe quoi. Il est raisonnable de supposer que cette spécification plus libre pourrait nécessiter encore moins de portes, mais l'inverse est vrai. 45 portes sont nécessaires pour cela. Cette économie pourrait apporter de réels avantages à de vrais circuits.
J'ai également trouvé des circuits beaucoup plus efficaces et plus rapides, contenant quelques portes de plus.
Pas d'image au crayon dessinée du circuit cette fois. Peut-être plus tard.
Le circuit est présenté en code Verilog évident, prêt à fonctionner avec test inclus.
Code Verilog:
la source
65 62 6058 NANDEn prenant les entrées que
i0
pouri9
et les sorties queo0
pouro9, oa, ob
nousFramework de test Python pour valider l'exactitude de la construction.
la source