我使用了生成的verilog代码,我认为它是数组乘法器的完美代码。
当我检查Synthesize时,它只发送一个警告而不是错误,所以我希望模拟会继续进行。
然而,它不接受结果并仍然显示Z。
这是我的代码和 我想检查哪里出错并改变它
module multiplier(A,B,P);
input [31:0] A,B;
output [63:0] P;
wire AB[0:31][0:31];
wire C[0:31][0:31];
wire S[0:31][0:31];
genvar i,j;
generate
for(j=0; j<32; j=j+1)
begin
for(i=0; i<32; i=i+1)
begin : AB_loop
assign AB[i][j] = A[i] & B[j];
if(i==0 && j==0)
begin
assign P[0]=AB[0][0];
end
else if(i==0 && j==1)
begin
HalfAdder HA_1 ( AB[0][1], AB[1][0], C[1][0], S[1][0]);
assign P[31]=S[31][0];
end
else if(i==0 && j>1 && j<31)
begin
FullAdder FA_1 ( AB[1][j-1], AB[0][j], C[1][j-2], C[1][j-1], S[1][j-1]);
end
else if (i==0 && j==31)
begin
HalfAdder HA_2 ( AB[1][31], C[1][30], C[1][31], S[1][31]);
end
else if (j==1 && i>0 && i<31)
begin
HalfAdder HA ( AB[i+1][0], S[i][1], C[i+1][0], S[i+1][0]);
assign P[i]=S[i][0];
assign P[i+31]=S[31][i];
end
else if(i>0 && j>1 && i<31 && j<31 )
begin
FullAdder FA ( AB[i+1][j-1], S[i][j], C[i+1][j-2], C[i+1][j-1], S[i+1][j-1]);
end
else if(i>1 && j==31 && i<31)
begin
FullAdder FA_2 ( AB[i+1][31], C[i][31], C[i+1][30], C[i+1][31], S[i+1][31]);
end
end
end
endgenerate
endmodule
也许testbench代码不会出错。
如果您需要,请在此处回复