SystemVerilog

时间:2015-07-31 18:19:26

标签: parameter-passing system-verilog

在systemverilog中,它允许将参数数组传递给较低的模块。目前我有两个.sv模块,其中包含使用此功能的参数。下面,lowMod正在实例化uppMod

module lowMod #(parameter logic row [0:2], parameter logic col [0:1])
               (output logic a, input logic b);

     // main body of codes...

endmodule

这是uppMod。

module uppMod #(parameter logic row [0:4], parameter logic col [0:3])
               (output logic a, input logic b);

     lowMod #(row[1:3], col[0:1]) unit01 (.);
     lowMod #(row[1:3], col[2:3]) unit02 (.);

     // rest of codes...

endmodule

将常量值作为参数分配给测试平台中的uppMod,它非常适用于Modelsim上的行为模拟。但是当我在DC编译器上read时,会弹出抱怨

  

令牌'或'附近的语法错误。 (VER-294)

在声明参数数组时会抱怨逗号。据推测,我认为DC使用类似VCS的Verilog模拟器(是吗?),看起来,与Modelsim相比,DC不喜欢这种语法。

那么无论如何要让它发挥作用?我实际上正在做这样的事情,这些数组初始化为某些值......

module uppMod #(parameter logic row [0:4] = '{1,1,1}, parameter logic col [0:3] = '{1,1})
               (output logic a, input logic b);

     lowMod #(row[1:3], col[0:1]) unit01 (.);
     lowMod #(row[1:3], col[2:3]) unit02 (.);

     // rest of codes...

endmodule

所以当我在DC上详细说明设计时,我希望通过

将参数调整到我想要的值。
elaborate -library WORK -parameters "row[0:4]=>'{1,2,3,4,5}, col[0:3]=>'{1,2,3,4}"

但这也不起作用。

  

错误:令牌'[0:4]'处或附近的参数值列表中的语法错误(字符串位置7)。 (VER-279)

有什么想法吗?

感谢您提前的时间。

泰达

2 个答案:

答案 0 :(得分:0)

DC probably does not support an unpacked array as a parameter. Try making it an packed array of bits. As a packed array, you lose the strict type checking, but it should pass the values

答案 1 :(得分:0)

经过几次尝试后,似乎声明模块内部的参数逻辑可以完成工作 - 只需声明它们并使用lowMod中的某些值初始化它们。在uppMod中,我们也会这样做。但是因为我们需要使用参数化值来实例化lowMod,所以在uppMod中需要覆盖,并且它完美地工作。这样,我们就可以避免两个模块的语法错误。

希望这会有所帮助。感谢。