无论是否使用'
:,都可以进行阵列初始化
int a[8] = '{0,1,2,3,4,5,6,7}; // Packed
int b[8] = {0,1,2,3,4,5,6,7}; // Unpacked
假设数组使用不可打包的类型,如int、string等,是否有正确的方法。?两种方式似乎都很好用。
EDA游乐场上的完整代码示例:http://www.edaplayground.com/x/3Tc
基于IEEE 1800-2009:
数组赋值模式(1)的优点是,通过在模式前面加上类型名称,它们可以用于创建自定义类型的赋值模式表达式。此外,分配模式中的项可以使用诸如"{n{element}}"之类的语法进行复制,并且可以使用default:语法进行默认设置。但是,数组赋值模式中的每个元素项都必须与目标数组的元素类型相同。相比之下,解压缩的数组串联(2)禁止复制、默认和显式键入,但它们提供了额外的灵活性,可以从元素和数组的任意组合中组成数组值。
因此:
int A3[1:3];
int A9[1:9];
A3 = '{1, 2, 3}; #legal
A9 = '{3{A3}}; #illegal
A9 = {A3, 4, 5, A3, 6}; #legal
A9 = '{9{1}}; #legal
A9 = {9{1}}; #illegal
如您所示,在简单的情况下,赋值模式和解包数组串联之间的功能存在重叠。事实上,在SystemVerilog的早期版本中,它们使用了完全相同的语法(没有"),但事实证明,赋值上下文类型规则过于复杂,无法使用完全相同的句法,因此添加了"前缀来区分两者。