Add Shift Multiplier Digital Lab PDF
Add Shift Multiplier Digital Lab PDF
Presented by:
𝑏3 𝑎3 𝑏2 𝑎2 𝑏1 𝑎1 𝑏0 𝑎0
Critical Path = ?
Area = ?
𝑐3 𝑐2 𝑐1
𝑐4 FA-3 FA-2 FA-1 FA-0 𝑐0
(𝑆4 )
𝑆3 𝑆2 𝑆1 𝑆0
2
Binary Serial Adder
Critical Path = ?
Area = ?
FA-0
𝑆0
3
Binary Serial Adder
4
Binary Unsigned ADD-SHIFT Multiplier Design
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑌 = 𝐴 × 𝐵 = 𝑦7 𝑦6 𝑦5 𝑦4 𝑦3 𝑦2 𝑦1 𝑦0
𝑌 = 𝐴𝑏3 23 + 𝐴𝑏2 22 + 𝐴𝑏1 21 + 𝐴𝑏0 20 = 𝐴𝑏3 2−1 + 𝐴𝑏2 2−2 + 𝐴𝑏1 2−3 + 𝐴𝑏1 2−4 24
𝑌 = [𝐴𝑏3 + 𝐴𝑏2 + 𝐴𝑏1 + 𝐴𝑏0 2−1 2−1 2−1 ]2−1 24
Y = 𝑌𝑀 2𝑀
5
Binary Unsigned ADD-SHIFT Multiplier Design
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑌 = 𝐴 × 𝐵 = 𝑦7 𝑦6 𝑦5 𝑦4 𝑦3 𝑦2 𝑦1 𝑦0
𝑌 = [𝐴𝑏3 + 𝐴𝑏2 + 𝐴𝑏1 + 𝐴𝑏0 2−1 2−1 2−1 ]2−1 24 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 )2−1
Modified Equation
Y = 𝑌𝑀
6
Binary Unsigned ADD-SHIFT Multiplier Design (Left
Shift)
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
7
Binary Unsigned ADD-SHIFT Multiplier Design (Left
Shift)
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
Acc[N+M:0] = 0; //(N+M-1-bits)
Acc = 0; for(Count =0: Count<M; Count+1)
for(Count =0: Count<M; Count+1) {
{ if(B[count]=1)
if(B[count]=1) { Acc[N+M:M] = Acc[N+M:M] + {1’b0,A};
{ Acc = Acc + A*𝟐𝑴 }
} Acc = Acc >> 1
Acc = Acc >> 1 }
} Y = Acc;
Y = Acc;
Adder size is N+1-bits
8
Binary Unsigned ADD-SHIFT Multiplier Design
Start No Yes No
Acc[0] == 1 Count = M
A1 A
Acc 0 Yes
Acc[M-1:0] B Acc[ ] = Acc[ ] + A;
Count 0
Y = Acc [ ]
ACC > 1
Stop
Count + 1
9
Binary Unsigned ADD-SHIFT Multiplier Design (Right
Shift)
Example1: 0110(6) x 0101(5) 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
10
Binary Unsigned ADD-SHIFT Multiplier Design (Right
Shift)
Example1: 0110(6) x 0101(5) 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
Count Check bit ADD Shift
(i) B[i] 𝑌𝑖+1 = 𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 𝑌𝑖+1 = 𝑌𝑖+1 ≫ 1
0 1 Y1 = Y0 + 6 * 16 Y1 = 96 >> 1 = 48
Y1 = 0 + 6 * 16 = 96
1 0 Y2 = Y1 + 0 * 16 Y2 = 48 >> 1 = 24
Y2 = 48 + 0 = 48
2 1 Y3 = Y2 + 6 * 16 Y3 = 120 >> 1 = 60
Y3 = 24 + 96 = 120
3 0 Y4 = Y3 + 0 Y3 = 60 >> 1 = 30
Y4 = 60 + 0 = 60
4
Y = Y4
11
Binary Unsigned ADD-SHIFT Multiplier Design (Right
Shift)
Example 2: 1001(9) x 1101(13) 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
Count Check bit ADD Shift
(i) B[i] 𝑌𝑖+1 = 𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 𝑌𝑖+1 = 𝑌𝑖+1 ≫ 1
0 1 Y1 = Y0 + 9 * 16 Y1 = 144 >> 1 = 72
Y1 = 0 + 9 * 16 = 144
1 0 Y2 = Y1 + 0 * 16 Y2 = 72 >> 1 = 36
Y2 = 72 + 0 = 72
2 1 Y3 = Y2 + 9 * 16 Y3 = 180 >> 1 = 90
Y3 = 36 + 144 = 180
4
Y = Y4 = 30
12
Binary Unsigned ADD-SHIFT Multiplier Design (Right
Shift)
Example 3: 1111(15) x 1111(15) 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
Count Check bit ADD Shift
(i) B[i] 𝑌𝑖+1 = 𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 𝑌𝑖+1 = 𝑌𝑖+1 ≫ 1
0 1 Y1 = Y0 + 15 * 16 Y1 = 240 >> 1 = 120
Y1 = 0 + 15 * 16 = 240
4
Y = Y4 = 225
13
Binary Signed ADD-SHIFT Multiplier Design (Right
Shift)
Example 1: 1001(-7) x 1101(-3) 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
Count Check bit ADD\SUB Shift
(i) B[i] 𝑌𝑖+1 = 𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 𝑌𝑖+1 = 𝑌𝑖+1 ≫ 1
0 1
𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
1 0
𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
2 1
𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
3 1
(Subtract) 𝑌𝑖+1 = (𝑌𝑖 − 𝐴𝑏𝑖 2𝑀 )2−1
4
Y = Y4 = 21
14
Binary Signed ADD-SHIFT Multiplier Design (Right
Shift)
Example 1: 1001(-7) x 1101(-3) 𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
Count Check bit ADD\SUB Shift
(i) B[i] 𝑌𝑖+1 = 𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 𝑌𝑖+1 = 𝑌𝑖+1 ≫ 1
0 1 Y1 = Y0 + (-7) * 16 Y1 = -112 >> 1 = -56
𝑌𝑖+1 = (𝑌𝑖 + 𝐴𝑏𝑖 2𝑀 )2−1
Y1 = 0 + (-7) * 16 = -112
3 1 Y4 = Y3 - (-7) * 16 Y3 = 42 >> 1 = 21
(Subtract) Y4 = -70 + 112 = 42 𝑌𝑖+1 = (𝑌𝑖 − 𝐴𝑏𝑖 2𝑀 )2−1
4
Y = Y4 = 21
15
Binary Signed ADD-SHIFT Multiplier Design (Right Shift)
3 1 Y4 = Y3 - 7 * 16 Y3 = -14 >> 1 = -7
Y4 = 98 - 112 = -14 𝑌𝑖+1 = (𝑌𝑖 − 𝐴𝑏𝑖 2𝑀 )2−1
4
Y = Y4 = -7
16
Binary unsigned ADD-SHIFT Multiplication
Example1: 0110(6) x 0101(5)
Initialization ACC[M+N:0] =000000000 Conditions
ACC[M-1 :0] =B
ACC[8:0] =000000101
Count Check bit ADD (ACC+A) Shift ACC >> 1 Done/ Operation
ACC[0] ACC[7:4]+A count
0 000000101 000000101 001100101>>1 0/1 ACC[0]=1
0110 000110010 Add ACC+A and right
001100101 shift by 1 bit
1 000110010 No addition 000110010>>1 0/2 ACC[0]=0
000011001 No addition only shifting
2 000011001 001111001 001111001>>1 0/3 ACC[0]=1
000111100 Add ACC+A and right
shift by 1 bit
4 Count arrived to maximum size of the multiplier, stop the process and collect the result from ACC.
Y = ACC[M+N-1:0] = 00011110 = 30
17
Binary unsigned ADD-SHIFT Multiplication
Example2: 0101(5) x 0011(3)
Initialization ACC[M+N:0] =000000000 Conditions
ACC[M-1 :0] =B
ACC[8:0] =000000011
Count Check bit ADD (ACC+A) Shift ACC >> 1 Done/ Operation
ACC[0] ACC[7:4]+A count
0 000000011 001010011 000101001 0/1 ACC[0]=1
Add ACC+A and right
shift by 1 bit
1 000101001 001111001 000111100 0/2 ACC[0]=1
Add ACC+A and right
shift by 1 bit
2 000111100 No addition 000011110 0/3 ACC[0]=0
No addition only shifting
18
Binary unsigned ADD-SHIFT Multiplication
Example3: 0111(7) x 0111(7)
Initialization ACC[M+N:0] =000000000 Conditions
ACC[M-1 :0] =B
ACC[8:0] =000000111
Count Check bit ADD (ACC+A) Shift ACC >> 1 Done/ Operation
ACC[0] ACC[7:4]+A count
0 000000111 001110111 000111011 0/1 ACC[0]=1
Add ACC+A and right
shift by 1 bit
1 000111011 010101011 001010101 0/2 ACC[0]=1
Add ACC+A and right
shift by 1 bit
2 001010101 011000101 001100010 0/3 ACC[0]=1
Add ACC+A and right
shift by 1 bit
19
Binary unsigned ADD-SHIFT Multiplication
Example4: 1001(9) x 1011(11)
Initialization ACC[M+N:0] =000000000 Conditions
ACC[M-1 :0] =B
ACC[8:0] =000001011
Count Check bit ADD (ACC+A) Shift ACC >> 1 Done/ Operation
ACC[0] ACC[7:4]+A count
0 000001011 010011011 001001101 0/1 ACC[0]=1
Add ACC+A and right
shift by 1 bit
1 001001101 011011101 001101110 0/2 ACC[0]=1
Add ACC+A and right
shift by 1 bit
2 001101110 No addition 000110111 0/3 ACC[0]=0
No addition only shifting
20
Binary Signed ADD-SHIFT Multiplier Design
(Left Shift)
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
0 0 No
21
Binary Signed ADD-SHIFT Multiplier Design
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
Load 8 7 6 5 4 3 2 1 0
Sh
Add
𝑏3 𝑏2 𝑏1 𝑏0 Acc
Controller
+
done 𝑎3 𝑎2 𝑎1 𝑎0 A
Start
22
Binary Signed ADD-SHIFT Multiplier Design
Start No Yes No
Acc[0] == 1 Count = M-1
A1 A
Acc 0
Acc[M-1:0] B Acc[ ] = Acc[ ] + A;
Count 0 If Acc[0] =1
Acc[ ] = Acc[ ] - A;
ACC >> 1
Y = Acc [ ]
Count + 1
Stop
23
Binary Signed ADD-SHIFT Multiplier Design
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
Add
𝑏3 𝑏2 𝑏1 𝑏0 Acc
Controller
+
done 𝑎3 𝑎3 𝑎2 𝑎1 𝑎0 A
Start
24
Binary signed ADD-SHIFT Multiplication
Example4: 1001(-7) x 1011(-5)
Initialization ACC[M+N:0] =000000000 Conditions
ACC[M-1 :0] =B
ACC[8:0] =000001011
A1 = {A[N-1],A}=11001
Count Check bit ADD (ACC+A1) Shift ACC >>> 1 Done/ Operation
ACC[0] ACC[8:4]+A1 (Arithmetic Shift) count
0 000001011 000001011 111001101 0/1 ACC[0]=1
11001 (+) Add ACC+A1 and
110011011 Arithmetic right shift by 1
bit
1 111001101 111001101 110101110 0/2 ACC[0]=1
11001 (+) Add ACC+A1 and
1101011101 Arithmetic right shift by 1
1---discard bit
2 110101110 No addition 111010111 0/3 ACC[0]=0
No addition only shifting
26
Radix-4 ADD-SHIFT Multiplier Design
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
Add
𝑏3 𝑏2 𝑏1 𝑏0 Acc
Controller
+
done 𝑎3 𝑎3 𝑎2 𝑎1 𝑎0 A
Start
27
Binary Radix-2 Booth’s ADD-SHIFT Multiplier Design
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
28
Binary Radix-2 Booth’s ADD-SHIFT Multiplier Design
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
00 0 No Acc >> 1
11 0 No Acc >> 1
29
Binary Radix-4 Booth’s ADD-SHIFT Multiplier Design
𝑵 × 𝑴 Binary signed Multiplier will multiply two binary numbers A and B of size 𝑵-bits and 𝑀-bits
respectively, and produce the output S of size 𝑁 + 𝑀-bits
𝐴 = 𝑎3 𝑎2 𝑎1 𝑎0 𝐵 = 𝑏3 𝑏2 𝑏1 𝑏0
S = 𝐴 × 𝐵 = 𝑠7 𝑠6 𝑠5 𝑠4 𝑠3 𝑠2 𝑠1 𝑠0
30
Binary Radix-4 Booth’s ADD-SHIFT Multiplier Design
000 0 No
111 0 No
Case( Acc[count+2:count] )
Start 000 : Acc <= Acc No
001 : Acc[ ] <= Acc[ ] + A Count = N
010 : Acc[ ] <= Acc[ ] + A
011 : Acc[ ] <= Acc[ ] + 2A
100 : Acc[ ] <= Acc[ ] - 2A
B1 {B,0} 101 : Acc[ ] <= Acc[ ] - A
Acc[N+M+2:M+1] 0 110 : Acc[ ] <= Acc[ ] - A Yes
Acc[M:0] B1 111 : Acc <= Acc
Count 0 Default: Acc <= Acc
Y = Acc[ ? ]
ACC >> 2
Stop
M is even
Count + 2
32
Binary Radix-4 Booth’s ADD-SHIFT Multiplier Design
010
101
000 0 000 0
001 1 001 0
010 1 001 0
011 2 010 1
100 -2 110 1
101 -1 111 0
110 -1 111 0
111 0 000 0
34
Radix-4 Signed ADD-SHIFT Multiplier Design
0 010 = 1 Y = 1*A = -7 Y = -7
Count = Count +2
4
Y = Y4 = 21
35
Radix-4 Signed ADD-SHIFT Multiplier Design
0 110 = -1 Y = 1*A = +1 Y = +1
Count = Count +2
3
Y =1
36
ADD-SHIFT Multipliers Design
Unsigned Signed
Multiplier Multiplier
Size of ‘Acc’
37