在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)
有什么想法吗?
感谢您提前的时间。
泰达
答案 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
中需要覆盖,并且它完美地工作。这样,我们就可以避免两个模块的语法错误。
希望这会有所帮助。感谢。