verilog中一个关于赋值的问题
时间:10-02
整理:3721RD
点击:
- parameter [31:0] dat [0:instructions-1] = {
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h12345678,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h00010002,
- 32'h00030004,
- 32'ha1050006,
- 32'h00070008,
- 32'h0,
- 32'h0,
- 32'hdeaddead,
- 32'h55555555,
- 32'ha1050006,
- 32'h00070008,
- 32'h00010002,
- 32'h00030004,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0,
- 32'h0
- };
Illegal assignment to type 'reg[31:0] $[0:instructions-1]' from type 'reg[1023:0]': Cannot assign a packed type to an unpacked type.
有人知道这个问题怎么回事吗?
{}的意思是把{}内所有数据连接起来变成1个数据,你这里就得到一个1024位的数据。
而你等号左边是1个2维数组,vcs不知道怎么把1个数据变成1个2维数组。
想对memory赋初值,直接$readmemh不更好?
verilog中不能那样定义。而应该这样:
parameter [0:1023] dat = {......};
dat[32*N : 32*N+31]就是第N个DWORD类型的值。并且,要确保那个1023与{}中值的个数是匹配的。当然也可以定义为 parameter [1023:0] dat......
这个就是典型的软件思路写法
贴主弄错了数组和拼接赋值两者的含义
小编以前写软件的吧....
{}是拼接符~看看语法
这是SystemVerilog的特性,在编译仿真的时候加上对SystemVerilog的支持;
我觉得不能对两个reg型变量赋值,你可以把期中一个改成输出变量或是别的变量类型试试
用-sv试试
