You are on page 1of 41

R.

No: 13MVD0096

Dt: 08-08-2014

VLSI DSP Assignment-2


on

Verilog coding of signed Adders & Multipliers

Submitted to

Arunachalam V
AP SG, SENSE, VIT University

Submitted by

K Jayaprasada Rao
13MVD0096
M.Tech VLSI Design

VLSI DSP Assignment-1

Page: 1

R.No: 13MVD0096

Dt: 08-08-2014

1. Serial Adder
//shift register to store the two inputs a and b to be added
module shift(y,d,clk);
input [7:0] d;
input clk;
output [7:0] y;
reg [7:0] y;
initial begin
assign y=d;
end
always @(posedge clk)
begin
assign y=y>>1;
end
endmodule
//serial in parallel out register to store the 8 bit sum
module sipo(y,s,clk);
input s;
input clk;
output [7:0] y;
reg [7:0] y;
always @(posedge clk)
begin
assign y={s,y[7:1]};
end
endmodule
//1 bit full adder
module fa(s,cout,a,b,cin);
input a,b,cin;
output s,cout;
assign {cout,s}=a+b+cin;
endmodule
//d flipflop to store the cout of each stage
module dff(q,d,clk);
input d,clk;
output q;
reg q;
initial begin
q=1'b0;
end
always @(posedge clk)
begin
q=d;
VLSI DSP Assignment-1

Page: 2

R.No: 13MVD0096

Dt: 08-08-2014

end
endmodule
//main module serial adder//
module serialadder(sum,cout,a,b,clk);
input [7:0] a,b;
input clk;
wire [7:0] x,z;
output [7:0] sum;
output cout;
wire s,cin;
//input cin;
//initial begin
//cin=cinp;
//end
fa k(s,cout,x[0],z[0],cin);
//1 bit full adder
dff q(cin,cout,clk);
//d flipflop to store
the cout value after each 1 bit full adder operation
sipo m(sum,s,clk);
//serial sum(s)
converted to parallel output(8 bit sum)///
shift g(x,a,clk);
//shifts the input a
shift h(z,b,clk);
//shifts the input b
endmodule
Testbench :
module serial_tst();
reg [7:0] a,b;
reg clk;
wire [7:0] sum;
wire cout;
serialadder a1(sum,cout,a,b,clk);
initial
begin
clk=1'b0;
#2a=8'b11001100;
b=8'b11000000;
#200$stop;
end
always #5 clk=~clk;
initial
$monitor ($time,"a=%b,b=%b,sum=%b,cout=%b",a,b,sum,cout);
endmodule

VLSI DSP Assignment-1

Page: 3

R.No: 13MVD0096

Dt: 08-08-2014

Output result:

#
#
#
#
#
#
#
#
#
#
#

0a=xxxxxxxx,b=xxxxxxxx,sum=xxxxxxxx,cout=x
2a=11001100,b=11000000,sum=xxxxxxxx,cout=0
5a=11001100,b=11000000,sum=0xxxxxxx,cout=0
15a=11001100,b=11000000,sum=100xxxxx,cout=0
25a=11001100,b=11000000,sum=1100xxxx,cout=0
35a=11001100,b=11000000,sum=011100xx,cout=0
45a=11001100,b=11000000,sum=0011100x,cout=0
55a=11001100,b=11000000,sum=00011100,cout=1
65a=11001100,b=11000000,sum=10000111,cout=1
75a=11001100,b=11000000,sum=11000011,cout=0
85a=11001100,b=11000000,sum=01110000,cout=0
95a=11001100,b=11000000,sum=00111000,cout=0

Synthesis Report For Serial Adder:Number of full adders =1


Number of half adders=0
Area:

VLSI DSP Assignment-1

Page: 4

R.No: 13MVD0096

Dt: 08-08-2014

Power:

2. Carry Ripple Adder:


Verilog code:
module carryriple(a,b,cin,sum,cout);
input [7:0] a;
input [7:0] b;
input cin;
output [7:0]sum;
output cout;
wire[6:0] c;
fulladd a1(a[0],b[0],cin,sum[0],c[0]);
fulladd a2(a[1],b[1],c[0],sum[1],c[1]);
fulladd a3(a[2],b[2],c[1],sum[2],c[2]);
fulladd a4(a[3],b[3],c[2],sum[3],c[3]);
fulladd a5(a[4],b[4],c[3],sum[4],c[4]);
fulladd a6(a[5],b[5],c[4],sum[5],c[5]);
fulladd a7(a[6],b[6],c[5],sum[6],c[6]);
fulladd a8(a[7],b[7],c[6],sum[7],cout);
endmodule
///////////////fulladder/////////////////////
module fulladd(a, b, cin, sum, cout);
input a;
input b;
input cin;
output sum;
output cout;
assign sum=(a^b^cin);
assign cout=((a&b)|(b&cin)|(a&cin));
VLSI DSP Assignment-1

Page: 5

R.No: 13MVD0096

Dt: 08-08-2014

endmodule
Testbench :
module carryriple_tst();
reg [7:0] a;
reg [7:0] b;
reg cin;
wire [7:0]sum;
wire cout;
carryriple q1(a,b,cin,sum,cout);
initial
begin
#2 a=8'b01111001;
b=8'b11111011;
cin=1'b1;
#6 a=8'b01100001;
b=8'b10011011;
cin=1'b0;
#50 $stop;
end
initial
$monitor ("a=%b,b=%b,cin=%b,sum=%b,cout=%b",a,b,cin,sum,cout);
endmodule
Output result:

# a=xxxxxxxx,b=xxxxxxxx,cin=x,sum=xxxxxxxx,cout=x
# a=01111001,b=11111011,cin=1,sum=01110101,cout=1
# a=01100001,b=10011011,cin=0,sum=11111100,cout=0
# a=01100111,b=10000011,cin=1,sum=11101011,cout=0
# a=11100001,b=10011001,cin=0,sum=01111010,cout=1

Synthesis Report For Carry Ripple Adder:VLSI DSP Assignment-1

Page: 6

R.No: 13MVD0096

Dt: 08-08-2014

Number of full adders =8


Number of half adders=0
Area:

Power :

3. Carry Save Adder:


Verilog code:
module halfadd(s,co,x,y);
output s,co;
input x,y;
xor(s,x,y);
and(co,x,y);
endmodule
module carrysaveadd(sum,cout,a,b);
VLSI DSP Assignment-1

Page: 7

R.No: 13MVD0096

Dt: 08-08-2014

output[7:0]sum;
output cout;
wire[7:0]sum;
input[7:0]a,b;
wire c1,c2,c3,c4,c5,c6,c7; //carry wires
wire [7:0]p;
halfadd ha0(p[0],c1,a[0],b[0]);
halfadd ha1(p[1],c2,a[1],b[1]);
halfadd ha2 (p[2],c3,a[2],b[2]);
halfadd ha3(p[3],c4,a[3],b[3]);
halfadd ha4(p[4],c5,a[4],b[4]);
halfadd ha5(p[5],c6,a[5],b[5]);
halfadd ha6(p[6],c7,a[6],b[6]);
halfadd ha7(p[7],cout,a[7],b[7]);
assign sum[0]=p[0];
assign sum[1]=p[1]+c1;
assign sum[2]= p[2]+c2;
assign sum[3]=p[3]+c3;
assign sum[4]=p[4]+c4;
assign sum[5]=p[5]+c5;
assign sum[6]=p[6]+c6;
assign sum[7]=p[7]+c7;
endmodule
Testbench :
module carrysaveadd_tst();
reg [7:0]a,b;
wire [7:0]sum;
wire cout ;
carrysaveadd csa1(sum,cout,a,b);
initial
begin
a= 8'd10;b=8'd5;
#2a=8'd12;b=8'd1;
#2a= 8'd7;b=8'd6;
#2a=8'd9;b=8'd2;
end
initial #20 $stop;
initial
$monitor($time,"a=%d,b=%d,sum=%d,cout=%d",a,b,sum,cout);
endmodule

VLSI DSP Assignment-1

Page: 8

R.No: 13MVD0096

Dt: 08-08-2014

Output result:

#
#
#
#

0a= 10,b= 5,sum= 15,cout=0


2a= 12,b= 1,sum= 13,cout=0
4a= 7,b= 6,sum= 13,cout=0
6a= 9,b= 2,sum= 11,cout=0

Synthesis Report For Carry Save Adder:Number of full adders =0


Number of half adders=8
Area:

VLSI DSP Assignment-1

Page: 9

R.No: 13MVD0096

Dt: 08-08-2014

Power:

