SoC 설계/Verilog, SystemVerilog

SystemVerilog: Parameterized task/functions

yztech 2023. 3. 18. 08:07
반응형

파라미터 형 모듈은 Verilog에서 매우 강력하고 많이 사용된다.

파라미터들은 각 모듈의 인스턴스를 생성할때 다시 설정할 수 있어서, 그 모듈을 configurable하고, reusable하게 만든다.

기본적인 Verilog는 argument의 size와 type은 parameterized할 수 없어서, configurable하고 reusable하게 작성하는데 제한이 있었다.

SystemVerilog는 이런 제약을 해결하는 방법을 제공한다.

그 방법은 parameterized class안에 static tasks나 functions을 사용하는 것이다.

task나 function이 호출될때마다, 그 class parameters가 redefine된다.

virtual class Functions #(parameter SIZE=32);
    static function [SIZE-1:0] adder (input [SIZE-1:0] a, b);
        return a + b; // default to a 32=bit adder
    endfunction        
endclass

module top (input logic [63:0] a, b,
            output logic [63:0] y);
    always_comb 
        y = Function #(.SIZE(64))::adder(a,b);
endmodule

파라미터된 task와 function으로, 동일한 기능을 하는 하나의 task나 function만 유지하는게 가능하다.

따라서, 서로 다른 데이터 타입, width에 대해 여러 개의 서로 다른 version을 만들 필요가 없다.

DC는 SystemVerilog에는 없는 2가지 제약을 두었다.

이 클래스는 virtual 로 선언되어야만 하고,

그 클래스는 $unit 선언 안에서 정의되어야 한다.

반응형

'SoC 설계 > Verilog, SystemVerilog' 카테고리의 다른 글

SystemVerilog: Procedural blocks  (0) 2023.03.19
SystemVerilog: Casting  (0) 2023.03.18
SystemVerilog: Arrays  (0) 2023.03.10
SystemVerilog: modport  (0) 2023.03.10
SystemVerilog: Testbench  (0) 2023.02.23