Basado en mi pregunta anterior del mismo tipo, Construya una máquina sumadora usando compuertas lógicas NAND , esta vez se le pide que multiplique en lugar de sumar.
Construir un diagrama de las puertas (dos hilos) de lógica NAND que se llevará a los cables de entrada A1
, A2
, A4
, B1
, B2
, B4
, lo que representa dos números binarios A
a B
de 0 a 7, y los valores de retorno de los cables de salida C1
, C2
, C4
, C8
, C16
, y C32
, lo que representa C
, cuál es el producto de A
y B
.
Su puntaje está determinado por la cantidad de compuertas NAND que usa (1 punto por compuerta). Para simplificar las cosas, puede usar las compuertas AND, OR, NOT y XOR en su diagrama, con los siguientes puntajes correspondientes:
NOT: 1
AND: 2
OR: 3
XOR: 4
Cada una de estas puntuaciones corresponde al número de puertas NAND que se necesitan para construir la puerta correspondiente.
La puntuación más baja gana.
fuente
Respuestas:
60 55 5048 puertasEl original (60 puertas) fue el enfoque sistemático: multiplique cada dígito con cada uno y luego sume los dos. A saber, ver árboles Wallace y árboles Dadda
La mitad superior es la red de multiplicación: multiplique cada dígito con cada uno y agrupe los dígitos de salida con el mismo peso. Se han invertido algunos bits para salvar las puertas.
La segunda mitad es la red de sumadores. Cada cuadro representa un sumador único, ya sea un medio sumador (5 puertas - 1x XOR y un inversor), o un sumador completo (9 puertas - 2x XOR y NAND los bits de transporte invertidos). La parte superior son entradas, la salida inferior es la suma, la salida izquierda es la ejecución. ver el desafío anterior
El multiplicador 2x2 se ha optimizado manualmente para una red personalizada de 13 puertas, que es el tamaño óptimo que encontró @boothby . ¡Gracias!
Pegarlo en la esquina de bits bajos y volver a optimizar el árbol sumador ahorra cinco puertas (vea la revisión # 2). Pegarlo también en la esquina de bits altos, sin embargo, produce superposición. Sin embargo, un poco de matemática nos dice que soltar el bit bajo del multiplicador alto resuelve la superposición y lo que queda por hacer es agregar los dos bits restantes y resumir cosas.
Esto solo, desafortunadamente, no proporciona ningún ahorro, pero abre dos optimizaciones. Primero, los dos multiplicadores tienen dos puertas en común, y pueden fusionarse. En este punto, estamos de vuelta en 55. Segundo, en la red de suma, no necesitamos un medio sumador porque sabemos que su acarreo será cero. Podemos reemplazarlo con un OR. Un OR es una NAND con sus entradas invertidas. Esto nos produce dos cadenas 2 de NOT en cada rama, que luego se pueden quitar, para un ahorro total de cinco puertas. Desafortunadamente, el medio sumador en C16 todavía lleva, por lo que no podemos hacer lo mismo allí. Tercero, un sumador completo tiene una propiedad útil: si invierte sus entradas y sus salidas, todavía se comporta igual. Como todas sus entradas ya están invertidas, también podemos mover los inversores detrás de él. Dos veces. Podríamos haber hecho lo mismo en el original, pero ... Oh bien. Todavía tenemos un medio sumador con dos entradas invertidas. Quiero optimizar esta parte más, pero dudo que pueda.
Como sacamos un NOT del interior de un componente, tenemos que indicarlo de alguna manera. Hemos obtenido un medio sumador con transporte invertido (también conocido como XOR roscado) a un costo de cuatro puertas.
Mientras tanto, también hemos redibujado significativamente el diagrama.
fuente
39 puertas
Estoy bastante seguro de que no hay diseños más simples que los míos aquí. Fue muy difícil de hacer. También hago otros circuitos mínimos.
El retraso de la transmisión se indica mediante la posición hacia abajo de cada compuerta NAND en la hoja.
Código Verilog y pruebas:
Kim Øyhus
fuente