我想寫陣列乘法器,我有兩個模塊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
和ArrayMultiplier:
module ArrayMultiplier(result,a1,a2);
parameter a1R=0;
parameter a1C=0;//a1C=a2R.
parameter a2C=0;
output reg[(a1R*a2C)-1:0] result;
input [(a1R*a1C)-1:0] a1;
input [(a1C*a2C)-1:0] a2;
integer i,j,k;
initial begin
//$display("a1R=%d a1C=%d a2C=%d",a1R,a1C,a2C);
for(i=0;i<4;i=i+1)
for(j=0;j<5;j=j+1)
$display("%d a1=%d ",i,a1[i*5+j]);
for(i=0;i<a1R;i=i+1) begin
for(j=0;j<a2C;j=j+1) begin
result[i*a2C+j]=0;
end
end
for(i=0;i<a1R;i=i+1) begin
for(j=0;j<a2C;j=j+1) begin
for(k=0;k<a1C;k=k+1) begin
result[i*a2C+j]=result[i*a2C+j]+(a1[i*a1C+k]*a2[k*a2C+j]);
$display("res=%d a1=%d a2=%d",result[i*a2C+j],a1[i*a1C+k],a2[k*a2C+j]);
end
end
end
end
endmodule
我已經初始化A1,A2,但是當我通過他們ArrayMultiplier模塊他們只是有x值。 我不知道發生了什麼。