如何在Verilog中处理具有多个驱动程序的总线

如何在Verilog中处理具有多个驱动程序的总线,verilog,processor,xilinx,bus,Verilog,Processor,Xilinx,Bus,我正在尝试连接verilog中的多个模块,它们共享一个16位大小的公共“总线”。我无法将多个输入(驱动程序)连接到总线。当我附加多个驱动程序时,我在Xilinx中得到一个错误 单元{Top_Module_Name}中的信号总线连接到以下多个驱动器: 我的模块代码是 input en; output [15:0] BUS; reg [15:0] data; if (en) begin BUS = data; else BUS = 16'dZ; 在最上面的模块中,我有一些类

我正在尝试连接verilog中的多个模块,它们共享一个16位大小的公共“总线”。我无法将多个输入(驱动程序)连接到总线。当我附加多个驱动程序时,我在Xilinx中得到一个错误

单元{Top_Module_Name}中的信号总线连接到以下多个驱动器:

我的模块代码是

input         en;
output [15:0] BUS;
reg    [15:0] data;

if (en) begin BUS = data;
else BUS = 16'dZ;
在最上面的模块中,我有一些类似于

module1(en1,wBUS);
module2(en2,wBUS);
module3(en3,wBUS);

我有一个控制器控制1个热编码启用。

您的
总线
输出不是
reg
,而是
导线
。要在
IF
语句中使用
BUS
(当然,在组合
始终
语句中)
BUS
必须定义为
reg

大概是这样的:

module something (input en, 
                  output reg [15:0] bus
                 ); 
  reg [15:0] data = 16'hABCD;  // some value;

  always @* begin
    if (en)
      bus = data;
    else
      bus = 16'hZZZZ;
  end
endmodule
如果
总线
将成为一根电线

module something (input en, 
                  output [15:0] bus
                 ); 
  reg [15:0] data = 16'hABCD;  // some value;
  assign bus = (en)? data : 16'hZZZZ;
endmodule

所需的总线将是一根导线。我发誓我以前试过了,结果也出了同样的错误。现在越不管用。非常感谢你!