是否可以在一个线路上允许多个驱动程序?

时间:2019-07-10 13:21:03

标签: compiler-errors verilog

我正在尝试在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]多个驱动程序网络:网络led_OBUF [0]具有多个驱动程序:寄存器/ led_OBUF [0] _inst_i_1 / O和sw_IBUF [0] _inst / O。 ” 寄存器中每个位之一(8位)

2 个答案:

答案 0 :(得分:1)

大概这是您的综合器而不是模拟器的错误。您没有提供足够的代码(MCVE)来显示您是否正在使用三态逻辑,但是无论您是否使用三态逻辑,您都将采用错误的方法。

过去,人们因为路由资源稀缺而使用三态逻辑来实现总线。可以通过从多个地方驱动网络来节省路由资源(例如,每个从站可能已经驱动了一条公共数据总线)。但是,三态逻辑令人讨厌。 (这是由争用引起的问题,如果没有什么驱动总线,则会出现问题。)您不需要使用它,除非需要。而且您不需要,因为在现代芯片中,路由资源非常丰富。因此,不要在设计中使用三态逻辑。不要在设计中使用乘法驱动的网。

代替使用常规(单驱动)逻辑结构。例如,要实现数据总线,请使用单独的写数据总线(将有一个驱动程序-总线主控器)和许多读数据总线(其中的每一个将有一个驱动器-每个从机)。然后使用常规的多路复用器对读取的数据总线进行多路复用。

答案 1 :(得分:1)

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

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