MULTIPLIERS:
1. Modified Booth Multiplier:
Verilog code :
module boothencoder(y,en,x,Xsel,T,twoXsel,a0,a1,NEG,P);
input [9:0]y;
input [9:0]x;
input en;
output [3:0]T;
reg [3:0]T;
output [8:1]P;
wire [8:1]P;
output a0,a1;
wire a0,a1;
output reg [3:0] Xsel,twoXsel,NEG;
reg [3:0] W1,W2;reg [8:0] W3,W4,W5;
reg[0:8]PP[0:3];
wire [20:0]S;
wire [28:0]C;
wire w,w1,w2,w3,w4,w5,w6;
integer i,j;
always@(en)
VLSI DSP Assignment-1

Page:
10

R.No: 13MVD0096

Dt: 08-08-2014

begin
for(i=0;i<=3;i=i+1)
begin
for(j=0;j<=8;j=j+1)
begin
Xsel[i]=(y[2*i] ^ y[(2*i)+1]);
W1[i]=y[2*i] & y[(2*i)+1];
W2[i]=~(y[2*i] | y[(2*i)+1]);
twoXsel[i]=(~(y[(2*i)+2])*W1[i])|((y[(2*i)+2])*W2[i]);
NEG[i]=y[(2*i)+2];
W3[j]=x[j+1]&Xsel[i];
W4[j]=x[j]&twoXsel[i];
W5[j]=W3[j]|W4[j];
PP[i][j]=(W5[j]^NEG[i]);
T[i]=Xsel[i]|twoXsel[i];
$display("PP[%0d][%0d]=%b",i,j,PP[i][j],$time);
end
end
end
approxcarrygen q1(.T(T),.a0(a0),.a1(a1));
fulladder
f1(.a(PP[0][6]),.b(PP[1][4]),.c(PP[2][2]),.s(S[0]),.cout(C[0]));
fulladder f2(.a(S[0]),.b(a0),.c(PP[3][0]),.s(S[1]),.cout(C[1]));
halfadder f3(.a(S[1]),.b(a1),.s(S[12]),.c(C[12]));
halfadder h1(.a(PP[0][7]),.b(PP[1][5]),.s(S[2]),.c(C[2]));
fulladder
f4(.a(S[2]),.b(C[0]),.c(PP[2][3]),.s(S[3]),.cout(C[3]));
fulladder
f5(.a(S[3]),.b(C[1]),.c(PP[3][1]),.s(S[13]),.cout(C[13]));
halfadder h2(.a(PP[0][8]),.b(PP[1][6]),.s(S[4]),.c(C[4]));
fulladder
f6(.a(S[4]),.b(C[2]),.c(PP[2][4]),.s(S[5]),.cout(C[5]));
fulladder
f7(.a(S[5]),.b(C[3]),.c(PP[3][2]),.s(S[14]),.cout(C[14]));
assign w=~PP[0][8];
assign w1=(~PP[1][7]);
assign w2=(~PP[1][8]);
assign w3=(~PP[2][7]);
assign w4=(~PP[2][8]);
assign w5=(~PP[3][7]);
assign w6=(~PP[3][8]);
halfadder h3(.a(w),.b(w1),.s(S[6]),.c(C[6]));
fulladder
f8(.a(S[6]),.b(C[4]),.c(PP[2][5]),.s(S[7]),.cout(C[7]));
fulladder
f9(.a(S[7]),.b(C[5]),.c(PP[3][3]),.s(S[15]),.cout(C[15]));
VLSI DSP Assignment-1

Page:
11

R.No: 13MVD0096

Dt: 08-08-2014

halfadder h4(.a(w2),.b(PP[1][7]),.s(S[8]),.c(C[8]));
fulladder
f10(.a(S[8]),.b(C[6]),.c(PP[2][6]),.s(S[9]),.cout(C[9]));
fulladder
f11(.a(S[9]),.b(C[7]),.c(PP[3][4]),.s(S[16]),.cout(C[16]));
halfadder h5(.a(w3),.b(C[8]),.s(S[10]),.c(C[10]));
fulladder
f12(.a(S[10]),.b(C[9]),.c(PP[3][5]),.s(S[17]),.cout(C[17]));
halfadder h6(.a(w4),.b(PP[2][7]),.s(S[11]),.c(C[11]));
fulladder
f13(.a(S[11]),.b(C[10]),.c(PP[3][6]),.s(S[18]),.cout(C[18]));
halfadder h7(.a(w5),.b(C[11]),.s(S[19]),.c(C[19]));
halfadder h8(.a(w6),.b(PP[3][7]),.s(S[20]),.c(C[20]));
halfadder h9(.a(S[20]),.b(C[19]),.s(P[8]),.c(C[21]));
halfadder h10(.a(S[19]),.b(C[18]),.s(P[7]),.c(C[22]));
halfadder h11(.a(S[18]),.b(C[17]),.s(P[6]),.c(C[23]));
halfadder h12(.a(S[17]),.b(C[16]),.s(P[5]),.c(C[24]));
halfadder h13(.a(S[16]),.b(C[15]),.s(P[4]),.c(C[25]));
halfadder h14(.a(S[15]),.b(C[14]),.s(P[3]),.c(C[26]));
halfadder h15(.a(S[14]),.b(C[13]),.s(P[2]),.c(C[27]));
halfadder h16(.a(S[13]),.b(C[12]),.s(P[1]),.c(C[28]));
endmodule
//approximate carry
module approxcarrygen(T,a0,a1);
input [3:0]T;
output a0,a1;
wire w;
assign w=T[3]^T[2]^T[1];
assign a0=(T[3]*T[2])|(T[2]*T[1])|(T[3]*T[1]);
assign a1=(w*T[0])|w|T[0];
endmodule
//full adder
module fulladder (a,b,c,s,cout);
input a,b,c ;
output s,cout;
assign s = (a ^ b ^c) ;
assign cout = ((a^b)&c)| (a & b);
endmodule
//half adder
module halfadder(a,b,s,c);
input a,b ;
output s,c ;
assign s = a ^ b;
assign c = a & b ;
endmodule
VLSI DSP Assignment-1

Page:
12

R.No: 13MVD0096

Dt: 08-08-2014

Testbench :
module boothtest();
reg [9:0]y;
reg [9:0]x;
reg en;
wire [3:0]Xsel,twoXsel,NEG;
wire a0,a1;
wire [3:0]T;
wire [8:1]P;
boothencoder
p1(.T(T),.a0(a0),.a1(a1),.y(y),.x(x),.en(en),.Xsel(Xsel),.twoXse
l(twoXsel),.NEG(NEG),.P(P));
initial
begin
en=1'b0;
y=10'b0001011010;
x=10'b0001011010;
#10 en=1'b1;
y=10'b0011011010;
x=10'b0001011010;
#10 en=1'b1;
y=10'b0001011010;
x=10'b0001111010;
#100 $stop;
end
initial
begin
$monitor($time,"Xsel=%b,twoXsel=%b,NEG=%b,P=%b,x=%d,x=%d",Xsel,t
woXsel,NEG,P,x,y);
end
endmodule

VLSI DSP Assignment-1

Page:
13

R.No: 13MVD0096

Dt: 08-08-2014

Output result:

# PP[0][0]=1
# PP[0][1]=0
# PP[0][2]=1
# PP[0][3]=1
# PP[0][4]=0
# PP[0][5]=1
# PP[0][6]=0
# PP[0][7]=0
# PP[0][8]=0
# PP[1][0]=0
# PP[1][1]=1
# PP[1][2]=0
# PP[1][3]=0
# PP[1][4]=1
# PP[1][5]=0
# PP[1][6]=1
# PP[1][7]=1
# PP[1][8]=1
# PP[2][0]=0
# PP[2][1]=1
# PP[2][2]=0
# PP[2][3]=0
# PP[2][4]=1
# PP[2][5]=0
# PP[2][6]=1
# PP[2][7]=1
# PP[2][8]=1
# PP[3][0]=1
# PP[3][1]=0
# PP[3][2]=1
# PP[3][3]=1
# PP[3][4]=0
# PP[3][5]=1

0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0

VLSI DSP Assignment-1

Page:
14

R.No: 13MVD0096

Dt: 08-08-2014

