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

来源:互联网 时间:2015-12-12

在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:命名空间

相关阅读:
Top