我试图创建在形式的二维数组:如何定义和分配的Verilog二维数组
reg arr[5:0][0:5];
,当我尝试分配一个值,它可以说
assign arr[1] = 22;
它给一些错误说:
“参考标章阵列‘改编’是不是合法的净左值”和“连续分配的非法左侧”。
所以我的意图是在数组的索引中分配一个数字。这项任务如何工作?任何帮助,建议将不胜感激。
我试图创建在形式的二维数组:如何定义和分配的Verilog二维数组
reg arr[5:0][0:5];
,当我尝试分配一个值,它可以说
assign arr[1] = 22;
它给一些错误说:
“参考标章阵列‘改编’是不是合法的净左值”和“连续分配的非法左侧”。
所以我的意图是在数组的索引中分配一个数字。这项任务如何工作?任何帮助,建议将不胜感激。
首先,你不能assign
到暂存器。 assigns
驱动器导线类型,而不是reg类型。要驱动一个reg类型,你需要在一个逻辑块内的语句像always块一样。其次,根据你写的内容,我认为你正在寻找一个多位元素的数组,而不是二维数组。
reg arr[5:0][0:5];
定义一个二维数组的单个位。如果您想要一个可以保持大于一位的多位值数组,您声明它是这样的:
reg [M:0] arr[0:N]
- 这描述了一个(N + 1)个元素的数组,其中每个元素是M + 1位数。如果你用这种方式声明它,那么假设你使用always块,你应该能够存储一个像22这样的值。
您不能在reg
类型上使用连续赋值(又名assign
语句)。这与它是一个数组无关。
将arr
的声明更改为wire
将使您通过您发布的错误消息。或者,您可以使用initial
或always
区块中的程序性分配对其进行分配。
但是,您仍然需要在作业中提供数组的两个维度。您正在声明一个1位值的2d数组。
所以你需要将其指定为:
所有的arr[0][0] = 1;
是的,这正是我正在寻找的。如何存储值,是否必须使用always块,我们不能手动存储它们?还有更多的事情,我们应该使用assign吗? – bledi
你是什么意思'手动'?如果您只是想在开始时分配它,则可以使用初始块。分配仅用于驱动电线,而不是注册表。查看任何介绍性的verilog教程,了解有关reg和wire之间区别的更多信息。 – Tim
是的,我知道了。无论如何感谢 – bledi