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

时间:2013-04-16 19:20:05

标签: arrays verilog

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

reg arr[5:0][0:5];

当我尝试为其分配值时,请说

assign arr[1] = 22;

它给出了一些错误:

  

“引用标量reg数组'arr'不是合法的网络左值”和“连续分配的非法左侧”。

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

2 个答案:

答案 0 :(得分:14)

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

其次,根据您所写的内容,我认为您正在寻找一个多位元素数组,而不是二维数组。

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

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

答案 1 :(得分:3)

您不能在assign类型上使用连续分配(也称为reg语句)。这与数组无关。

arr的声明更改为wire类型会让您超过发布的错误消息。或者,您可以使用initialalways块中的程序分配来分配它。

但是,您仍需要在赋值中提供数组的两个维度。您正在声明一个2位数组的1位值。

因此您需要将其指定为:

arr[0][0] = 1;