====== Loops in SystemVerilog ====== Loops exist in SystemVerilog, but they do not behave like in computer programs. Loops in computer programs are executed sequentially, but it's not possible to define a sequential loop in synthesizable SystemVerilog. Instead, when the loop is synthesized, each "iteration" of the loop will be synthesized into hardware, generating hardware that will perform all iterations in parallel, effectively unrolling the loop. Here's an example of a synthesizable for loop: logic [SIZE-1:0] x; logic [SIZE-1:0] y; genvar i; always_comb begin for (i = 0; i < SIZE; i = i + 1) begin y = !x; end end Optionally, the for loop can be placed inside a ''generate'' block. This is required if unique hardware (such as an instance or ''always_'' block) will be generated for each loop iteration. logic [SIZE-1:0] x; logic [SIZE-1:0] y; genvar i; generate for (i = 0; i < SIZE; i = i + 1) begin always_comb begin y[i] = !x[i]; end end endgenerate ===== Limitations ===== Because of the nature of loops, there are some limitations on loops in synthesizable SystemVerilog. * The number of iterations must be fixed. * The iterations in the loop must be independent.