Así, para considerar su pregunta básica: ¿cuál es el mínimo número de sumandos necesarios?
Usted tiene inicialmente doce productos parciales (bits), mientras que su resultado tiene seis. Cada plenamente full adder se retire un producto parcial (bit), y por lo tanto, usted necesita exactly12 - 6 = 6 serpientes llenas. Entonces, dado que no se utilice la mitad de los sumandos, en la práctica puede ser más. Las maneras de conseguir alrededor de esto son recodificar los bits y/o simplificar algunos cálculos para no utilizar serpientes llenas (como usted dice, algunas entradas son constantes).
He aquí una solución alternativa:
Reescribir 3Y como 4Y-Y que conduce a (a' denota(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
El signo de la extensión puede escribirse 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
Ahora, esto se traduce 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 invertidas. También, como el segundo menos significativo columna contiene sólo dos productos parciales, tendremos que emplear un adicional de serpiente llena, a pesar de un medio sumador de ser suficiente.
Mirando y2' + 1, la suma de bits se convierte (como usted señala) y2, mientras que la llevan a poco se convierte en y2'. Por lo tanto, no hay adder es necesario. 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 producir un resultado con cuatro bits, es decir, cinco serpientes llenas.
Para conseguir lejos con el inversor, se puede reescribir esto como (utilizando 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 se va a cambiar el número de sumandos.
Ahora, si desea guardar una más completa de la serpiente, puede recodificar algunos de los bits en algo posiblemente "más fácil". Considerar 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 para 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'
resultando en ocho productos parciales, pero todavía cinco serpientes llenas (de los cuales dos de computación z1 y z2 pueden hacer la mitad de las serpientes).