0

我试图在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 个热编码。

4

1 回答 1

2

您的BUS输出不是 a reg,而是 a wire。要BUSIF语句中使用(always当然是在组合内)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

如果bus是电线...

module something (input en, 
                  output [15:0] bus
                 ); 
  reg [15:0] data = 16'hABCD;  // some value;
  assign bus = (en)? data : 16'hZZZZ;
endmodule
于 2013-12-15T16:57:27.943 回答