在测试平台中编写一个 inout 端口

Write an inout Port in a testbench

我目前正在进行一个项目,我想在其中实现双向总线。对于这个项目,我得到了一个我不应该编辑的实体。 该实体有两个输入输出端口(sda 和 scl)。 我现在想通过 inout 端口 sda 从 TestBench 写入实体。为此,我为连接到 sda 的信号分配了一个值。

当我执行此操作时,我得到了未解析信号 sda 有多个来源的错误。一种是分配的值,一种是实体本身。 我不明白如何在不触发此错误的情况下为这个 inout 端口赋值。

这个问题有快速解释吗?否则,哪些流行语可用于搜索此问题的解决方案?

我的代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity i2c_slave_tb is
end i2c_slave_tb;

architecture arch of i2c_slave_tb is
-- signal declaration
-- sim signals

-- uut signals
signal sda: std_ulogic;
signal scl: std_ulogic;

begin  -- arch

  uut : entity work.i2c_slave
    port map (
    sda=>sda,
    scl=>scl
    );

  stim_gen :process 
  begin
    wait for 10 ns;
    sda<='1';
    wait;
  end process stim_gen;  

end arch;

sdascl 信号是 std_ulogic 其中 "u" 代表未解决,意味着信号只能有一个驱动程序,因为有在多个驱动程序的情况下,没有附加到类型的解析函数来确定信号值。

将类型更改为std_logic具有标准分辨率功能的类型,例如:

signal sda: std_logic;
signal scl: std_logic;

您可以在 here 中寻找 "VHDL resolution function" 的一些描述,或者搜索它。