본문 바로가기
language/Verilog

[verilog] generate 사용하기

by 파란하늘코더 2021. 1. 31.
반응형

RTL 설계하다보면 동일 block을 여러번 instance 할 경우가 생깁니다

 

이때 1~2개만 추가하는거면 모르겠지만 수십개를 추가하기에는 너무 효율이 좋지않아

 

gererate라는 keyword를 사용하여 설계를 한다고 합니다(저도 최근 공부하면서 알게됬네요)

 

참고한 사이트는 아래와 같습니다

 

www.chipverify.com/verilog/verilog-generate-block

 

Verilog generate block

A generate block allows to multiply module instances or perform conditional instantiation of any module. It provides the ability for the design to be built based on Verilog parameters. These statements are particularly convenient when the same operation or

www.chipverify.com

여기에 작성되어 있는 걸 그대로 한번 simulation을 해보겠습니다

 

module test_main();
    parameter N = 2;
    reg [N-1:0] a,b;
    wire [N-1:0] sum, cout;

    my_design #(.N(N)) md( .a(a),.b(b),.sum(sum),.cout(cout));

    initial begin
    a <= 0;
    b<= 0;
    $monitor("a=0x%h b=0x%h sum=0x%h cout=0x%h", a, b, sum, cout);

    #10 a <= 'h2; b <= 'h3;
    #20 b <= 'h4;
    #10 a <= 'h5;
    end
endmodule
module ha( input a,b, output sum, cout);
    assign sum = a^b;
    assign cout = a&b;
endmodule

module my_design
    #(parameter N=4)(input [N-1:0] a,b, output [N-1:0] sum,cout);

    generate
        for(genvar i=0;i<N;i=i+1)begin
            ha u0(.a(a[i]),.b(b[i]),.sum(sum[i]),.cout(cout[i]));
        end
    endgenerate
endmodule 

여기서 보면 for 문 안에 쓰이는 변수는 genvar라는 keyword를 통해 선언해 주어야 합니다.

 

해당 keyword는 verilog-2000에서 새로 추가된 keyword이며, 양의 정수만 저장이 가능합니다

위와 같이 나오는데

 

2bit 짜리 adder를 상위비트와 하위비트로 나누어서 반가산기 2개를 적용한 것이라고 볼수 있습니다

 

결과가 좀 이상해보이는 건 현재 선언된 비트가 2bit 이기 때문입니다

 

해당 블로그를 좀 더 보면 generate 에는 if else 도 적용이 된다고 합니다

대신에 저기 사용된 USE case는 신호가 아니라 parameter등으로 미리 선언된 상수 여야 합니다

 

마찬가지로 case도 될 수 있다고 하니 참고하시기 바랍니다

 

이게 합성까지 되는지는 저도 아직 확인을 못했습니다

 

'language > Verilog' 카테고리의 다른 글

[systemverilog] enum 사용법  (0) 2021.02.02
[verilog] >>, >>>, <<, <<< 연산자  (2) 2021.01.31
[systemverilog] automatic keyword  (0) 2021.01.31
[systemverilog] task 와 function  (0) 2021.01.31
[verilog] $signed casting logic count  (0) 2021.01.26

댓글