系统verilog:将参数传递给包

时间:2014-02-15 18:15:22

标签: system-verilog

我必须更新在包内声明的几个枚举数据类型,而我的枚举数据类型的大小将随参数值而变化。 我必须以某种方式使该参数值对包可见。

我知道包不是可以实例化的组件。因此我无法直接传递参数。

任何人都可以通过一些调整来帮助我完成我的要求。

PS:要求与TB

有关

1 个答案:

答案 0 :(得分:1)

我们通常对必须参数化的长度类型所做的是使用define而不是包参数:

package some_package_pkg;
  `ifndef MAX_DATA_WIDTH
  `define MAX_DATA_WIDTH 32

  typedef [`MAX_DATA_WIDTH-1:0] bit some_type;
  ...
endpackage

默认情况下,MAX_DATA_WIDTH为32,但如果我们需要更大的宽度,我们只需从命令行传递define。对于Incisive,它类似于:

irun -D MAX_DATA_WIDTH=64 some_package_pkg.sv

如果您想要改造使用参数的现有包,您可以这样做:

package some_param_package_pkg;
   parameter P_MAX_DATA_WIDTH = `MAX_DATA_WIDTH; // just add this line

   typedef [P_MAX_DATA_WIDTH-1:0] bit some_type; // all declaration are unchanged
endpackage