ALU llevar dentro / fuera

0

Supongamos que hay una ALU con 3 entradas (A, B, Cin) y 2 salidas (Res, Cout).

Tiene funciones [A más B, A menos B, B menos A, A o B, 0, 1].

Según tengo entendido, así es como funciona el proceso de incorporación / salida para la adición.

A   B   Cin     Cout    Res
0   0   0       0       0
1   0   0       0       1
0   1   0       0       1
1   1   0       1       0
0   0   1       0       1
1   0   1       1       0
0   1   1       1       0
1   1   1       1       1 

¿Qué pasa con las otras funciones? ¿Cómo se utiliza el arrastre de entrada / salida, o solo el resultado de salida 0?

    
pregunta Code

2 respuestas

1

AGREGAR:

$$ \ begin {array} {ccccc} A & B & Cin & Cout & Res \\\\ 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 1 \\ 0 & 1 & 0 & 0 & 1 \\ 1 & 1 & 0 & 1 & 0 \\\\ 0 & 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 1 & 0 \\ 0 & 1 & 1 & 1 & 0 \\ 1 & 1 & 1 & 1 & 1 \ end {array} $$

Ya entiendes la tabla anterior, supongo. Así que no se necesitan más explicaciones.

Mira a SUB, sin embargo. Con la resta, a menudo ocurre que algo similar al uso de un XOR tiene lugar para invertir los bits del sustraendo. Entonces, una señal de control de "resta" se aplica a un lado del XOR (o todos ellos, si hay muchos bits en \ $ B \ $), con esta señal de control como un "1". Entonces \ $ B \ $ se aplica a la otra entrada XOR. La salida del XOR se alimenta al sumador, de la manera habitual como un nuevo agregado invertido. Para que todo funcione correctamente, el acarreo también se invierte ("1" si no hay préstamo y "0" si hay un préstamo).

Note a continuación que he invertido \ $ B \ $ y que ahora "no pedir prestado" significa que \ $ C_ {in} = 1 \ $. Así que las primeras cuatro filas son para "no pedir prestado" y las últimas cuatro filas son para "con pedir prestado":

$$ \ begin {array} {ccccc} A & B & Cin & Cout & Res \\\\ 0 & 1 & 1 & 1 & 0 \\ 1 & 1 & 1 & 1 & 1 \\ 0 & 0 & 1 & 0 & 1 \\ 1 & 0 & 1 & 1 & 0 \\\\ 0 & 1 & 0 & 0 & 1 \\ 1 & 1 & 0 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 \\ 1 & 0 & 0 & 0 & 1 \ end {array} $$

Para interpretar lo anterior, tenga en cuenta que si ve un "1" en la columna \ $ B \ $, esto solo significa que \ $ B = 0 \ $ y que la compuerta XOR la invirtió para la operación de resta antes de el valor de bit que llega a la sección sumadora de la ALU. Además, si ve \ $ C_ {in} = 0 \ $ aquí, esto significa que hubo un préstamo que debe also ser restado antes de generar un resultado. Finalmente, si \ $ C_ {out} = 1 \ $ entonces esto significa que no habrá más préstamos de la siguiente etapa. Pero si \ $ C_ {out} = 0 \ $, esto significa que se requiere un préstamo de la siguiente etapa.

No todas las ALU utilizan el método de resta anterior. He visto casos en los que si el acarreo es 0 significa que no hay préstamo. Pero en mi opinión, generalmente es cuando algún diseñador de ALU está lo suficientemente equivocado como para tratar de hacer lo imposible para agregar lógica desperdiciada solo para complacer a los futuros programadores tontos que se quejan de ello.

    
respondido por el jonk
1

Carry solo es aplicable a la parte aritmética de su unidad aritmética / lógica. Para funciones lógicas y constantes, generaría 0 lógico como sospechaba.

    
respondido por el TonyM

Lea otras preguntas en las etiquetas