# PP[3][6]=0
0
# PP[3][7]=0
0
# PP[3][8]=0
0
#
0Xsel=1111,twoXsel=0000,NEG=0110,P=11001110,x= 90,x= 90
# PP[0][0]=1
10
# PP[0][1]=0
10
# PP[0][2]=1
10
# PP[0][3]=1
10
# PP[0][4]=0
10
# PP[0][5]=1
10
# PP[0][6]=0
10
# PP[0][7]=0
10
# PP[0][8]=0
10
# PP[1][0]=0
10
# PP[1][1]=1
10
# PP[1][2]=0
10
# PP[1][3]=0
10
# PP[1][4]=1
10
# PP[1][5]=0
10
# PP[1][6]=1
10
# PP[1][7]=1
10
# PP[1][8]=1
10
# PP[2][0]=0
10
# PP[2][1]=1
10
# PP[2][2]=0
10
# PP[2][3]=0
10
# PP[2][4]=1
10
# PP[2][5]=0
10
# PP[2][6]=1
10
# PP[2][7]=1
10
# PP[2][8]=1
10
# PP[3][0]=0
10
# PP[3][1]=1
10
# PP[3][2]=0
10
# PP[3][3]=1
10
# PP[3][4]=1
10
# PP[3][5]=0
10
# PP[3][6]=1
10
# PP[3][7]=0
10
# PP[3][8]=0
10
#
10Xsel=0111,twoXsel=1000,NEG=0110,P=10010110,x= 90,x= 218
#
20Xsel=0111,twoXsel=1000,NEG=0110,P=10010110,x= 122,x= 90

VLSI DSP Assignment-1

Page:
15

R.No: 13MVD0096

Dt: 08-08-2014

Synthesis Report For Modified Booth Multiplier:Number of full adders =13


Number of half adders=16
Area:
area
============================================================
Generated by:
Encounter(R) RTL Compiler RC12.10 - v12.10p006_1
Generated on:
Aug 07 2014 06:42:12 pm
Module:
boothencoder
Technology library:
slow 1.1
Operating conditions:
slow (balanced_tree)
Wireload mode:
enclosed
Area mode:
timing library
============================================================
Instance
Cells Cell Area Net Area Total Area Wireload
------------------------------------------------------------------boothencoder
134
1348
0
1348
<none> (D)

power:
============================================================
Generated by:
Encounter(R) RTL Compiler RC12.10 - v12.10p006_1
Generated on:
Aug 07 2014 06:42:12 pm
Module:
boothencoder
Technology library:
slow 1.1
Operating conditions:
slow (balanced_tree)
Wireload mode:
enclosed
Area mode:
timing library
============================================================
Leakage
Dynamic
Total
Instance
Cells Power(nW) Power(nW) Power(nW)
------------------------------------------------boothencoder
134 2708.556 10090.260 12798.815
timing:
Timing slack :
858ps
Start-point : y[4]
End-point
: P[2]

VLSI DSP Assignment-1

Page:
16

R.No: 13MVD0096

Dt: 08-08-2014

2. Baugh-Wooley:
Verilog code :
module baughwooley8(p,a,x);
output[15:0] p;//p sum output
input [7:0]a;
input [7:0]x;
wire [54:0]carry1;
wire [43:2]sum;
assign p[0]=a[0]&x[0];
assign d=1'b0;
FA FA1(p[1],carry1[0],(a[0]&x[1]),(a[1]&x[0]),d);
FA FA2(sum[2],carry1[1],(a[1]&x[1]),(a[2]&x[0]),d);
FA FA3(sum[3],carry1[2],(a[2]&x[1]),(a[3]&x[0]),d);
FA FA4(sum[4],carry1[3],(a[3]&x[1]),(a[4]&x[0]),d);
FA FA5(sum[5],carry1[4],(a[4]&x[1]),(a[5]&x[0]),d);
FA FA6(sum[6],carry1[5],(a[5]&x[1]),(a[6]&x[0]),d);
FA FA7(sum[7],carry1[6],(a[6]&x[1]),(a[7]&x[0]),d);
FA FA8(sum[8],carry1[7],(a[7]&x[1]),a[6]&x[2],carry1[6]);
FA FA9(sum[9],carry1[8],(a[5]&x[2]),sum[7],carry1[5]);
FA FA10(sum[10],carry1[9],(a[4]&x[2]),sum[6],carry1[4]);
FA FA11(sum[11],carry1[10],(a[3]&x[2]),sum[5],carry1[3]);
FA FA12(sum[12],carry1[11],(a[2]&x[2]),sum[4],carry1[2]);
FA FA13(sum[13],carry1[12],(a[1]&x[2]),sum[3],carry1[1]);
FA FA14(p[2],carry1[13],(a[0]&x[2]),sum[2],carry1[0]);
FA FA15(p[3],carry1[14],(a[0]&x[3]),sum[13],carry1[13]);
FA FA16(sum[14],carry1[15],(a[1]&x[3]),sum[12],carry1[12]);
FA FA17(sum[15],carry1[16],(a[2]&x[3]),sum[11],carry1[11]);
FA FA18(sum[16],carry1[17],(a[3]&x[3]),sum[10],carry1[10]);
FA FA19(sum[17],carry1[18],(a[4]&x[3]),sum[9],carry1[9]);
FA FA20(sum[18],carry1[19],(a[5]&x[3]),sum[8],carry1[8]);
FA FA21(sum[19],carry1[20],(a[6]&x[3]),a[7]&x[2],carry1[7]);
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA
FA

FA22(sum[20],carry1[21],(a[6]&x[4]),(a[7]&x[3]),carry1[20]);
FA23(sum[21],carry1[22],(a[5]&x[4]),sum[19],carry1[19]);
FA24(sum[22],carry1[23],(a[4]&x[4]),sum[18],carry1[18]);
FA25(sum[23],carry1[24],(a[3]&x[4]),sum[17],carry1[17]);
FA26(sum[24],carry1[25],(a[2]&x[4]),sum[16],carry1[16]);
FA27(sum[25],carry1[26],(a[1]&x[4]),sum[15],carry1[15]);
FA28(p[4],carry1[27],(a[0]&x[4]),sum[14],carry1[14]);
FA29(p[5],carry1[28],(a[0]&x[5]),sum[25],carry1[27]);
FA30(sum[26],carry1[29],(a[1]&x[5]),sum[24],carry1[26]);
FA31(sum[27],carry1[30],(a[2]&x[5]),sum[23],carry1[25]);
FA32(sum[28],carry1[31],(a[3]&x[5]),sum[22],carry1[24]);
FA33(sum[29],carry1[32],(a[4]&x[5]),sum[21],carry1[23]);

VLSI DSP Assignment-1

Page:
17

R.No: 13MVD0096

Dt: 08-08-2014

FA FA34(sum[30],carry1[33],(a[5]&x[5]),sum[20],carry1[22]);
FA FA35(sum[31],carry1[34],(a[6]&x[5]),a[7]&x[4],carry1[21]);
FA FA36(sum[32],carry1[35],(a[6]&x[6]),a[7]&x[5],carry1[34]);
FA FA37(sum[33],carry1[36],(a[5]&x[6]),sum[31],carry1[33]);
FA FA38(sum[34],carry1[37],(a[4]&x[6]),sum[30],carry1[32]);
FA FA39(sum[35],carry1[38],(a[3]&x[6]),sum[29],carry1[31]);
FA FA40(sum[36],carry1[39],(a[2]&x[6]),sum[28],carry1[30]);
FA FA41(sum[37],carry1[40],(a[1]&x[6]),sum[27],carry1[29]);
FA FA42(p[6],carry1[41],(a[0]&x[6]),sum[26],carry1[28]);
FA FA43(p[7],carry1[42],(a[0]&x[7]),sum[37],carry1[41]);
FA FA44(sum[38],carry1[43],(a[1]&x[7]),sum[36],carry1[40]);
FA FA45(sum[39],carry1[44],(a[2]&x[7]),sum[35],carry1[39]);
FA FA46(sum[40],carry1[45],(a[3]&x[7]),sum[34],carry1[38]);
FA FA47(sum[41],carry1[46],(a[4]&x[7]),sum[33],carry1[37]);
FA FA48(sum[42],carry1[47],(a[5]&x[7]),sum[32],carry1[36]);
FA
FA49(sum[43],carry1[48],(a[6]&x[7]),a[7]&x[6],carry1[35]);
FA FA50(p[8],carry1[49],(a[7]&x[7]),carry1[48],d);
FA FA51(p[9],carry1[50],carry1[49],carry1[47],sum[43]);
FA FA52(p[10],carry1[51],carry1[46],carry1[50],sum[42]);
FA FA53(p[11],carry1[52],carry1[45],carry1[51],sum[41]);
FA FA54(p[12],carry1[53],carry1[44],carry1[52],sum[40]);
FA FA55(p[13],carry1[54],carry1[43],carry1[53],sum[39]);
FA FA56(p[14],p[15],carry1[54],carry1[42],sum[38]);
endmodule
//////////// full adder//////////////////
module FA(s,co,q,y,ci);
output s,co;
wire s,co;
input q,y,ci;
assign s=q^y^ci;
assign co=(q & y)|(y & ci)|(ci & q);
endmodule
Testbench :
module baughwooley8_tst();
wire[15:0] p;//p sum output
reg[7:0]a;
reg[7:0]x;
baughwooley8 bb1(p,a,x);
initial
begin
a= 8'd10;x=8'd5;
VLSI DSP Assignment-1

