Binary Subtraction - Computer Science and Engineering

Download Report

Transcript Binary Subtraction - Computer Science and Engineering

Binary Subtraction
Section 3-9 Mano & Kime
Binary Subtraction
•
•
•
•
Review from CSE 171
Two’s Complement Negative Numbers
Binary Adder-Subtractors
4-bit Adder/Subtractor in VHDL
Half Subtractor
A0 B0 D0 C 1
0
0
1
1
0
1
0
1
0
1
1
0
0
1
0
0
A0
B0
D0
C1
Full Subtractor
Ci Ai Bi Di Ci+1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
1
0
0
1
1
0
1
AiBi
00
Ci
11
1
0
1
01
10
1
1
1
Di
Di = Ci $ (Ai $ Bi)
Same as Si in full adder
Full Subtractor
Ci Ai Bi Di Ci+1
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
1
0
0
1
1
0
1
AiBi
00
Ci
11
10
1
0
1
01
1
1
1
Ci+1
Ci+1 = !Ai & Bi
# Ci !Ai & !Bi
# Ci & Ai & Bi
Full Subtractor
Ci+1 = !Ai & Bi
# Ci !Ai & !Bi
# Ci & Ai & Bi
Ci+1 = !Ai & Bi
# Ci & (!Ai & !Bi # Ai & Bi)
Ci+1 = !Ai & Bi # Ci & !(Ai $ Bi)
Recall:
Si = Ci $ (Ai $ Bi)
Ci+1 = !Ai & Bi # Ci & !(Ai $ Bi)
Full Subtractor
Si = Ci $ (Ai $ Bi)
Ci+1 = !Ai & Bi # Ci & !(Ai $ Bi)
Ci
Ai
Di
Bi
half subtractor
half subtractor
C i+1
Binary Subtraction
•
•
•
•
Review from CSE 171
Two’s Complement Negative Numbers
Binary Adder-Subtractors
4-bit Adder/Subtractor in VHDL
Negative Numbers
Subtract by adding
73
-35
38
10’s complement
Ignore carry
73
+65
138
Negative Numbers
10’s complement:
Subtract from 100
100
-35
65
Take 9’s complement and add 1
99
-35
64
+1
65
Negative Numbers
2’s complement:
Subtract from
100000000
01001101
10110011
Take 1’s complement and add 1
11111111
-01001101
10110010
+1
10110011
Finding 2’s Complement
Complement
remaining bits
0 1 0 1 1 0 0 0
1 0 1 0 1 00 0
2’s complement
Copy all bits
to first 1
Negative Number
Take 2’s Complement
7510 = 4B16 = 01001011
-7510 = B516 = 10110101
FF
-4B
B4
+1
B5
Negative Number
Take 2’s Complement
110 = 0116 = 00000001
-110 = FF16 = 11111111
12810 = 8016 = 10000000
-12810 = 8016 = 10000000
Table 2.2
Positive and Negative Binary Numbers
Signed decimal
-128
-127
-126
…
…
…
-3
-2
-1
0
1
2
3
…
…
125
126
127
Hex
80
81
82
…
…
…
FD
FE
FF
00
01
02
03
…
…
7D
7E
7F
Binary
10000000
10000001
10000010
…
…
…
11111101
11111110
11111111
00000000
00000001
00000010
00000011
…
…
…
01111101
01111110
01111111
Unsigned decimal
128
129
130
…
…
…
253
254
255
0
1
2
3
…
…
…
125
126
127
Signed Numbers
4-bit:
8H = -8 to 7H = +7
1000 to 0111
8-bit: 80H = -128 to 7F = +127
16-bit: 8000H = -32,768 to
7FFFH = +32,767
32-bit: 80000000H = -2,147,483,648 to
7FFFFFFFH = +2,147,483,647
Binary Subtraction
•
•
•
•
Review from CSE 171
Two’s Complement Negative Numbers
Binary Adder-Subtractors
4-bit Adder/Subtractor in VHDL
Block Diagram of Binary Adder-Subtractor
Adder/Subtractor
A0
B0
S0
C1
A0
B0
D0
C1
Half subtractor
Half adder
A0
B0
SD0
E
CB1
E = 0: Half adder
E = 1: Half subtractor
Adder/Subtractor-1
Ci
Di
Ai
Bi
C
E
i+1
E = 0: Full adder
E = 1: Full subtractor
Full Adder
Reordered
Full Adder
Full
Subtractor
Ci Ai Bi Si Ci+1
Ci Ai Bi Si Ci+1
Ci Ai Bi Di Ci+1
0
0
0
0
1
1
1
1
1
1
1
1
0
0
0
0
0
0
0
0
1
1
1
1
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
0
0
1
0
1
1
1
0
0
1
1
0
0
1
1
1
0
1
0
1
0
1
0
0
1
1
0
1
0
0
1
1
0
1
1
0
0
1
0
NOT
0
0
1
1
0
0
1
1
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
1
0
1
0
0
1
1
0
1
Making a full adder
from a full subtractor
Bi
Ai
C i+1
Full Adder
Di
Ci
Adder/Subtractor-2
A3
B3
A2
B2
A1
B1
A0 B 0
E
Full Adder
C3
C4
SD3
Full Adder
Full Adder
C2
SD2
Full Adder
C1
SD1
E = 0: 4-bit adder
E = 1: 4-bit subtractor
SD0
4-bit Subtractor: E = 1
A3
B3
A2
B2
A1
B1
A0 B 0
E
Full Adder
C3
C4
SD3
Full Adder
Full Adder
C2
SD2
Full Adder
+1
C1
SD1
SD0
Add A to !B (one’s complement) plus 1
That is, add A to two’s complement of B
D=A-B
Adder- Subtractor Circuit
Binary Subtraction
•
•
•
•
Review from CSE 171
Two’s Complement Negative Numbers
Binary Adder-Subtractors
4-bit Adder/Subtractor in VHDL
A 4-Bit Adder-Subtractor
A(3:0)
B(3:0)
2's Complementer
B1(3:0)
0
1
2-to-1 MUX
B2(3:0)
4-bit Adder
CB
SD(3:0)
E
A(3:0)
B(3:0)
2's Complementer
B1(3:0)
0
1
2-to-1 MUX
B2(3:0)
4-bit Adder
CB
SD(3:0)
E
A(3:0)
B(3:0)
2's Complementer
B1(3:0)
0
1
2-to-1 MUX
B2(3:0)
4-bit Adder
CB
SD(3:0)
E
addsub2.vhd
SD(3:0)
a(3:0)
addsub2
b(3:0)
CB
E