An issue regarding multiple drivers on a wire, error: [DRC MDRV-1] Multiple Driver Nets: Net led_OBUF[0] has multiple drivers: led_OBUF[0]_inst_i_1/O

An issue regarding multiple drivers on a wire, error: [DRC MDRV-1] Multiple Driver Nets: Net led_OBUF[0] has multiple drivers: led_OBUF[0]_inst_i_1/O

我正在创建一个简单的 VHDL 代码,它应该使用 8 个输入(每个输入 4 个)创建两个 4 位二进制数(A 和 B),然后根据按下的三个按钮之一执行逻辑功能A 和 B,AND、OR 或 XOR。

我担心的是我正在尝试将多个输入信号映射到一个端口,并将多个输出信号映射到一个端口,但是我的困惑在于我已经成功地实现了一个非常相似的描述而没有任何错误,我会在最后展示非错误描述。如果我的怀疑是正确的,请有人向我解释为什么底部代码没有出现错误?

有错误的代码:

use IEEE.STD_LOGIC_1164.ALL;

entity Lab_2_Source_File is
port(A : in STD_LOGIC_VECTOR(3 downto 0);
     B : in STD_LOGIC_VECTOR(3 downto 0);
     btnd : in STD_LOGIC;
     btnl : in STD_LOGIC;
     btnr : in STD_LOGIC;
     led : out STD_LOGIC_VECTOR(3 downto 0)
     );
end Lab_2_Source_File;


architecture Behavioral of Lab_2_Source_File is
begin 

process(btnd)
begin
led(0) <=A(0) and B(0);
led(1) <=A(1) and B(1);
led(2) <=A(2) and B(2);
led(3) <=A(3) and B(3);
end process;

process(btnl)
begin
led(0) <=A(0) or B(0);
led(1) <=A(1) or B(1);
led(2) <=A(2) or B(2);
led(3) <=A(3) or B(3);
end process;

process(btnr)
begin
led(0) <=A(0) xor B(0);
led(1) <=A(1) xor B(1);
led(2) <=A(2) xor B(2);
led(3) <=A(3) xor B(3);
end process;

end Behavioral;

我相应地修改了约束文件


set_property -dict { PACKAGE_PIN T14   IOSTANDARD LVCMOS25 } [get_ports { led }]; #IO_L15P_T2_DQS_13 Sch=led[0]

## Switches

set_property -dict { PACKAGE_PIN E22  IOSTANDARD LVCMOS12 } [get_ports { A }]; #IO_L22P_T3_16 Sch=sw[0]

set_property -dict { PACKAGE_PIN F21  IOSTANDARD LVCMOS12 } [get_ports { B }]; #IO_25_16 Sch=sw[1]

这里是错误

[DRC MDRV-1] 多个驱动程序网络:网络 led_OBUF[0] 有多个 drivers:led_OBUF[0]_inst_i_1/O,led_OBUF[0] _inst_i_3/O,以及 led_OBUF[0]_inst_i_2/O.

第二个代码,没有错误。我显示此代码是因为我不确定如何将 4 个输入 (3 downto 0) 映射到单个输入。我已经使用约束文件中的原始端口名称命名了端口。

port(sw0 : in STD_LOGIC_VECTOR(3 downto 0);
led0: out STD_LOGIC_VECTOR(3 downto 0)
);

end Lab_2_Source_File;

architecture Behavioral of Lab_2_Source_File is
begin 

process(sw0) 
begin 

led0<=sw0;

end process; 
end Behavioral;

如上所述,这个错误让我相信这是由于试图将多个信号映射到 LED 输出,然而虽然这是有道理的,但我很困惑,因为当我映射多个信号时不会发生同样的错误信号到其他代码的输出。请有人帮我解释一下是怎么回事吗?

the error leads me to beleive that it is due to trying to map multiple signals to the led output

这是正确的。

however whilst this makes sense, I am confused as the same error does not occur when I map multiple signals to the output on the other code.

在最后一个例子中,

led0<=sw0;

led0(0) 的唯一驱动程序是 sw0(0)led0(1) 的唯一驱动程序是 sw0(1),依此类推。所以没有一个网络有多个驱动程序,如第一个例子,这就是没有错误的原因。