【发布时间】:2013-04-09 08:20:01
【问题描述】:
我正在尝试以这种形式创建一个二维数组:
reg arr[5:0][0:5];
当我尝试为它分配一个值时,可以说
assign arr[1] = 22;
它给出了一些错误说:
“对标量 reg 数组 'arr' 的引用不是合法的净左值”和“连续赋值的非法左侧”。
所以我的意图是在数组的索引中分配一个数字。这个任务是如何工作的?任何帮助,建议将不胜感激。
【问题讨论】:
我正在尝试以这种形式创建一个二维数组:
reg arr[5:0][0:5];
当我尝试为它分配一个值时,可以说
assign arr[1] = 22;
它给出了一些错误说:
“对标量 reg 数组 'arr' 的引用不是合法的净左值”和“连续赋值的非法左侧”。
所以我的意图是在数组的索引中分配一个数字。这个任务是如何工作的?任何帮助,建议将不胜感激。
【问题讨论】:
首先,您不能assign 注册。 assigns 驱动 wire 类型,而不是 reg 类型。要驱动 reg 类型,您需要在逻辑块(如 always 块)内添加一条语句。
其次,根据您所写的内容,我认为您正在寻找一个多位元素数组,而不是二维数组。
reg arr[5:0][0:5]; 定义一个二维数组。如果你想要一个多位值的数组,可以容纳大于位,你可以这样声明:
reg [M:0] arr[0:N] - 这描述了一个由 (N+1) 个元素组成的数组,其中每个元素是一个 M+1 位数。如果你以这种方式声明它,那么你应该能够在其中存储一个像 22 这样的值,假设你使用了一个 always 块。
【讨论】:
(M+1),(N+1),不是-1
您不能在 reg 类型上使用连续赋值(又名 assign 语句)。这与它是一个数组无关。
将arr 的声明更改为wire 类型将使您摆脱您发布的错误消息。或者,您可以使用initial 或always 块中的程序分配来分配它。
但是,您仍然需要在赋值中提供数组的两个维度。您正在声明一个 1 位值的二维数组。
所以你需要将它指定为:
arr[0][0] = 1;
【讨论】: