Adders and Subtractors
Discussion D4.1
Adders and Subtractors
• Adders
• Carry and Overflow
• Subtractors
• Adder-Subtractor
Half Adder
C A B S 0 0 0 1 A 0 B 0
S 0
C 1
0 0 0 00 1 1 01 0 1 01 1 0 1
Dec Binary 1 1+1 +1 2 10
Multiple-bit Addition
0 1 0 10 1 1 1
A
B
A3 A2 A1 A0
0 1 0 1A 0 1 1 1B3 B2 B1 B0
B
0
1
0
1
1
1
1
Ai
+Bi
+Ci
Si
Ci+1
Full Adder
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1
1 1
1 1
Ci
AiBi00 01 11 10
0
1
Si
Full Adder
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1 Si = Ci'Ai'Bi
+ Ci'AiBi'
+ CiAi'Bi' + CiAiBi
Full Adder
Si = Ci'(Ai'Bi + AiBi')
+ Ci(Ai'Bi' + AiBi)
Si = Ci'(Ai Bi)
+ Ci(Ai Bi)'
Si = Ci (Ai Bi)
Si = Ci'Ai'Bi
+ Ci'AiBi'
+ CiAi'Bi' + CiAiBi
Full Adder
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1
1
1 11
Ci
AiBi00 01 11 10
0
1
Ci+1
Full Adder
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1 Ci
AiBi00 01 11 10
0
1
1
1 11
Ci+1
Ci+1 = AiBi
+ CiBi
+ CiAi
Full Adder
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1 Ci
AiBi00 01 11 10
0
1
1
1 11
Ci+1
Ci+1 = AiBi
+ CiAi'Bi
+ CiAiBi'
Full Adder
Ci+1 = AiBi
+ Ci(Ai'Bi + AiBi')
Ci+1 = AiBi + Ci(Ai Bi)
Recall:Si = Ci (Ai Bi)
Ci+1 = AiBi + Ci(Ai Bi)
Ci+1 = AiBi
+ CiAi'Bi
+ CiAiBi'
Full Adder
A
B
S
C
C i+1
i
i
i
i
Half-adder Half-adder
Si = Ci (Ai Bi)
Ci+1 = AiBi + Ci(Ai Bi)
Full Adder
half-adder
half-adderA
B
i
i
C i
C i+1
S i
S
C
C
A full adder can be made fromtwo half adders (plus an OR gate).
Full Adder
Full Adder
A B
C C
S
i i
i+1 i
i
Block Diagram
4-Bit Adder
C 1 1 1 0A 0 1 0 1B 0 1 1 1S 1 1 0 0
Full Adder
A B
0C
S
0 0
1
0
Full Adder
A B
C
S
1 1
2
1
Full Adder
A B
C
S
2 2
3
2
Full Adder
A B
C S
3 3
4 3
C 0
Full Adder
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1
Truth table
Ci CombinationalLogic
CombinationalLogicAi
Bi
Si
Ci+1
Behavior
Ci+1:Si = Ci + Ai + Bi
Full Adder
Full Adder
A B
C C
S
i i
i+1 i
i
Block Diagram
4-Bit Adder
C 1 1 1 0 0:A 0 1 1 0 1 0:B 0 0 1 1 1C4:S 1 0 1 0 0
Full Adder
A B
0C
S
0 0
1
0
Full Adder
A B
C
S
1 1
2
1
Full Adder
A B
C
S
2 2
3
2
Full Adder
A B
C S
3 3
4 3
C 0
library IEEE;use IEEE.STD_LOGIC_1164.all;use IEEE.STD_LOGIC_unsigned.all;
entity adder4 is port(
A : in STD_LOGIC_VECTOR(3 downto 0); B : in STD_LOGIC_VECTOR(3 downto 0); carry : out STD_LOGIC; S : out STD_LOGIC_VECTOR(3 downto 0)
);end adder4;
architecture adder4 of adder4 isbegin
process(A,B)variable temp: STD_LOGIC_VECTOR(4 downto 0);begin
temp := ('0' & A) + ('0' & B);S <= temp(3 downto 0);carry <= temp(4);
end process;end adder4;
4-Bit Adder
Adders and Subtractors
• Adders
• Carry and Overflow
• Subtractors
• Adder-Subtractor
Carry and Overflow
0 0 1 1 0 1 0 10 0 0 1 1 0 0 1 0111C = 0
V = 0
0
0
1
0
53+25 78
35+19 4E
Dec Hex
Binary
1001
1
0
0Note no carry from bit 6 to bit 7and no carry from bit 7 to C.
Carry and Overflow
0 0 1 1 0 1 0 10 1 0 1 1 0 1 1 0000C = 0
V = 1
1
1
1
0
53+91144
35+5B 90
Dec Hex
Binary
1111
0
1
1
Thinking SIGNED we added two positive numbersand got a negative result. This can’t be correct!Therefore, the OVERFLOW bit, V, is set to 1.Correct answer (144) is outside the range -128 to +127.
Note carry from bit 6 to bit 7but no carry from bit 7 to C.
Carry and Overflow
0 0 1 1 0 1 0 11 1 0 1 0 0 1 1 0001C = 1
V = 0
0
0
1
0
53- 45 8
35+D3 108
Dec Hex
Binary
1111
0
1
0
Thinking SIGNED we added a positive number to anegative number and got the correct positive answer.Therefore, the OVERFLOW bit, V, is cleared to 0.Correct answer (8) is inside the range -128 to +127.
Ignorecarry
Note carry from bit 6 to bit 7and carry from bit 7 to C.
Carry and Overflow
1 0 0 1 1 1 1 01 1 0 1 0 0 1 1 1000C = 1
V = 1
1
1
1
1
- 98 - 45- 143
9E+D3 171
Dec Hex
Binary
0110
1
0
0
Thinking SIGNED we added two negative numbersand got a positive answer. This must be wrong!Therefore, the OVERFLOW bit, V, is set to 1.Correct answer (-143) is outside the range -128 to +127.
Ignorecarry
Note no carry from bit 6 to bit 7but there is a carry from bit 7 to C.
Overflow
• Note that the overflow bit was set whenever we had a carry from bit 6 to bit 7, but no carry from bit 7 to C.
• It was also set when we had a carry from bit 7 to C, but no carry from bit 6 to bit 7.
• Upshot: The overflow bit is the EXCLUSIVE-OR of a carry from bit 6 to bit 7 and a carry from bit 7 to C.
Adders and Subtractors
• Adders
• Carry and Overflow
• Subtractors
• Adder-Subtractor
Half Subtractor
C A B D 0 0 0 1
0 0 0 00 1 1 11 0 1 01 1 0 0
A 0 B 0
D 0
C 1
0-1 1
21
Multiple-bit Subtraction
0 1 0 10 1 1 1
A
B
A3 A2 A1 A0
0 1 0 1A 0 1 1 1B3 B2 B1 B0
B
01
1
1
1
1
Ai
- Bi
- Ci
Di
Ci+1
1
Full Subtractor
0 0 0 0 00 0 1 1 10 1 0 1 00 1 1 0 01 0 0 1 11 0 1 0 11 1 0 0 01 1 1 1 1
Ci Ai Bi Di Ci+1
1 1
1 1
Ci
AiBi00 01 11 10
0
1
Di
Di = Ci (Ai Bi)
Same as Si in full adder
Full Subtractor
0 0 0 0 00 0 1 1 10 1 0 1 00 1 1 0 01 0 0 1 11 0 1 0 11 1 0 0 01 1 1 1 1
Ci Ai Bi Di Ci+1 Ci
AiBi00 01 11 10
0
1
1
1 11
Ci+1
Ci+1 = Ai'Bi
+ CiAi'Bi'
+ CiAiBi
Full Subtractor
Ci+1 = Ai'Bi
+ Ci(Ai'Bi' + AiBi)
Ci+1 = Ai'Bi + Ci(Ai Bi)'
Recall:Di = Ci (Ai Bi)
Ci+1 = Ai'Bi + Ci(Ai Bi)'
Ci+1 = Ai'Bi
+ CiAi'Bi'
+ CiAiBi
Full Subtractor
A
B
D
C
C i+1
i
i
i
i
half subtractorhalf subtractor
Di = Ci (Ai Bi)
Ci+1 = Ai'Bi + Ci(Ai Bi)'
Adders and Subtractors
• Adders
• Carry and Overflow
• Subtractors
• Adder-Subtractor
0 0 0 0 00 0 1 1 00 1 0 1 00 1 1 0 11 0 0 1 01 0 1 0 11 1 0 0 11 1 1 1 1
Ci Ai Bi Si Ci+1
1 0 1 0 11 0 0 1 01 1 1 1 11 1 0 0 10 0 1 1 00 0 0 0 00 1 1 0 10 1 0 1 0
Ci Ai Bi Si Ci+1
Full AdderReorderedFull Adder
0 0 0 0 00 0 1 1 10 1 0 1 00 1 1 0 01 0 0 1 11 0 1 0 11 1 0 0 01 1 1 1 1
Ci Ai Bi Di Ci+1
FullSubtractor
NOT
Making a full subtractor from a full adder
Full Adder
A B
C C
D
i i
i+1 i
i
Adder/Subtractor
Full Adder
A B
C
0 0
1
0
Full Adder
A B
C
1 1
2
1
Full Adder
A B
C
2 2
3
2
Full Adder
A B
C SD
3 3
4 3 SD SD SD
E
E = 0: 4-bit adderE = 1: 4-bit subtractor
4-bit Subtractor: E = 1
Full Adder
A B
C
0 0
1
0
Full Adder
A B
C
1 1
2
1
Full Adder
A B
C
2 2
3
2
Full Adder
A B
C SD
3 3
4 3 SD SD SD
E
+1
Add A to !B (one’s complement) plus 1That is, add A to two’s complement of BD = A - B