| 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 |