Page:
18

R.No: 13MVD0096

Dt: 08-08-2014

#2a=8'd12;x=8'd1;
#2a= 8'd7;x=8'd6;
#2a=8'd9;x=8'd2;
end
initial #20 $stop;
initial $monitor($time,"a=%d,x=%d,p=%d",a,p,x);
endmodule
Output result:

#
#
#
#

0a= 10,x=
2a= 12,x=
4a= 7,x=
6a= 9,x=

50,p= 5
12,p= 1
42,p= 6
18,p= 2

Synthesis Report For Baugh-Wooley:-

Number of full adders =56


Number of half adders=0
Power:

VLSI DSP Assignment-1

Page:
19

R.No: 13MVD0096

Dt: 08-08-2014

3. Carry Save Array Multiplier(16-bit):


Verilog code :
module composer_3_2(x,y,z,s,c);
input x,y,z;
output s,c;
wire s,c;
assign s=x^y^z;
assign c=(x&y)|(y&z)|(z&x);
endmodule
module composer_4_2(w,x,y,z,s,c1,c2);
inputw,x,y,z;
output s,c1,c2;
wire s,s1,c1,c2;
composer_3_2 q1(w,x,y,s1,c1);
composer_3_2 q2(s1,z,1'b0,s,c2);
endmodule
module composer_5_2(v,w,x,y,z,s,c1,c2);
input v,w,x,y,z;
output s,c1,c2;
wire s,c1,c2,s1;
composer_3_2 q3(v,w,x,s1,c1);
composer_3_2 q4(s1,y,z,s,c2);
endmodule
module adder(a,b,c,s,ca);
inputa,b,c;
outputs,ca;
wires,ca;
assign s=(a^b)^c;
assign ca=(a&b)|((a^b)&c);
endmodule
module
four_bit_adder(a0,a1,a2,a3,b0,b1,b2,b3,cin,s0,s1,s2,s3,cout);
input a0,a1,a2,a3,b0,b1,b2,b3,cin;
output s0,s1,s2,s3,cout;
wire s0,s1,s2,s3,cout,c0,c1,c2;
adder
adder
adder
adder

l1(a0,b0,cin,s0,c0);
l2(a1,b1,c0,s1,c1);
l3(a2,b2,c1,s2,c2);
l4(a3,b3,c2,s3,cout);

VLSI DSP Assignment-1

Page:
20

R.No: 13MVD0096

Dt: 08-08-2014

endmodule
module mux2_1(a,b,s,y);
input a,b,s;
output y;
reg y;
always@(a,b,s)
begin
if(s)
y<=b;
else
y<=a;
end
endmodule
module csa(a,b,m);
input [15:0]a,b;
output [31:0]m;
wire [31:0]m;
wire [255:0]p;
wire [83:0]s;
wire [211:0]c;
wire [28:0]d;
wire [14:0]cout;
wire [4:31]m1,m2;
wire [1:6]h;
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign

p[0]=a[0]&b[0];
p[1]=a[1]&b[0];
p[2]=a[2]&b[0];
p[3]=a[3]&b[0];
p[4]=a[4]&b[0];
p[5]=a[5]&b[0];
p[6]=a[6]&b[0];
p[7]=a[7]&b[0];
p[8]=a[8]&b[0];
p[9]=a[9]&b[0];
p[10]=a[10]&b[0];
p[11]=a[11]&b[0];
p[12]=a[12]&b[0];
p[13]=a[13]&b[0];
p[14]=a[14]&b[0];
p[15]=a[15]&b[0];
p[16]=a[0]&b[1];
p[17]=a[1]&b[1];

VLSI DSP Assignment-1

Page:
21

R.No: 13MVD0096

assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign

Dt: 08-08-2014

p[18]=a[2]&b[1];
p[19]=a[3]&b[1];
p[20]=a[4]&b[1];
p[21]=a[5]&b[1];
p[22]=a[6]&b[1];
p[23]=a[7]&b[1];
p[24]=a[8]&b[1];
p[25]=a[9]&b[1];
p[26]=a[10]&b[1];
p[27]=a[11]&b[1];
p[28]=a[12]&b[1];
p[29]=a[13]&b[1];
p[30]=a[14]&b[1];
p[31]=a[15]&b[1];
p[32]=a[0]&b[2];
p[33]=a[1]&b[2];
p[34]=a[2]&b[2];
p[35]=a[3]&b[2];
p[36]=a[4]&b[2];
p[37]=a[5]&b[2];
p[38]=a[6]&b[2];
p[39]=a[7]&b[2];
p[40]=a[8]&b[2];
p[41]=a[9]&b[2];
p[42]=a[10]&b[2];
p[43]=a[11]&b[2];
p[44]=a[12]&b[2];
p[45]=a[13]&b[2];
p[46]=a[14]&b[2];
p[47]=a[15]&b[2];
p[48]=a[0]&b[3];
p[49]=a[1]&b[3];
p[50]=a[2]&b[3];
p[51]=a[3]&b[3];
p[52]=a[4]&b[3];
p[53]=a[5]&b[3];
p[54]=a[6]&b[3];
p[55]=a[7]&b[3];
p[56]=a[8]&b[3];
p[57]=a[9]&b[3];
p[58]=a[10]&b[3];
p[59]=a[11]&b[3];
p[60]=a[12]&b[3];
p[61]=a[13]&b[3];
p[62]=a[14]&b[3];
p[63]=a[15]&b[3];

VLSI DSP Assignment-1

Page:
22

R.No: 13MVD0096

assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign

Dt: 08-08-2014

p[64]=a[0]&b[4];
p[65]=a[1]&b[4];
p[66]=a[2]&b[4];
p[67]=a[3]&b[4];
p[68]=a[4]&b[4];
p[69]=a[5]&b[4];
p[70]=a[6]&b[4];
p[71]=a[7]&b[4];
p[72]=a[8]&b[4];
p[73]=a[9]&b[4];
p[74]=a[10]&b[4];
p[75]=a[11]&b[4];
p[76]=a[12]&b[4];
p[77]=a[13]&b[4];
p[78]=a[14]&b[4];
p[79]=a[15]&b[4];
p[80]=a[0]&b[5];
p[81]=a[1]&b[5];
p[82]=a[2]&b[5];
p[83]=a[3]&b[5];
p[84]=a[4]&b[5];
p[85]=a[5]&b[5];
p[86]=a[6]&b[5];
p[87]=a[7]&b[5];
p[88]=a[8]&b[5];
p[89]=a[9]&b[5];
p[90]=a[10]&b[5];
p[91]=a[11]&b[5];
p[92]=a[12]&b[5];
p[93]=a[13]&b[5];
p[94]=a[14]&b[5];
p[95]=a[15]&b[5];
p[96]=a[0]&b[6];
p[97]=a[1]&b[6];
p[98]=a[2]&b[6];
p[99]=a[3]&b[6];
p[100]=a[4]&b[6];
p[101]=a[5]&b[6];
p[102]=a[6]&b[6];
p[103]=a[7]&b[6];
p[104]=a[8]&b[6];
p[105]=a[9]&b[6];
p[106]=a[10]&b[6];
p[107]=a[11]&b[6];
p[108]=a[12]&b[6];
p[109]=a[13]&b[6];

VLSI DSP Assignment-1

Page:
23

R.No: 13MVD0096

assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign

Dt: 08-08-2014

p[110]=a[14]&b[6];
p[111]=a[15]&b[6];
p[112]=a[0]&b[7];
p[113]=a[1]&b[7];
p[114]=a[2]&b[7];
p[115]=a[3]&b[7];
p[116]=a[4]&b[7];
p[117]=a[5]&b[7];
p[118]=a[6]&b[7];
p[119]=a[7]&b[7];
p[120]=a[8]&b[7];
p[121]=a[9]&b[7];
p[122]=a[10]&b[7];
p[123]=a[11]&b[7];
p[124]=a[12]&b[7];
p[125]=a[13]&b[7];
p[126]=a[14]&b[7];
p[127]=a[15]&b[7];
p[128]=a[0]&b[8];
p[129]=a[1]&b[8];
p[130]=a[2]&b[8];
p[131]=a[3]&b[8];
p[132]=a[4]&b[8];
p[133]=a[5]&b[8];
p[134]=a[6]&b[8];
p[135]=a[7]&b[8];
p[136]=a[8]&b[8];
p[137]=a[9]&b[8];
p[138]=a[10]&b[8];
p[139]=a[11]&b[8];
p[140]=a[12]&b[8];
p[141]=a[13]&b[8];
p[142]=a[14]&b[8];
p[143]=a[15]&b[8];
p[144]=a[0]&b[9];
p[145]=a[1]&b[9];
p[146]=a[2]&b[9];
p[147]=a[3]&b[9];
p[148]=a[4]&b[9];
p[149]=a[5]&b[9];
p[150]=a[6]&b[9];
p[151]=a[7]&b[9];
p[152]=a[8]&b[9];
p[153]=a[9]&b[9];
p[154]=a[10]&b[9];
p[155]=a[11]&b[9];

VLSI DSP Assignment-1

Page:
24

R.No: 13MVD0096

assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign

Dt: 08-08-2014

p[156]=a[12]&b[9];
p[157]=a[13]&b[9];
p[158]=a[14]&b[9];
p[159]=a[15]&b[9];
p[160]=a[0]&b[10];
p[161]=a[1]&b[10];
p[162]=a[2]&b[10];
p[163]=a[3]&b[10];
p[164]=a[4]&b[10];
p[165]=a[5]&b[10];
p[166]=a[6]&b[10];
p[167]=a[7]&b[10];
p[168]=a[8]&b[10];
p[169]=a[9]&b[10];
p[170]=a[10]&b[10];
p[171]=a[11]&b[10];
p[172]=a[12]&b[10];
p[173]=a[13]&b[10];
p[174]=a[14]&b[10];
p[175]=a[15]&b[10];
p[176]=a[0]&b[11];
p[177]=a[1]&b[11];
p[178]=a[2]&b[11];
p[179]=a[3]&b[11];
p[180]=a[4]&b[11];
p[181]=a[5]&b[11];
p[182]=a[6]&b[11];
p[183]=a[7]&b[11];
p[184]=a[8]&b[11];
p[185]=a[9]&b[11];
p[186]=a[10]&b[11];
p[187]=a[11]&b[11];
p[188]=a[12]&b[11];
p[189]=a[13]&b[11];
p[190]=a[14]&b[11];
p[191]=a[15]&b[11];
p[192]=a[0]&b[12];
p[193]=a[1]&b[12];
p[194]=a[2]&b[12];
p[195]=a[3]&b[12];
p[196]=a[4]&b[12];
p[197]=a[5]&b[12];
p[198]=a[6]&b[12];
p[199]=a[7]&b[12];
p[200]=a[8]&b[12];
p[201]=a[9]&b[12];

VLSI DSP Assignment-1

Page:
25

R.No: 13MVD0096

assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign
assign

Dt: 08-08-2014

p[202]=a[10]&b[12];
p[203]=a[11]&b[12];
p[204]=a[12]&b[12];
p[205]=a[13]&b[12];
p[206]=a[14]&b[12];
p[207]=a[15]&b[12];
p[208]=a[0]&b[13];
p[209]=a[1]&b[13];
p[210]=a[2]&b[13];
p[211]=a[3]&b[13];
p[212]=a[4]&b[13];
p[213]=a[5]&b[13];
p[214]=a[6]&b[13];
p[215]=a[7]&b[13];
p[216]=a[8]&b[13];
p[217]=a[9]&b[13];
p[218]=a[10]&b[13];
p[219]=a[11]&b[13];
p[220]=a[12]&b[13];
p[221]=a[13]&b[13];
p[222]=a[14]&b[13];
p[223]=a[15]&b[13];
p[224]=a[0]&b[14];
p[225]=a[1]&b[14];
p[226]=a[2]&b[14];
p[227]=a[3]&b[14];
p[228]=a[4]&b[14];
p[229]=a[5]&b[14];
p[230]=a[6]&b[14];
p[231]=a[7]&b[14];
p[232]=a[8]&b[14];
p[233]=a[9]&b[14];
p[234]=a[10]&b[14];
p[235]=a[11]&b[14];
p[236]=a[12]&b[14];
p[237]=a[13]&b[14];
p[238]=a[14]&b[14];
p[239]=a[15]&b[14];
p[240]=a[0]&b[15];
p[241]=a[1]&b[15];
p[242]=a[2]&b[15];
p[243]=a[3]&b[15];
p[244]=a[4]&b[15];
p[245]=a[5]&b[15];
p[246]=a[6]&b[15];
p[247]=a[7]&b[15];

VLSI DSP Assignment-1

Page:
26

R.No: 13MVD0096

assign
assign
assign
assign
assign
assign
assign
assign

Dt: 08-08-2014

p[248]=a[8]&b[15];
p[249]=a[9]&b[15];
p[250]=a[10]&b[15];
p[251]=a[11]&b[15];
p[252]=a[12]&b[15];
p[253]=a[13]&b[15];
p[254]=a[14]&b[15];
p[255]=a[15]&b[15];

composer_3_2 q5(p[2],p[17],1'b0,d[1],c[1]);
composer_4_2 q6(p[3],p[18],p[33],c[1],d[2],c[2],c[3]);
composer_4_2 q7(p[4],p[19],c[2],c[3],s[0],c[4],c[5]);
composer_3_2 q8(p[34],p[49],s[0],d[3],c[6]);
composer_5_2 q9(p[5],p[20],c[4],c[5],c[6],s[1],c[7],c[8]);
composer_4_2 q10(p[35],p[50],p[65],s[1],d[4],c[9],c[10]);
composer_4_2 q11(c[7],c[8],c[9],c[10],s[2],c[11],c[12]);
composer_4_2 q12(p[6],p[21],p[36],s[2],s[3],c[13],c[14]);
composer_4_2 q13(p[51],p[66],p[81],s[3],d[5],c[15],c[16]);
composer_5_2
q14(c[12],c[13],c[14],c[15],c[16],s[4],c[17],c[18]);
composer_5_2
q15(p[7],p[22],p[37],s[4],c[11],s[5],c[19],c[20]);
composer_5_2
q16(p[52],p[67],p[82],p[97],s[5],d[6],c[21],c[22]);
composer_5_2
q17(c[18],c[19],c[20],c[21],c[22],s[6],c[23],c[24]);
composer_5_2
q18(p[8],p[23],p[38],s[6],c[17],s[7],c[25],c[26]);
composer_4_2 q19(p[53],p[68],p[83],s[7],s[8],c[27],c[28]);
composer_3_2 q20(p[98],p[113],s[8],d[7],c[29]);
composer_5_2
q21(c[25],c[26],c[27],c[28],c[29],s[9],c[30],c[31]);
composer_5_2
q22(p[9],p[24],s[9],c[23],c[24],s[10],c[32],c[33]);
composer_5_2
q23(p[39],p[54],p[69],p[84],s[10],s[11],c[34],c[35]);
composer_4_2 q24(p[99],p[114],p[129],s[11],d[8],c[36],c[37]);

VLSI DSP Assignment-1

Page:
27

R.No: 13MVD0096

Dt: 08-08-2014

composer_5_2
q25(c[33],c[34],c[35],c[36],c[37],s[12],c[38],c[39]);
composer_5_2
q26(p[10],s[12],c[30],c[31],c[32],s[13],c[40],c[41]);
composer_5_2
q27(p[25],p[40],p[55],p[70],s[13],s[14],c[42],c[43]);
composer_4_2 q28(p[85],p[100],p[115],s[14],s[15],c[44],c[45]);
composer_3_2 q29(p[130],p[145],s[15],d[9],c[46]);
composer_5_2
q30(c[42],c[43],c[44],c[45],c[46],s[16],c[47],c[48]);
composer_5_2
q31(c[38],c[39],c[40],c[41],s[16],s[17],c[49],c[50]);
composer_5_2
q32(p[11],p[26],p[41],p[56],s[17],s[18],c[51],c[52]);
composer_5_2
q33(p[71],p[86],p[101],p[116],s[18],s[19],c[53],c[54]);
composer_4_2
q34(p[131],p[146],p[161],s[19],d[10],c[55],c[56]);
composer_5_2
q35(c[47],c[48],c[49],c[50],c[51],s[20],c[57],c[58]);
composer_5_2
q36(c[52],c[53],c[54],c[55],s[20],s[21],c[59],c[60]);
composer_5_2
q37(p[12],p[27],p[42],c[56],s[21],s[22],c[61],c[62]);
composer_5_2
q38(p[57],p[72],p[87],p[102],s[22],s[23],c[63],c[64]);
composer_4_2
q39(p[117],p[132],p[147],s[23],s[24],c[65],c[66]);
composer_3_2 q40(p[162],p[177],s[24],d[11],c[67]);
composer_5_2
q41(c[57],c[58],c[59],c[60],c[61],s[25],c[68],c[69]);
composer_5_2
q42(c[62],c[63],c[64],c[65],s[25],s[26],c[70],c[71]);
composer_5_2
q43(p[13],p[28],c[66],c[67],s[26],s[27],c[72],c[73]);
composer_5_2
q44(p[43],p[58],p[73],p[88],s[27],s[28],c[74],c[75]);
composer_5_2
q45(p[103],p[118],p[133],p[148],s[28],s[29],c[76],c[77]);
composer_4_2
q46(p[163],p[178],p[193],s[29],d[12],c[78],c[79]);

VLSI DSP Assignment-1

Page:
28

R.No: 13MVD0096

Dt: 08-08-2014

composer_5_2
q47(c[68],c[69],c[70],c[71],c[72],s[30],c[80],c[81]);
composer_5_2
q48(c[73],c[74],c[75],c[76],s[30],s[31],c[82],c[83]);
composer_5_2
q49(p[14],c[77],c[78],c[79],s[31],s[32],c[84],c[85]);
composer_5_2
q50(p[29],p[44],p[59],p[74],s[32],s[33],c[86],c[87]);
composer_5_2
q51(p[89],p[104],p[119],p[134],s[33],s[34],c[88],c[89]);
composer_4_2
q52(p[149],p[164],p[179],s[34],s[35],c[90],c[91]);
composer_3_2 q53(p[194],p[209],s[35],d[13],c[92]);
composer_5_2
q54(c[80],c[81],c[82],c[83],c[84],s[36],c[93],c[94]);
composer_5_2
q55(c[85],c[86],c[87],c[88],s[36],s[37],c[95],c[96]);
composer_5_2
q56(c[89],c[90],c[91],c[92],s[37],s[38],c[97],c[98]);
composer_5_2
q57(p[15],p[30],p[45],p[60],s[38],s[39],c[99],c[100]);
composer_5_2
q58(p[75],p[90],p[105],p[120],s[39],s[40],c[101],c[102]);
composer_5_2
q59(p[135],p[150],p[165],p[180],s[40],s[41],c[103],c[104]);
composer_4_2
q60(p[195],p[210],p[225],s[41],d[14],c[105],c[106]);
composer_5_2
q61(c[93],c[94],c[95],c[96],c[97],s[42],c[107],c[108]);
composer_5_2
q62(c[98],c[99],c[100],c[101],s[42],s[43],c[109],c[110]);
composer_5_2
q63(c[102],c[103],c[104],c[105],s[43],s[44],c[111],c[112]);
composer_5_2
q64(p[31],p[46],p[61],c[106],s[44],s[45],c[113],c[114]);
composer_5_2
q65(p[76],p[91],p[106],p[121],s[45],s[46],c[115],c[116]);
composer_5_2
q66(p[136],p[151],p[166],p[181],s[46],s[47],c[117],c[118]);
composer_4_2
q67(p[196],p[211],p[226],s[47],d[15],c[119],c[120]);
composer_5_2
q68(c[107],c[108],c[109],c[110],c[111],s[48],c[121],c[122]);
VLSI DSP Assignment-1

Page:
29

R.No: 13MVD0096

Dt: 08-08-2014

composer_5_2
q69(c[112],c[113],c[114],c[115],s[48],s[49],c[123],c[124]);
composer_5_2
q70(c[116],c[117],c[118],c[119],s[49],s[50],c[125],c[126]);
composer_5_2
q71(p[47],p[62],p[77],c[120],s[50],s[51],c[127],c[128]);
composer_5_2
q72(p[92],p[107],p[122],p[137],s[51],s[52],c[129],c[130]);
composer_5_2
q73(p[152],p[167],p[182],p[197],s[52],s[53],c[131],c[132]);
composer_3_2 q74(p[212],p[227],s[53],d[16],c[133]);
composer_5_2
q75(c[121],c[122],c[123],c[124],c[125],s[54],c[134],c[135]);
composer_5_2
q76(c[126],c[127],c[128],c[129],s[54],s[55],c[136],c[137]);
composer_5_2
q77(c[130],c[131],c[132],c[133],s[55],s[56],c[138],c[139]);
composer_5_2
q78(p[63],p[78],p[93],p[108],s[56],s[57],c[140],c[141]);
composer_5_2
q79(p[123],p[138],p[153],p[168],s[57],s[58],c[142],c[143]);
composer_5_2
q80(p[183],p[198],p[213],p[228],s[58],d[17],c[144],c[145]);
composer_5_2
q81(c[134],c[135],c[136],c[137],c[138],s[59],c[146],c[147]);
composer_5_2
q82(c[139],c[140],c[141],c[142],s[59],s[60],c[148],c[149]);
composer_5_2
q83(p[79],c[143],c[144],c[145],s[60],s[61],c[150],c[151]);
composer_5_2
q84(p[94],p[109],p[124],p[139],s[61],s[62],c[152],c[153]);
composer_5_2
q85(p[154],p[169],p[184],p[199],s[62],s[63],c[154],c[155]);
composer_3_2 q86(p[214],p[229],s[63],d[18],c[156]);
composer_5_2
q87(c[146],c[147],c[148],c[149],c[150],s[64],c[157],c[158]);
composer_5_2
q88(c[151],c[152],c[153],c[154],s[64],s[65],c[159],c[160]);
composer_5_2
q89(p[95],p[110],c[155],c[156],s[65],s[66],c[161],c[162]);
composer_5_2
q90(p[125],p[140],p[155],p[170],s[66],s[67],c[163],c[164]);

VLSI DSP Assignment-1

Page:
30

R.No: 13MVD0096

Dt: 08-08-2014

composer_5_2
q91(p[185],p[200],p[215],p[230],s[67],d[19],c[165],c[166]);
composer_5_2
q92(c[157],c[158],c[159],c[160],c[161],s[68],c[167],c[168]);
composer_5_2
q93(c[162],c[163],c[164],c[165],s[68],s[69],c[169],c[170]);
composer_5_2
q94(p[111],p[126],p[141],c[166],s[69],s[70],c[171],c[172]);
composer_5_2
q95(p[156],p[171],p[186],p[201],s[70],s[71],c[173],c[174]);
composer_3_2 q96(p[216],p[231],s[71],d[20],c[175]);
composer_5_2
q97(c[167],c[168],c[169],c[170],c[171],s[72],c[176],c[177]);
composer_5_2
q98(c[172],c[173],c[174],c[175],s[72],s[73],c[178],c[179]);
composer_5_2
q99(p[127],p[142],p[157],p[172],s[73],s[74],c[180],c[181]);
composer_5_2
q100(p[187],p[202],p[217],p[232],s[74],d[21],c[182],c[183]);
composer_5_2
q101(c[176],c[177],c[178],c[179],c[180],s[75],c[184],c[185]);
composer_5_2
q102(c[181],c[182],c[183],p[143],s[75],s[76],c[186],c[187]);
composer_5_2
q103(p[158],p[173],p[188],p[203],s[76],s[77],c[188],c[189]);
composer_3_2 q104(p[218],p[233],s[77],d[22],c[190]);
composer_5_2
q105(c[184],c[185],c[186],c[187],c[188],s[78],c[191],c[192]);
composer_5_2
q106(c[189],c[190],p[159],p[174],s[78],s[79],c[193],c[194]);
composer_5_2
q107(p[189],p[204],p[219],p[234],s[79],d[23],c[195],c[196]);
composer_5_2
q108(c[191],c[192],c[193],c[194],c[195],s[80],c[197],c[198]);
composer_5_2
q109(c[196],p[175],p[190],p[205],s[80],s[81],c[199],c[200]);
composer_3_2 q110(p[220],p[235],s[81],d[24],c[201]);
composer_5_2
q111(c[197],c[198],c[199],c[200],c[201],s[82],c[202],c[203]);
composer_5_2
q112(p[191],p[206],p[221],p[236],s[82],d[25],c[204],c[205]);

VLSI DSP Assignment-1

Page:
31

R.No: 13MVD0096

Dt: 08-08-2014

composer_5_2
q113(c[202],c[203],c[204],c[205],p[207],s[83],c[206],c[207]);
composer_3_2 q114(p[222],p[237],s[83],d[26],c[208]);
composer_5_2
q115(c[206],c[207],c[208],p[223],p[238],d[27],c[209],c[210]);
composer_3_2 q116(p[239],c[209],c[210],d[28],c[211]);
four_bit_adder
q117(p[0],p[1],p[32],p[48],1'b0,p[16],d[1],d[2],1'b0,m[0],m[1],m
[2],m[3],cout[0]);
four_bit_adder
q118(p[64],p[80],p[96],p[112],d[3],d[4],d[5],d[6],1'b0,m1[4],m1[
5],m1[6],m1[7],cout[1]);
four_bit_adder
q119(p[64],p[80],p[96],p[112],d[3],d[4],d[5],d[6],1'b1,m2[4],m2[
5],m2[6],m2[7],cout[2]);
mux2_1
mux2_1
mux2_1
mux2_1
mux2_1

