我已经写了两个verilog模块。第一个文件名为topmodule.v,第二个文件名为tx.v。topmodule.v模块将参数data31:0传递给tx.v。我想从data31:0中获取变量Rmax和Cmax。在那之后,我想使Rmax和Cmax成为总线的宽度。此外,我想定义一个维度为Cmax-x-Rmax的reg矩阵,称为Mat。我在代码的第6行收到错误,"Range必须由常量表达式限定“。请帮助我解决这个问题。代码如下所示。
tx (data, output)
input [31:0] data;
reg [15:0] Rmax, Cmax;
assign Rmax [15:0] = data [31:16];
assign Cmax [15:0] = data [15:0];
reg [Rmax-1:0] Matrix [0:Cmax-1];发布于 2013-12-10 14:00:36
这个错误的意思和它所说的差不多,你不能有一个可变大小的总线或数组。
声明你的矩阵是你所需要的最大大小,如果你想使用一个更小的矩阵,那么只需使用它的一部分,而剩下的部分则留空。
请记住,总线的宽度是物理对象,它们不能在电路运行时更改,只能在合成期间更改。
发布于 2013-12-10 20:10:28
如果你真的想让它们成为参数,那就使用它:
module tx #(parameter DATA=32'h00000000) (
// inputs and outputs here
);
reg [DATA[31:16]-1:0] Matrix [0:DATA[15:0]-1];然而,我并不是很确定你想要实现什么。显示更多伪代码,并获得更有用的答案。
https://stackoverflow.com/questions/20486865
复制相似问题