我写了两个verilog模块。第一个名为topmodule.v,第二个名为tx.v.模块topmodule.v将参数data [31:0]传递给tx.v.我想从数据[31:0]中取变量Rmax和Cmax。之后我想让Rmax和Cmax成为总线的宽度。此外,我想定义一个名为Mat的reg矩阵,其尺寸为Cmax-x-Rmax。我在代码的第6行收到错误,“范围必须以常量表达为界”。请帮我解决这个问题。代码如下。
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];
答案 0 :(得分:2)
错误意味着它所说的内容,你不能拥有可变大小的总线或数组。
声明你的矩阵是你需要的最大尺寸,如果你想使用一个较小的矩阵,那么只需使用它的一个子部分,而其余部分留空。
请记住,总线的宽度是物理对象,它们不能在电路运行时改变,只能在合成期间。
答案 1 :(得分:0)
如果你真的希望这些是参数,那么使用:
module tx #(parameter DATA=32'h00000000) (
// inputs and outputs here
);
reg [DATA[31:16]-1:0] Matrix [0:DATA[15:0]-1];
然而,我并不确定你想要完成什么。显示更多伪代码并获得更有用的答案。