q132(m1[4],m2[4],cout[0],m[4]);
q133(m1[5],m2[5],cout[0],m[5]);
q134(m1[6],m2[6],cout[0],m[6]);
q135(m1[7],m2[7],cout[0],m[7]);
q160(cout[1],cout[2],cout[0],h[1]);

four_bit_adder
q120(p[128],p[144],p[160],p[176],d[7],d[8],d[9],d[10],1'b0,m1[8]
,m1[9],m1[10],m1[11],cout[3]);
four_bit_adder
q121(p[128],p[144],p[160],p[176],d[7],d[8],d[9],d[10],1'b1,m2[8]
,m2[9],m2[10],m2[11],cout[4]);
mux2_1
mux2_1
mux2_1
mux2_1
mux2_1

q136(m1[8],m2[8],h[1],m[8]);
q137(m1[9],m2[9],h[1],m[9]);
q138(m1[10],m2[10],h[1],m[10]);
q139(m1[11],m2[11],h[1],m[11]);
q161(cout[3],cout[4],h[1],h[2]);

four_bit_adder
q122(p[192],p[208],p[224],p[240],d[11],d[12],d[13],d[14],1'b0,m1
[12],m1[13],m1[14],m1[15],cout[5]);
four_bit_adder
q123(p[192],p[208],p[224],p[240],d[11],d[12],d[13],d[14],1'b1,m2
[12],m2[13],m2[14],m2[15],cout[6]);

