在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
参数化使我们只需要维护一个版本的函数/任务,而不是像原先因不同的数据类型,数据大小产生多个代码版本。该功能有两个使用限制:
上述代码在Vivado 2014.3中可综合通过,但是Synplify-Pro 2013.03不支持virtual class关键字声明。
下篇预告:可综合的SystemVerilog:命名空间
文章评论(0条评论)
登录后参与讨论