You are on page 1of 2

module full_add(a,b,cin,sum,cout);

input [3:0]a,b;
input cin;
output [3:0] sum;
output cout;
assign {cout,sum}=a+b+cin;
endmodule
module mux2(a,b,s,y);
input [3:0]a,b;
input s;
output [3:0]y;
assign y=s?b:a;
endmodule
module mux1(a,b,s,y);
input a,b;
input s;
output y;
assign y=s?b:a;
endmodule
module uniform_add(a,b,cin,sum,cout);
input [11:0]a,b;
input cin;
output [11:0]sum;
output cout;
wire [3:0]s0,s1,s2,s3,s4,s5;
wire c0,c1,c2,c3,c4,c5,cm0,cm1;
full_add add1(a[3:0],b[3:0],0,s0,c0);
full_add add2(a[3:0],b[3:0],1,s1,c1);
full_add add3(a[7:4],b[7:4],0,s2,c2);
full_add add4(a[7:4],b[7:4],1,s3,c3);
full_add add5(a[11:8],b[11:8],0,s4,c4);
full_add add6(a[11:8],b[11:8],1,s5,c5);

mux1
mux2
mux1
mux2
mux1
mux2

m1(c0,c1,cin,cm0);
m2(s0,s1,cin,sum[3:0]);
m3(c2,c3,cm0,cm1);
m4(s2,s3,cm0,sum[7:4]);
m5(c4,c5,cm1,cout);
m6(s4,s5,cm1,sum[11:8]);

endmodule
module stimulus;
reg [11:0]a,b;
reg cin;
wire [11:0]sum;
wire cout;
uniform_add stim(a,b,cin,sum,cout);
initial

begin
cin=0;a=4095;b=4095;
#5 cin=1;a=4095;b=4095;
end
initial
begin
$monitor($time,"cin=%d a=%d b=%d sum=%d",cin,a,b,{cout,sum});
end
endmodule

You might also like