VLSI DSP Assignment-1

Page:
32

R.No: 13MVD0096

mux2_1
mux2_1
mux2_1
mux2_1
mux2_1

Dt: 08-08-2014

q140(m1[12],m2[12],h[2],m[12]);
q141(m1[13],m2[13],h[2],m[13]);
q142(m1[14],m2[14],h[2],m[14]);
q143(m1[15],m2[15],h[2],m[15]);
q162(cout[5],cout[6],h[2],h[3]);

four_bit_adder
q124(p[241],p[242],p[243],p[244],d[15],d[16],d[17],d[18],1'b0,m1
[16],m1[17],m1[18],m1[19],cout[7]);
four_bit_adder
q125(p[241],p[242],p[243],p[244],d[15],d[16],d[17],d[18],1'b1,m2
[16],m2[17],m2[18],m2[19],cout[8]);
mux2_1
mux2_1
mux2_1
mux2_1
mux2_1

q144(m1[16],m2[16],h[3],m[16]);
q145(m1[17],m2[17],h[3],m[17]);
q146(m1[18],m2[18],h[3],m[18]);
q147(m1[19],m2[19],h[3],m[19]);
q163(cout[7],cout[8],h[3],h[4]);

four_bit_adder
q126(p[245],p[246],p[247],p[248],d[19],d[20],d[21],d[22],1'b0,m1
[20],m1[21],m1[22],m1[23],cout[9]);
four_bit_adder
q127(p[245],p[246],p[247],p[248],d[19],d[20],d[21],d[22],1'b1,m2
[20],m2[21],m2[22],m2[23],cout[10]);
mux2_1
mux2_1
mux2_1
mux2_1
mux2_1

