[Verilog] generate & genvar를 통한 코드 간소화

YumeIroVillain·2021년 12월 17일
0

6.5학기

목록 보기
1/20

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

profile
HW SW 둘다 공부하는 혼종의 넋두리 블로그 / SKKU SSE 17 / SWM 11th

0개의 댓글