ALU with Adder


And here we go.
We take an Adder, and add the results from two of our Logic Units.

Logic: Y is set to 0x00, what is added to the result X
from the upper logic unit, and then put out on Q.
For logic operations, we have to force the Adder carry input to 0,
to prevent it from unintentionally incrementing Q.

Incrementing is simple.
Keep Y at 0x00, pass A (or B) into X,
and force the Adder carry input to 1.

For shifting something left, both Logic Units are configurated
to the same logic function.
When X=Y, the Adder multiplies the Logic Unit result by two,
what is identical to shifting it left.

For shifting something right, X is connected to the output multiplexer
in a way to shift all Bits one place to the right,
as explained in the previous ALU example.

For Arithmetic, both Logic Units can be set so that
X = 0x00, 0xff, A, NOT A
Y = 0x00, 0xff, B, NOT B
What allows us to add, subtract or decrement,
as we already know.

Not shown in this block diagram is a 4:1 carry input multiplexer
(switches between 0, 1, Carry_Flag),
and a 2:1 carry output multiplexer
(switching between X0 during SHR and Adder carry output
for everything else).

Half as many components as the previous ALU,
a better/cleaner structure, faster, and more functionality.

The ideal choice for bread board experiments.
When using 74ACT, this design should be nearly as fast
as the venerable 74F181/74S181, but cheaper,
with a lower power consumption,
and an increased functionality.

The only "Black Box" left that we don't know
from the inside at gate level is the adder.

Now to dissect it.


[HOME] [UP]/ [BACK] [1] [2] [3] [4] [5] [6] [7] [8] [NEXT]

(c) Dieter Mueller 2004