我正在尝试以这种形式创建一个二维数组:
reg arr[5:0][0:5];
当我尝试为其分配值时,请说
assign arr[1] = 22;
它给出了一些错误:
“引用标量reg数组'arr'不是合法的网络左值”和“连续分配的非法左侧”。
所以我的目的是在数组的索引中分配一个数字。这项任务如何运作?任何帮助,建议都将受到高度赞赏。
答案 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
类型会让您超过发布的错误消息。或者,您可以使用initial
或always
块中的程序分配来分配它。
但是,您仍需要在赋值中提供数组的两个维度。您正在声明一个2位数组的1位值。
因此您需要将其指定为:
arr[0][0] = 1;