q148(m1[20],m2[20],h[4],m[20]);
q149(m1[21],m2[21],h[4],m[21]);
q150(m1[22],m2[22],h[4],m[22]);
q151(m1[23],m2[23],h[4],m[23]);
q164(cout[9],cout[10],h[4],h[5]);

four_bit_adder
q128(p[249],p[250],p[251],p[252],d[23],d[24],d[25],d[26],1'b0,m1
[24],m1[25],m1[26],m1[27],cout[11]);
four_bit_adder
q129(p[249],p[250],p[251],p[252],d[23],d[24],d[25],d[26],1'b1,m2
[24],m2[25],m2[26],m2[27],cout[12]);
mux2_1
mux2_1
mux2_1
mux2_1
mux2_1

q152(m1[24],m2[24],h[5],m[24]);
q153(m1[25],m2[25],h[5],m[25]);
q154(m1[26],m2[26],h[5],m[26]);
q155(m1[27],m2[27],h[5],m[27]);
q165(cout[11],cout[12],h[5],h[6]);

VLSI DSP Assignment-1

Page:
33

R.No: 13MVD0096

Dt: 08-08-2014

four_bit_adder
q130(p[253],p[254],p[255],1'b0,d[27],d[28],c[211],1'b0,1'b0,m1[2
8],m1[29],m1[30],m1[31],cout[13]);
four_bit_adder
q131(p[253],p[254],p[255],1'b0,d[27],d[28],c[211],1'b0,1'b1,m2[2
8],m2[29],m2[30],m2[31],cout[14]);
mux2_1 q156(m1[28],m2[28],h[6],m[28]);
mux2_1 q157(m1[29],m2[29],h[6],m[29]);
mux2_1 q158(m1[30],m2[30],h[6],m[30]);
mux2_1 q159(m1[31],m2[31],h[6],m[31]);
endmodule
TEST BENCH:
module csa_test( );
reg [15:0]a,b;
wire [31:0]m;
csa q160(a,b,m);
initial
begin
$dumpfile("csa.vcd");
$dumpvars;
end
initial
begin
a=16'b0111_1111_1111_1111;b=16'b0111_1111_1111_1111;
#50 $stop;
end
initial
$monitor ("a=%d,b=%d,m=%d",a,b,m);
endmodule
Output result:

# a=32767,b=32767,m=1073676289

VLSI DSP Assignment-1

Page:
34

R.No: 13MVD0096

Dt: 08-08-2014

Synthesis Report Carry save Multiplier:-

Number of half adders =16x8=128


Area:
For 8-bits area is reduced proportionally half

Power:
For 8-bits power reduced to nearly half proportionally:

VLSI DSP Assignment-1

Page:
35

R.No: 13MVD0096

Dt: 08-08-2014

4. Carry ripple Array Multiplier:


Verilog code :
module mulcr(output reg [15:0] product, input [7:0] x, y, input
clock);
reg p [7:0][7:0];
wire [55:0] s ,c ;
integer i,j;
always @(y, x)
begin
for ( i = 0; i<= 7; i = i + 1)
for ( j = 0; j <= 7; j = j + 1)
p[j][i] <= x[j] & y[i];
end
HA ha_11 ( .sum(s[0]), .carry(c[0]), .a(p[1][0]), .b( p[0][1]));
//P1
FA fa_21 ( .sum(s[1]), .carry(c[1]), .a(p[2][0]), .b( p[1][1]),
.cin( (c[0]) ) );
HA ha_21 ( .sum(s[2]), .carry(c[2]), .a(p[0][2]), .b( s[1]));
FA fa_31 ( .sum(s[3]), .carry(c[3]), .a(p[3][0]), .b( p[2][1]),
.cin( c[1]) );
FA fa_32 ( .sum(s[4]), .carry(c[4]), .a(p[1][2]), .b( s[3]),
.cin( c[2]) );
HA ha_31 ( .sum(s[5]), .carry(c[5]), .a(p[0][3]), .b( s[4]));
FA fa_41 ( .sum(s[6]), .carry(c[6]), .a(p[4][0]), .b( p[3][1]),
.cin( c[3]) );
FA fa_42 ( .sum(s[7]), .carry(c[7]), .a(p[2][2]), .b(s[6]),
.cin( c[4]) );
FA fa_43 ( .sum(s[8]), .carry(c[8]), .a(p[1][3]), .b(s[7]),
.cin( c[5]) );
HA ha_41 ( .sum(s[9]), .carry(c[9]), .a(p[0][4]), .b( s[8]));
FA fa_51 ( .sum(s[10]), .carry(c[10]), .a(p[5][0]), .b(
p[4][1]), .cin( c[6]) );
FA fa_52 ( .sum(s[11]), .carry(c[11]), .a(p[3][2]), .b( s[10]),
.cin( c[7]) );
FA fa_53 ( .sum(s[12]), .carry(c[12]), .a(p[2][3]), .b( s[11]),
.cin( c[8]) );
FA fa_54 ( .sum(s[13]), .carry(c[13]), .a(p[1][4]), .b( s[12]),
.cin( c[9]) );
HA ha_55 ( .sum(s[14]), .carry(c[14]), .a(p[0][4]), .b(
s[13]));
FA fa_61 ( .sum(s[15]), .carry(c[15]), .a(p[6][0]), .b(
p[5][1]), .cin( c[10]) );

