Verilog 运行实现后出错

Verilog 运行实现后出错,verilog,Verilog,我是Verilog的新手,因此我面临一些自己无法解决的问题。我制作了一个包含2个文件的程序,合成是成功的,但当我尝试生成比特流时,我会遇到如下错误 [Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[0]. [Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[10]. [Opt 31-37] Multi-driver

我是Verilog的新手,因此我面临一些自己无法解决的问题。我制作了一个包含2个文件的程序,合成是成功的,但当我尝试生成比特流时,我会遇到如下错误

[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[0].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[10].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[11].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[12].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[13].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[14].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[15].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[1].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[2].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[3].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[4].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[5].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[6].    
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[7].   
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[8].   
[Opt 31-37] Multi-driver net found in the design: uut/TX_Data_IBUF[9].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[0].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[10].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[11].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[12].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[13].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[14].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[15].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[1].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[2].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[3].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[4].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[5].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[6].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[7].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[8].    
[Opt 31-37] Multi-driver net found in the design: uut/USB_2_RXData_IBUF[9].    
[Opt 31-37] Multi-driver net found in the design: uut/execute_in.
请参阅下面的代码

`timescale 1ns / 1ps

module ber
(
  clk,
  rstn,
  TX_Data [15:0],
  RX_Data [15:0],
  total_error [15:0],
  clear,
  enable
);

//inputs
input clk;
input rstn;
input [15:0] TX_Data;
input [15:0] RX_Data;
input clear;
input enable;
//outputs
output [15:0] total_error;

reg [4:0] i;
reg [15:0] subtotal, next_subtotal;

assign total_error = subtotal;

always @(*) begin : comb
  if (rstn==1'b0)
  begin
    next_subtotal = 0;
  end else
  if (clear==1'b1)
  begin
    next_subtotal = 0;
  end else
  if (enable == 1'b1)
  begin
    for (i = 0; i < 16; i = i + 1)
    begin
      if (TX_Data[i] != RX_Data[i]) 
      begin
        next_subtotal = next_subtotal + 1;
      end
    end
  end
end

always @(posedge clk) begin : dff
  if (rstn==1'b0)
  begin
    subtotal <= 7'b0000000;
  end else
  begin
    subtotal <= next_subtotal;
  end
end

endmodule
`时间刻度为1ns/1ps
模块误码率
(
中华电力有限公司,
rstn,
TX_数据[15:0],
RX_数据[15:0],
总误差[15:0],
清楚的
使可能
);
//投入
输入时钟;
输入rstn;
输入[15:0]TX\U数据;
输入[15:0]RX_数据;
输入清晰;
输入使能;
//输出
输出[15:0]总误差;
reg[4:0]i;
reg[15:0]小计,下一次小计;
分配总错误=小计;
始终@(*)开始:梳
如果(rstn==1'b0)
开始
下一步小计=0;
结束其他
如果(清除==1'b1)
开始
下一步小计=0;
结束其他
如果(启用==1'b1)
开始
对于(i=0;i<16;i=i+1)
开始
如果(发送数据[i]!=接收数据[i])
开始
下一次小计=下一次小计+1;
结束
结束
结束
结束
始终@(posedge clk)开始:dff
如果(rstn==1'b0)
开始

小计我不确定这是否是问题所在,但您有混合的端口声明样式

module ber
(
  clk,
  rstn,
  TX_Data [15:0],
...
);

//inputs
input clk;
input rstn;
input [15:0] TX_Data;
...
如果您使用此样式,则列表不应包含维度,而应仅包含名称。现代风格减少了所需代码并消除了问题:

module ber
(
  input             clk,
  input             rstn,
  input      [15:0] TX_Data,
  //...
  output reg [15:0] total_error //Direction type width and name
);

设计
错误中发现的
严重警告多驱动网络
消息和
多驱动网络通知您,在代码中,您尝试在(至少)两个不同的位置驱动网络。这是不允许的

例如,您第一次在这里驾驶
execute_in

always @( posedge clk or negedge resetn)
  begin
    if( resetn == 1'b0 )
      begin
       {execute, execute_in}           <= 2'd0;
       ...
      end
...
您需要重写逻辑,只在一个
始终
块中驱动每个网络


第二件事是端口声明样式的问题(如@Morgan所述)。

您可以为输入信号设置值!这是不允许的,您应设置输出信号的值

例如,在模块“BitErrorRate”中,“USB_2_RXData”被定义为输入

input [15:0] USB_2_RXData;
但您为该输入设置了一个值:

assign USB_2_RXData = R_Data;
要解决此问题,请将USB_2_RXData定义为输出

output [15:0] USB_2_RXData;

编译过程中你没有收到多驱动网络的
严重警告吗?@Qiu我收到了警告。我认为由于合成工作正常,所以在执行实现和生成比特流时不会出现问题。但是我不知道怎么解决它。你能解释一下如何解决这个问题吗?这个力很有帮助,仍然是同样的错误,但是谢谢你花时间在上面
assign USB_2_RXData = R_Data;
output [15:0] USB_2_RXData;