Excess 3 adder/subtractor:
Notation:
A bold number means 'as seen from a logic probe',
so 3 says that the bus lines have 0011 at hardware level.
The adder on the right corrects the result
by adding or subtracting 3,
according to the carry output C_OUT.
Example:
BCD 0 + BCD 0 is BCD 0.
The Excess 3 code for BCD 0 is 3.
So the adder in the middle of the picture
who does A+B' will say '3+3=6'.
C_OUT=0, so the second adder corrects
this result by subtracting 3 (by adding 13),
and our Q outputs emit the correct value of 3,
which means 0 when converting it
from Excess 3 back into BCD code.
(Sorry, if hopping around between different
number systems confuses you.)
Another example:
BCD 9 + BCD 3 is BCD 12.
When representing those BCD codes in Excess 3,
what we are getting at hardware level is
12 at A and 6 at A,
and the adder in the middle says A+B=18,
which means it passes on 2 to the second adder
and sets the C_OUT signal to 1.
So the second adder adds 3 to the result,
what sets the end result at Q to 5.
What means 12 when converting C_OUT and Q
back into BCD code.
Now for the little box which turns B into B'.
Like with binary adders in some ALU design articles,
the box turns B' to B, /B, 0, or -1.
But because Excess 3 zero means binary 0011,
things are a little bit more complicated.
An alternative version:
And if you really happen to have too much time on your hands,
please dig into the innards of old calculators,
and write some articles about your discoveries.
When trying to build your own calculator,
dig for Digi-Cal by R.W. Coles,
Practical Electronics, February 1973
(available at Bitsavers).
...Or take a look at what John Peterson has at saccade.com
(CS427/CS428).
[HOME] [UP]/ [BACK] [1] [2] [3] [4] [5] [6] [7] [8]
(c) Dieter Mueller 2012