Subtractors Lecture L7.2 Section 7.2

Download Report

Transcript Subtractors Lecture L7.2 Section 7.2

Subtractors
Lecture L7.2
Section 7.2
Subtractors
•
•
•
•
Half Subtractor
Full Subtractor
Adder/Subtractor - 1
Adder/Subtractor - 2
Half Subtractor
A0
B0
A0 B0 D0 C 1
0
0
1
1
0
1
0
1
0
1
1
0
0
1
0
0
1 2
0
-1
1
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
Multiple-bit Subtraction
A3 A2 A1 A0
A 0 1 0 1
5
-7
1E
1
A 0
B -0
1 1
B3 B2 B1 B0
B 0 1 1 1
1
1 0 1
1 1 1
1 1 0
Ci+1 - Ci
Ai
- Bi
Di
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:
Di = Ci $ (Ai $ Bi)
Ci+1 = !Ai & Bi # Ci & !(Ai $ Bi)
Full Subtractor
Di = Ci $ (Ai $ Bi)
Ci+1 = !Ai & Bi # Ci & !(Ai $ Bi)
Ci
Ai
Di
Bi
half subtractor
half subtractor
C i+1
subtract.abl
MODULE subtract
TITLE 'Subtractor, A. Student, 7/12/02'
DECLARATIONS
" INPUT PINS "
A3..A0 PIN 6, 7, 11, 5;
" Switch 1..4
A = [A3..A0];
" 4-bit operand
B3..B0 PIN 72, 71, 66, 70;
" Switch 5..8
B = [B3..B0];
" 4-bit subtrahend
" OUTPUT PINS "
D3..D0 PIN 39, 37, 36, 35 ISTYPE 'com';
" LED 5..8
D = [D3..D0];
" 4-bit difference
BF PIN 40 ISTYPE 'com';
" LED 4; borrow flag
" INTERMEDIATE NODES "
subtract.abl (cont’d)
C4..C0 NODE ISTYPE 'com';
" internal borrow vector
Cin = [C3..C0];
Cout = [C4..C1];
EQUATIONS
C0 = 0;
D = C $ A $ B ;
Cout = !A & B # Cin & !(A $ B);
BF = C4;
END subtract
Di = Ci $ (Ai $ Bi)
Ci+1 = !Ai & Bi # Ci & !(Ai $ Bi)
Adder/Subtractor - 1
A0
B0
S0
C1
A0
B0
D0
C1
Half subtractor
Half adder
A0
B0
SD0
E
CB 1
E = 0: Half adder
E = 1: Half subtractor
Adder/Subtractor-1
Ci
Di
Ai
Bi
Ci+1
E
E = 0: Full adder
E = 1: Full subtractor
addsub1.abl
Ci
Di
Ai
Bi
Ci+1
E
C4..C0 NODE ISTYPE 'com';
internal borrow vector
"
Cin = [C3..C0];
Cout = [C4..C1];
EQUATIONS
Cout = Cin & (E $ (A $ B)) # (E $ A) & B ;
Adder/Subtractor-2
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 subtractor
from a full adder
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
Question
Subtract the following 4-bit binary numbers
10110110
11001011
What is the answer in binary and dec?
Was there a net borrow?