Verilog 如何在不改变值的情况下将向量传递给模块?
我想写一个数组乘法器,我有两个模块,上面是ArrayMultiplier 在顶部模块中,我有三个数组结果,a1,a2Verilog 如何在不改变值的情况下将向量传递给模块?,verilog,Verilog,我想写一个数组乘法器,我有两个模块,上面是ArrayMultiplier 在顶部模块中,我有三个数组结果,a1,a2 module Top(); reg [4*5-1:0] a1; reg [5*3-1:0] a2; wire [4*3-1:0] result; integer i,j; initial begin for(i=0;i<4;i=i+1) begin for(j=0;j<5;j=j+1) begin
module Top();
reg [4*5-1:0] a1;
reg [5*3-1:0] a2;
wire [4*3-1:0] result;
integer i,j;
initial begin
for(i=0;i<4;i=i+1) begin
for(j=0;j<5;j=j+1) begin
a1[i*5+j]=1'b1;
end
end
for(i=0;i<5;i=i+1) begin
for(j=0;j<3;j=j+1) begin
a2[i*3+j]=1'b1;
end
end
end
ArrayMultiplier #(4,5,3) test(result,a1,a2);
endmodule
moduletop();
reg[4*5-1:0]a1;
reg[5*3-1:0]a2;
导线[4*3-1:0]结果;
整数i,j;
初始开始
对于(i=0;i您没有覆盖ArrayMultiplier
模块的参数
默认情况下,a1R
、a1C
和a2C
等参数初始化为0
,如果在实例化模块时未覆盖这些参数,则向量a1
和a2
的大小为零
查看您的Top
模块,映射a1R=4
、a1C=5
和a2C=3
,并实例化模块,解决显示x
的错误。模块实例化如下:
ArrayMultiplier #(4,5,3) test(result,a1,a2);
这就解决了您的问题。有关参数化模块的详细信息,请查看和链接。首先,根据您的代码,您从未将a1R
、a1C
或a2C
设置为0以外的值,这意味着阵列乘法器中的任何内容都不会相乘(并且向量索引不正确)。请更改ArrayMultiplier
中的参数值,或者从Top
模块中传入这些参数值
其次,您的乘法器可能应该使用始终@(*)
块,而不是初始
块
ArrayMultiplier #(4,5,3) test(result,a1,a2);