铸造一维"多维"数组到一维

时间:2016-06-30 09:59:22

标签: system-verilog

我们有一个数组(在SVI in_apbBus中)声明为:

logic [SIZE-1:0][APB_AW-1:0] apbPAddr;

使用SIZE = 1实例化时,这是允许的分配吗?

logic [APB_AW-1:0] apbPAddr;
in_apbBus #(.SIZE(1), .APB_AW(APB_AW)) uin_apbBus();

apbPAddr = uin_apbBus.apbPAddr;

理论上,我将一维数组赋值为多维值。但是,其中一个内部维度的大小为1,我希望这适用于打包数组。

我对这些类型的作业有间歇性问题。它似乎主要在QuestaSim中工作,但是当SVI(uin_apbBus)通过模块层次结构(接收模块从接口继承APB_AW)时出现问题,而uin_apbBus的APB_AW似乎使用了APB_AW的默认值( 32)。

如果我像这样分配:

apbPAddr = uin_apbBus.apbPAddr[0];

问题已解决。因此,请详细说明上述问题:如何在LRM中定义,这是一个工具问题吗?

1 个答案:

答案 0 :(得分:2)

处理打包数组时,不同大小或维度的数组之间的赋值没有类型安全性。它们都被视为填充或截断以适合的整数值。 SystemMerilog如何处理范围[0:0]在LRM中没有明确定义,但大多数工具都将其视为未指定范围。

APB_AW未被正确覆盖的问题是一个单独的问题,您可能需要向工具供应商展示更完整的测试用例。