如何定义和分配Verilog 2d阵列

ble*_*edi 2 arrays verilog

我正在尝试以这种形式创建一个二维数组:

reg arr[5:0][0:5];
Run Code Online (Sandbox Code Playgroud)

当我尝试为它分配一个值时,我们可以说

assign arr[1] = 22;
Run Code Online (Sandbox Code Playgroud)

它给出了一些错误说:

"引用标量寄存器数组'arr'不是合法的净左值"和"连续分配的非法左手边".

所以我的目的是在数组的索引中分配一个数字.这项任务如何运作?任何帮助,建议将受到高度赞赏.

Tim*_*Tim 14

首先,你不能注册assign.assigns驱动线类型,而不是reg类型.要驱动一个reg类型,你需要一个逻辑块内的语句,如always块.

其次,基于你所写的内容,我认为你正在寻找一个多位元素阵列,而不是二维阵列.

reg arr[5:0][0:5];定义单个位的2D数组.如果你想要一个可以容纳大于一位的多位值数组,你可以这样声明:

reg [M:0] arr[0:N] - 这描述了(N + 1)个元素的数组,其中每个元素是M + 1位数.如果以这种方式声明它,那么您应该能够将22之类的值存储到其中,假设您使用always块.

  • `(M + 1)`,`(N + 1)`,而不是`-1` (9认同)