module uut_forgen02(a, b, cin, y, cout); | |
parameter WIDTH = 8; | |
input [WIDTH-1:0] a, b; | |
input cin; | |
output [WIDTH-1:0] y; | |
output cout; | |
genvar i; | |
wire [WIDTH-1:0] carry; | |
generate | |
for (i = 0; i < WIDTH; i=i+1) begin:adder | |
wire [2:0] D; | |
assign D[1:0] = { a[i], b[i] }; | |
if (i == 0) begin:chain | |
assign D[2] = cin; | |
end else begin:chain | |
assign D[2] = carry[i-1]; | |
end | |
assign y[i] = ^D; | |
assign carry[i] = &D[1:0] | (^D[1:0] & D[2]); | |
end | |
endgenerate | |
assign cout = carry[WIDTH-1]; | |
endmodule |