VLSI DSP Assignment-1

Page:
36

R.No: 13MVD0096

Dt: 08-08-2014

FA fa_62 ( .sum(s[16]), .carry(c[16]),


.cin( c[11]) );
FA fa_63 ( .sum(s[17]), .carry(c[17]),
.cin( c[12]) );
FA fa_64 ( .sum(s[18]), .carry(c[18]),
.cin( c[13]) );
HA ha_61 ( .sum(s[19]), .carry(c[19]),
HA ha_42 ( .sum(s[20]), .carry(c[20]),
FA fa_71 ( .sum(s[21]), .carry(c[21]),
p[6][1]), .cin( c[15]) );
FA fa_72 ( .sum(s[22]), .carry(c[22]),
.cin( c[16]) );
FA fa_73 ( .sum(s[23]), .carry(c[23]),
.cin( c[17]) );
FA fa_74 ( .sum(s[24]), .carry(c[24]),
.cin( c[18]) );
FA fa_75 ( .sum(s[25]), .carry(c[25]),
.cin( c[19]) );
FA fa_76 ( .sum(s[26]), .carry(c[26]),
.cin( c[20]) );
HA ha_71 ( .sum(s[27]), .carry(c[27]),
FA fa_81 ( .sum(s[28]), .carry(c[28]),
p[6][2]), .cin( c[21]) );
FA fa_82 ( .sum(s[29]), .carry(c[29]),
.cin( c[22]) );
FA fa_83 ( .sum(s[30]), .carry(c[30]),
.cin( c[23]) );
FA fa_84 ( .sum(s[31]), .carry(c[31]),
.cin( c[24]) );
FA fa_85 ( .sum(s[32]), .carry(c[32]),
.cin( c[25]) );
FA fa_86 ( .sum(s[33]), .carry(c[33]),
.cin( c[26]) );
HA ha_81 ( .sum(s[34]), .carry(c[34]),
FA fa_91 ( .sum(s[35]), .carry(c[35]),
p[6][3]), .cin( c[28]) );
FA fa_92 ( .sum(s[36]), .carry(c[36]),
.cin( c[29]) );
FA fa_93 ( .sum(s[37]), .carry(c[37]),
.cin( c[30]) );
FA fa_94 ( .sum(s[38]), .carry(c[38]),
.cin( c[31]) );
FA fa_95 ( .sum(s[39]), .carry(c[39]),
.cin( c[32]) );
FA fa_96 ( .sum(s[40]), .carry(c[40]),
.cin( c[34]) );
VLSI DSP Assignment-1

.a(p[4][2]), .b( s[15]),


.a(p[3][3]), .b( s[16]),
.a(p[2][4]), .b( s[17]),
.a(p[1][5]), .b( s[18]));
.a(p[0][6]), .b( s[19]));
.a(p[7][0]), .b(
.a(p[5][2]), .b( s[21]),
.a(p[4][3]), .b( s[22]),
.a(p[3][4]), .b( s[23]),
.a(p[2][5]), .b( s[24]),
.a(p[1][6]), .b( s[25]),
.a(p[0][7]), .b( s[26]));
.a(p[7][1]), .b(
.a(p[5][3]), .b( s[28]),
.a(p[4][4]), .b( s[29]),
.a(p[3][5]), .b( s[30]),
.a(p[2][6]), .b( s[31]),
.a(p[1][7]), .b( s[32]),
.a(s[33]), .b( c[27]));
.a(p[7][2]), .b(
.a(p[5][4]), .b( s[35]),
.a(p[4][5]), .b( s[36]),
.a(p[3][6]), .b( s[37]),
.a(p[2][7]), .b( s[38]),
.a(s[39]), .b( c[33]),

Page:
37

R.No: 13MVD0096

Dt: 08-08-2014

FA fa_101 ( .sum(s[41]), .carry(c[41]), .a(p[7][3]), .b(


p[6][4]), .cin( c[35]) );
FA fa_102 ( .sum(s[42]), .carry(c[42]), .a(p[5][5]), .b( s[41]),
.cin( c[36]) );
FA fa_103 ( .sum(s[43]), .carry(c[43]), .a(p[4][6]), .b( s[42]),
.cin( c[37]) );
FA fa_104 ( .sum(s[44]), .carry(c[44]), .a(p[3][7]), .b( s[43]),
.cin( c[38]) );
FA fa_105 ( .sum(s[45]), .carry(c[45]), .a(s[44]), .b( c[39]),
.cin( c[40]) );
FA fa_111 ( .sum(s[46]), .carry(c[46]), .a(p[7][4]), .b(
p[6][5]), .cin( c[41]) );
FA fa_112 ( .sum(s[47]), .carry(c[47]), .a(p[5][6]), .b( s[46]),
.cin( c[42]) );
FA fa_113 ( .sum(s[48]), .carry(c[48]), .a(p[4][7]), .b( s[47]),
.cin( c[43]) );
FA fa_114 ( .sum(s[49]), .carry(c[49]), .a(s[48]), .b( c[44]),
.cin( c[45]) );
FA fa_121 ( .sum(s[50]), .carry(c[50]), .a(p[7][5]), .b(
p[6][6]), .cin( c[46]) );
FA fa_122 ( .sum(s[51]), .carry(c[51]), .a(p[5][7]), .b(s[50]),
.cin( c[47]) );
FA fa_123 ( .sum(s[52]), .carry(c[52]), .a(s[51]), .b(c[48]),
.cin( c[49]) );
FA fa_131 ( .sum(s[53]), .carry(c[53]), .a(p[7][6]), .b(
p[6][7]), .cin( c[50]) );
FA fa_132 ( .sum(s[54]), .carry(c[54]), .a(s[53]), .b(c[51]),
.cin( c[52]) );
FA fa_141 ( .sum(s[55]), .carry(c[55]), .a(p[7][7]), .b(c[53]),
.cin( c[54]) );
always@(posedge clock)
begin
product <=
{c[55],s[55],s[54],s[52],s[49],s[45],s[40],s[34],s[27],s[20],s[1
4],s[9],s[5],s[2],s[0],p[0][0]};
end
endmodule
//full adder
module FA (sum,carry,a,b,cin);
input a,b,cin ;
output sum,carry;
assign sum = (a ^ b ^cin) ;
assign carry = ((a^b)&cin)| (a & b);
endmodule
//half adder
VLSI DSP Assignment-1

Page:
38

R.No: 13MVD0096

Dt: 08-08-2014

module HA(a,b,sum,carry);
inputa,b ;
outputsum,carry ;
assign sum = a ^ b;
assign carry = a & b ;
endmodule

Test bench:
module mulcr_tst();
reg [7:0] x,y;
regclk;
wire [15:0] product;
mulcr m1(product,x,y,clk);
initial
begin
$dumpfile("mulcr.vcd");
$dumpvars;
end
initial
begin
clk=1'b0;
x=8'b0;
y=8'b0;
end
always #5 clk= ~clk;
initial
begin
#12; x=8'b10001000; y=8'b00010001;
#10; x=8'b01101100; y=8'b10100100;
#10;
$stop;
end
$monitor(x=%d,y=%d,product=%d,x,y,product);
endmodule
Output result:

VLSI DSP Assignment-1

Page:
39

R.No: 13MVD0096

#
#
#
#
#
#

Dt: 08-08-2014

0x= 0,y= 0,product= x


5x= 0,y= 0,product= 0
12x=136,y= 17,product= 0
15x=136,y= 17,product= 2312
22x=108,y=164,product= 2312
25x=108,y=164,product=17712

Synthesis Report Carry Ripple Multiplier:Number of full adders =47


Number of half adders=9
Area:

Power:

VLSI DSP Assignment-1

Page:
40

R.No: 13MVD0096

Dt: 08-08-2014

VLSI DSP Assignment-1

Page:
41

You might also like