BEHAVIORAL DESCRIPTION
module cla4 (
input [3:0] A, B,
input Cin,
output [3:0] Sum,
output Cout
);
reg [3:0] Sum;
reg Cout;
reg [3:0] G, P;
reg [3:1] C;
always @(A or B or Cin)
begin
G = A & B;
P = A ^ B;
C[1] = G[0] | (P[0] & Cin);
C[2] = G[1] | (P[1] & C[1]);
C[3] = G[2] | (P[2] & C[2]);
Cout = G[3] | (P[3] & C[3]);
Sum[0] = P[0] ^ Cin;
Sum[1] = P[1] ^ C[1];
Sum[2] = P[2] ^ C[2];
Sum[3] = P[3] ^ C[3];
end
endmodule
Test Bench:--
module tb_cla4;
reg [3:0] A, B;
reg Cin;
wire [3:0] Sum;
wire Cout;
cla4 uut (
.A(A),
.B(B),
.Cin(Cin),
.Sum(Sum),
.Cout(Cout)
);
initial
begin
A = 4'b0001; B = 4'b0010; Cin = 0;
#10;
A = 4'b0101; B = 4'b0011; Cin = 0;
#10;
A = 4'b1111; B = 4'b0001; Cin = 0;
#10;
A = 4'b1010; B = 4'b0101; Cin = 1;
#10;
A = 4'b1111; B = 4'b1111; Cin = 1;
#10;
$finish;
end
endmodule
OUTPUT