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

Vic*_*sky 2 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
Run Code Online (Sandbox Code Playgroud)

有没有正确的方法,假设数组使用不可压缩的类型,如int,string等?两种方式似乎都很好.

EDA Playground的完整代码示例:http://www.edaplayground.com/x/3Tc

Qiu*_*Qiu 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
Run Code Online (Sandbox Code Playgroud)