首页 > 解决方案 > 是否可以在一条线上允许多个驱动程序?

问题描述

我正在尝试在 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-errorsverilog

解决方案


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

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


推荐阅读