【问题标题】:Is it possible to allow multiple drivers on a wire?是否可以在一条线上允许多个驱动程序?
【发布时间】:2019-07-10 13:21:03
【问题描述】:

我正在尝试在 FPGA 上创建 CPU,但我不知道如何创建主数据总线。理想情况下,我将有一个具有多个输入和输出的线阵列,这些输入和输出在不同时间启用,但如果这样做,我会收到“多个驱动程序网络”错误。

我曾尝试使用连线、寄存器和不同的分配方法来实现这个结果,但我无法让它发挥作用,因为它本质上总是有多个输入连接。


module Top(
    input [7:0] sw,
    output [7:0] led,
    input we,
    input oe,
    input clk
    );

    wire [7:0] regData;
    Register register (regData, we, oe, clk);

    assign led = regData;
    assign regData = sw;

endmodule

确切的错误消息是“[DRC MDRV-1] Multiple Driver Nets: Net led_OBUF[0] has multiple drivers: register/led_OBUF[0]_inst_i_1/O, and sw_IBUF[0]_inst/O. " 寄存器中每个位的一个(8位)

【问题讨论】:

    标签: compiler-errors verilog


    【解决方案1】:

    这可能是您的合成器的错误,而不是您的模拟器。您没有提供足够的代码(MCVE)来显示您是否使用三态逻辑,但无论您是否使用,您都采取了错误的方法。

    过去,人们使用三态逻辑来实现总线,因为路由资源稀缺。路由资源可以通过从多个地方驱动一个网络来节省(例如,每个从设备可能驱动一个公共数据总线)。然而,三态逻辑是令人讨厌的。 (如果没有任何东西驱动总线,就会出现争用和问题。)你不想使用它,除非你需要。而且你不需要,因为在现代芯片中,路由资源很丰富。所以,不要在你的设计中使用三态逻辑;不要在设计中使用乘法驱动网络。

    改为使用传统的(单一驱动的)逻辑结构。例如,要实现一条数据总线,有单独的写入数据总线(将有一个驱动程序 - 总线主控器)和许多读取数据总线(每条数据总线将有一个驱动程序 - 每个从属设备)。然后使用传统的多路复用器对读取的数据总线进行多路复用。

    【讨论】:

      【解决方案2】:

      不,不在 FPGA 内部。
      唯一的方法是将数据总线连接到“三态”驱动程序。 但是所有现代 FPGA(和 ASIC)都禁止在芯片上使用三态。您会发现 FPGA 不再具有内部三态驱动程序(或共享总线)。要共享总线,您必须使用多路复用来组合信号。

      这样做的一种方法是在总线未使用/未激活时将其设置为全零。然后,您可以对所有总线进行逻辑或。这实际上与多路复用相同,但采用更分散的方式。

      【讨论】:

      • 希望合成器能够检测到三个状态总线并自动将它们更改为多路复用器。至少,这就是 XST 所做的。
      猜你喜欢
      • 2017-11-14
      • 1970-01-01
      • 2016-06-22
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2023-01-16
      • 2014-11-16
      相关资源
      最近更新 更多