何时使用tick(')进行Verilog数组初始化?

时间:2014-04-18 21:59:25

标签: arrays verilog system-verilog array-initialization

可以使用或不使用'

来完成数组初始化
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 Playground的完整代码示例:http://www.edaplayground.com/x/3Tc

2 个答案:

答案 0 :(得分:7)

基于IEEE 1800-2009:

  

数组赋值模式(1)的优势在于它们可以通过在模式前加上类型名称来创建自定义类型的赋值模式表达式。此外,可以使用诸如“{n {element}}之类的语法来复制赋值模式中的项目,并且可以使用default:syntax来默认。但是,数组赋值模式中的每个元素项必须与目标数组的元素类型具有相同的类型。相比之下,解压缩数组连接(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

答案 1 :(得分:2)

在简单的情况下,如您所示,分配模式和解包数组连接之间的功能重叠。事实上,在非常早期的SystemVerilog版本中,他们使用完全相同的语法(没有'),但是分配上下文类型规则被证明过于复杂而无法使用完全相同的语法,因此'添加了前缀以区分这两者。