module halfadder(input A,B,
output S,C
);
xor(S,A,B);
and(C,A,B);
endmodule
module fulladder(input A,B,Ci,
output Sum,Co
);
wire S1,D1,D2;
halfadder HA1(.B(B),.A(A),.S(S1),.C(D1));
halfadder HA2(.B(Ci),.A(S1),.S(Sum),.C(D2));
or g1(Co,D2,D1);
endmodule
module cy4(input[3:0] A,B,
input C_1,
output[3:0] S,
output C3
);
wire C0,C1,C2;
fulladder U0_FA(A[0],B[0],C_1,S[0],C0);
fulladder U1_FA(A[1],B[1],C0,S[1],C1);
fulladder U2_FA(A[2],B[2],C1,S[2],C2);
fulladder U3_FA(A[3],B[3],C2,S[3],C3);
endmodule
测试脚本代码:
`timescale 1 ns/ 1 ps
module cy4_vlg_tst();
reg [3:0] A;
reg [3:0] B;
reg C_1;
wire C3;
wire [3:0] S;
cy4 i1 (
.A(A),
.B(B),
.C3(C3),
.C_1(C_1),
.S(S)
);
initial
begin
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
A = 4
B = 4
C_1 = 1
#5;
$stop;
$display("Running testbench");
end
endmodule