在测试平台中编写一个 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;
sda
和 scl
信号是 std_ulogic
其中 "u" 代表未解决,意味着信号只能有一个驱动程序,因为有在多个驱动程序的情况下,没有附加到类型的解析函数来确定信号值。
将类型更改为std_logic
具有标准分辨率功能的类型,例如:
signal sda: std_logic;
signal scl: std_logic;
您可以在 here 中寻找 "VHDL resolution function" 的一些描述,或者搜索它。
我目前正在进行一个项目,我想在其中实现双向总线。对于这个项目,我得到了一个我不应该编辑的实体。 该实体有两个输入输出端口(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;
sda
和 scl
信号是 std_ulogic
其中 "u" 代表未解决,意味着信号只能有一个驱动程序,因为有在多个驱动程序的情况下,没有附加到类型的解析函数来确定信号值。
将类型更改为std_logic
具有标准分辨率功能的类型,例如:
signal sda: std_logic;
signal scl: std_logic;
您可以在 here 中寻找 "VHDL resolution function" 的一些描述,或者搜索它。