Verilog 에서 For 문은 전처리기에 의해 처리되는 일종의 매크로문이다.
레지스터 X0~X31 전체에 대하여 수행되는 연산이 있다고 할 때, 모든 레지스터에 대하여 일일히 작업을 적어넣는다면 이는 번거로울 것이다.
genvar gi;
generate
for (gi = 0; gi < REG_NUM; gi = gi+1) begin: REG_WRITE_0
always @(posedge clk or negedge rstn) begin
if (!rstn) begin
register[gi] <= 64'b0;
end else if (clk) begin
if(reg_write == 1'b1 && write_register == gi) begin
register[gi] <= write_data;
end
end
end
end
endgenerate
위 코드는 reset이 발생했을 시 모두 0으로 초기화하고, 그렇지 않다면 해당된 레지스터 인덱스에 대해서만 write_data 의 값을 해당 레지스터에 assign 해주는 매크로문으로 볼 수 있다.
출처: https://chocoamond.tistory.com/149
참고: https://dreamsailor.tistory.com/25