合成中的Verilog矩阵乘法错误

合成中的Verilog矩阵乘法错误,verilog,xilinx,hdl,Verilog,Xilinx,Hdl,我正在Verilog上写一个32行乘32列的乘法。我试图合成代码,但它给出了一个错误,说信号连接到多个驱动器。下面的代码不完整,但给出了相同的错误。我是Verilog新手,不知道如何解决这个问题。你能就如何解决这个问题提出建议吗。我使用的是Xillinx版本14.5,FPGA是virtex 5 我使用内置乘法器和内置加法器。 代码如下: module matrixMult(Arow, Bcol,CLK, AxB); input [1023:0] Arow; input [1023

我正在Verilog上写一个32行乘32列的乘法。我试图合成代码,但它给出了一个错误,说信号连接到多个驱动器。下面的代码不完整,但给出了相同的错误。我是Verilog新手,不知道如何解决这个问题。你能就如何解决这个问题提出建议吗。我使用的是Xillinx版本14.5,FPGA是virtex 5

我使用内置乘法器和内置加法器。 代码如下:

module matrixMult(Arow, Bcol,CLK, AxB);
    input [1023:0] Arow;
    input [1023:0] Bcol;
    input          CLK;
    output [31:0] AxB;

     wire [1023:0] Arow;
     wire [1023:0] Bcol;
     wire [1024:0] ab;
     wire [1024:0] AxB;


     // multiplication
     ip32Mult a1b1(CLK, ab[1023:992], Arow[1023:992],Bcol[1023:992]);
     ip32Mult a2b2(CLK, ab[991:960], Arow[991:960],Bcol[992:960]);

     // addition // no clock enable
     ip32Add ab1( AxB[31:0], ab[1023:992], ab[991:960]);

endmodule
错误:

ERROR:Xst:528 - Multi-source in Unit <matrixMult> on signal <ab<992>>; this signal is connected to multiple drivers.
ip32Mult的外观:

module ip32Mult (
  clk, p, a, b
)/* synthesis syn_black_box syn_noprune=1 */;
  input clk;
  output [31 : 0] p;
  input [31 : 0] a;
  input [31 : 0] b;
  ...

评论有点太长,但不是完整的答案。 您能否使用现代风格重新定义您的模块:

module matrixMult(
  input [1023:0] Arow,
  input [1023:0] Bcol,
  input          CLK,
  output [31:0]  AxB );


 wire [1024:0] ab;
你有这样一句话:

 wire AxB;
它不确定是否会导致它为1位,或者前面的语句(32位宽)是否会获胜

如果问题还可以显示以下项目的标题,则会很有帮助:

ip32Mult
ip32Add

由于错误提示ab连接可能连接到两个驱动程序,而不是一个输入和一个输出。

对于注释来说有点太长,但不被视为完整答案。 您能否使用现代风格重新定义您的模块:

module matrixMult(
  input [1023:0] Arow,
  input [1023:0] Bcol,
  input          CLK,
  output [31:0]  AxB );


 wire [1024:0] ab;
你有这样一句话:

 wire AxB;
它不确定是否会导致它为1位,或者前面的语句(32位宽)是否会获胜

如果问题还可以显示以下项目的标题,则会很有帮助:

ip32Mult
ip32Add
由于错误提示ab连接可能连接到两个驱动程序,而不是一个输入和一个输出。

ip32Add头具有
clk
引脚,但ab1实例没有。因此,通过顺序连接,
AxB[31:0]
连接到
clk
ab[1023:992]
连接到输出
s
ab[1023:992]
如果实例a1b1,也连接到输出
p
。因此,
ab[1023:992]
有两个驱动程序。例如ab1可能会出现警告,例如宽度不匹配和未连接
b

我建议按名称(例如:
.portname(netname)
)而不是按顺序连接端口。顺序与按名称连接无关,更为明确。如果时钟不重要,但引脚确实存在,ab1应如下所示:

ip32Add ab1( .s(AxB[31:0]), .a(ab[1023:992]), .b(ab[991:960]), .clk() );
ip32Add头具有
clk
引脚,但ab1实例没有。因此,通过顺序连接,
AxB[31:0]
连接到
clk
ab[1023:992]
连接到输出
s
ab[1023:992]
如果实例a1b1,也连接到输出
p
。因此,
ab[1023:992]
有两个驱动程序。例如ab1可能会出现警告,例如宽度不匹配和未连接
b

我建议按名称(例如:
.portname(netname)
)而不是按顺序连接端口。顺序与按名称连接无关,更为明确。如果时钟不重要,但引脚确实存在,ab1应如下所示:

ip32Add ab1( .s(AxB[31:0]), .a(ab[1023:992]), .b(ab[991:960]), .clk() );

我使用了内置的ip乘数。我应该把整个代码粘贴在这里吗。它相当长。我使用内置的ip乘数。我应该把整个代码粘贴在这里吗。相当长。