我们有一个数组(在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中定义,这是一个工具问题吗?
答案 0 :(得分:2)
处理打包数组时,不同大小或维度的数组之间的赋值没有类型安全性。它们都被视为填充或截断以适合的整数值。 SystemMerilog如何处理范围[0:0]
在LRM中没有明确定义,但大多数工具都将其视为未指定范围。
APB_AW未被正确覆盖的问题是一个单独的问题,您可能需要向工具供应商展示更完整的测试用例。