Verilog 如何在不改变值的情况下将向量传递给模块?

Verilog 如何在不改变值的情况下将向量传递给模块?,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

我想写一个数组乘法器,我有两个模块,上面是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
         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);