我试图理解以下两个代码段的不同之处:
示例1:
logic [4:0] [2:0] a;
示例2:
typedef logic[4:0] mytype;
logic mytype [2:0] a;
例如1,a是打包结构,如果我没有错误,索引将按以下方式工作:a[0]
,a[1]
... a[4]
将提供3位值(由于[2:0])。
然而,对于示例2,a[i]
其中i的最大索引是2并且每个a[i]
将给出5位向量(由于mytype)。
两个例子似乎都等同于我。第二个只包括一个额外的typedef。但是,为什么索引数组对于这两种情况都不相同?
答案 0 :(得分:1)
错误消息应该是您的索引范围与您的想法相反的线索。您应该阅读具有示例的1800-2012 LRM的 7.4.5多维数组部分
也可以使用typedef分阶段定义多个打包维度。
typedef bit [1:5] bsix; bsix [1:10] v5; // 1 to 5 varies most rapidly