Create multiple instances of hardware using genvar:
N-bit Ripple Carry Adder
module ripple_adder #(
parameter WIDTH = 8
) (
input wire [WIDTH-1:0] a, b,
input wire cin,
output wire [WIDTH-1:0] sum,
output wire cout
);
wire [WIDTH:0] carry;
assign carry[0] = cin;
assign cout = carry[WIDTH];
genvar i;
generate
for (i = 0; i < WIDTH; i = i + 1) begin : fa_stage
full_adder fa (
.a (a[i]),
.b (b[i]),
.cin (carry[i]),
.sum (sum[i]),
.cout (carry[i+1])
);
end
endgenerate
endmodule
Key Points
genvaris a special variable for generate loops- Each iteration creates a separate hardware instance
- Named block (
fa_stage) is required for unique paths