Bueno, para considerar su pregunta básica: ¿cuál es el número mínimo de sumadores completos requeridos?
Inicialmente tienes doce productos parciales (bits), mientras que tu resultado tiene seis. Cada sumador completo totalmente utilizado eliminará un producto parcial (bit) y, por lo tanto, necesita exactamente 12 - 6 = 6 sumadores completos. Entonces, dado que no usa los medios sumadores, en la práctica puede haber más. Las formas de solucionar esto son recodificar los bits y / o simplificar algunos cálculos para no usar sumadores completos (como usted dice, algunas entradas son constantes).
Aquí hay una solución alternativa:
Reescriba 3Y como 4Y-Y, lo que lleva a (a 'denotando no (a))
0 x1 x2 x3 0 0
0 y1 y2 y3 0 0
y1' y1' y1' y1' y2' y3' -- Sign-extend, invert and add a one at the LSB position
0 0 0 0 0 1
0 0 1 1 0 1
La extensión de signo se puede reescribir como
0 x1 x2 x3 0 0
0 y1 y2 y3 0 0
0 0 0 y1 y2' y3' -- Sign-extend, invert and add a one at the LSB position
1 1 1 1 0 0 -- In two's complement one can use this trick to avoid the negative sign bit -b = 1-b'
0 0 0 0 0 1
0 0 1 1 0 1
Esto ahora resulta en:
0 x1 x2 x3 0 0
0 y1 y2 y3 0 0
0 0 0 y1 y2' y3'
0 0 1 0 1 0
Ahora, hay once productos parciales, pero dos de ellos están invertidos. Además, como la segunda columna menos significativa contiene solo dos productos parciales, tendremos que emplear un sumador completo adicional, a pesar de que la mitad del sumador sea suficiente.
Mirando y2 '+ 1, el bit de suma se convierte en (y como has notado) y2, mientras que el bit de acarreo se convierte en y2'. Por lo tanto, no se necesita una adición completa. Esto te deja con
0 x1 x2 x3
0 y1 y2 y3
0 0 1 y1
0 0 0 y2'
----------------------
z1 z2 z3 z4 y2 y3'
y nueve productos parciales que producen un resultado con cuatro bits, es decir, cinco sumadores completos.
Para salirse con el inversor, uno puede reescribir esto como (usando 2y2 + y2 '= 1 + y2)
0 x1 x2 x3
0 y1 1 y3
0 0 0 y1
0 0 0 y2
0 0 0 1
----------------------
z1 z2 z3 z4 y2 y3'
aunque no cambiará el número de sumadores completos.
Ahora, si desea guardar un sumador completo más, puede recodificar algunos de los bits en algo posiblemente "más fácil". Considere los productos parciales
0 y1 1 y1
0 0 0 1
Que es la expresión 5y1 + 3. Por lo tanto, la tabla de verdad para esta parte es
y1 result binary
---------------------
0 3 0011
1 8 1000
Esto lleva a que podemos cambiar estos cuatro productos parciales a los siguientes tres
y1 x1 x2 x3
0 0 y1' y3
0 0 0 y2
0 0 0 y1'
----------------------
z1 z2 z3 z4 y2 y3'
dando como resultado ocho productos parciales, pero aún así cinco sumadores completos (de los cuales, dos computadores z1 y z2 se pueden hacer medio sumadores).