//ahad mahmudi تمرين جمع کننده کامل
//عبدالاحد محمودي
module mu(out1,s,a,b);
input a,b,s;
output out1;
assign out1= s?a:b;
endmodule
module fa(c,s,q1,q2,cin);
output c,s;
input q1,q2,cin;
mu mux1(c,cin,q1&q2,q1|q2);
mu mux2(s,cin,q1^q2,q1~^q2);
endmodule
module fulladder(c,s,a,b);
output [3:0]c;
output [3:0]s;
input [3:0]a,b;
reg cin=1'b0;
fa fa1(c[0],s[0],a[0],b[0],cin);
fa fa2(c[1],s[1],a[1],b[1],c[0]);
fa fa3(c[2],s[2],a[2],b[2],c[1]);
fa fa4(c[3],s[3],a[3],b[3],c[2]);
endmodule
module test;
reg [3:0]a;
reg [3:0]b;
wire [3:0]sum,cout;
fulladder fulladder1(sum,cout,a,b);
initial begin
#1 a<=4'b0011;
#1 b<=4'b0001;
#10 $display("\tA=%d\tB=%d\tSum=%d\tcout=%b",a,b,sum,c out);
end
endmodule