wind330

可综合的SystemVerilog:参数化函数/任务

0
阅读(3919)

可综合的SystemVerilog:参数化函数/任务

在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。

SystemVerilog提供了一种方式解决上述限制,在参数化的类(class)中使用静态(static)函数/任务。调用函数/任务时,重新定义类的参数,例程如下:

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

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

参数化使我们只需要维护一个版本的函数/任务,而不是像原先因不同的数据类型,数据大小产生多个代码版本。该功能有两个使用限制:

  • 类必须被声明为虚拟(virtual)

  • 类必须定义在$unit命名空间中

上述代码在Vivado 2014.3中可综合通过,但是Synplify-Pro 2013.03不支持virtual class关键字声明。


下篇预告:可综合的SystemVerilog:命名空间