在verilog中使用for-generate的32位数组乘法器

时间:2015-12-17 12:39:29

标签: verilog

我使用了生成的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代码不会出错。

如果您需要,请在此处回复

0 个答案:

没有答案