2

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

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

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

assign arr[1] = 22;

它给出了一些错误说:

“对标量 reg 数组 'arr' 的引用不是合法的净左值”和“连续赋值的非法左侧”。

所以我的意图是在数组的索引中分配一个数字。这个任务是如何工作的?任何帮助,建议将不胜感激。

4

2 回答 2

14

首先,你不能assign注册。assigns驱动线类型,而不是reg类型。要驱动 reg 类型,您需要在逻辑块(如 always 块)内添加一条语句。

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

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

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

于 2013-04-16T19:28:08.923 回答
3

您不能assign对类型使用连续赋值(也称为语句)reg。这与它是一个数组无关。

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

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

因此,您需要将其指定为:

arr[0][0] = 1;
于 2013-04-16T19:27:14.430 回答