双向口通路问题的Quartus仿真<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
前一篇短文问好像没有把问题描述清楚,现在把仿真结果、关键代码贴出来一起回顾这个问题,并尝试着给出解释。
双向口电路基本格式:
ENTITY bidir_pin IS
Port (
bidir : INOUT std_logic_vector(3 downto 0);
from_core : IN std_logic_vector(3 downto 0);
oe :in std_logic;
to_core : OUT _vector(3 downto 0)
) ;
END bidir_pin;
ARCHITECTURE behavior OF bidir_pin IS
BEGIN
bidir <= from_core WHEN oe=’1’ ELSE “ZZZZ”; --输出口。 oe为’0’时三态门为高阻,此时bidir为输入端口。
to_core <= bidir; --输入。 注意这里并没有用oe条件去刻画输入端口,有一种默认的意味在里面。
END behavior;
在Quartus平台下编译该文件并进行功能仿真可得到下面的仿真波形图:
<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />
图1 双向口功能仿真图形
从图中可见,当oe不等于’1’ 时,to_core <= bidir是成立的,也就是说此时bidir作为输入端口。对于oe为'1'时的情形,如果按照事先设想,bidir应为输出端口,将执行bidir <= from_core操作,也就是上图中红色圈中的”uuuu”应被下方蓝色圈中的数据取代,从结果可见上面的设想并没有实现。bidir仍旧保持为”uuuu”,换句话说bidir此时并没有成为输出端口。
还有一个疑点,当oe=’1’时,用to_core上却在bidir的端口上(此时bidir作输出口)读到高阻态。按道理说,此时to_core没有被使用(应为此时bidir作为输出口而不是输入口),但仿真中却读到高阻态,而且和不知何故产生的bidir~result相同,真是让人莫名其妙!
织女星同学猜测产生这个现象的原因要么是Quartus不能对双向口inout进行输出仿真,也就是无法在bidir作为输出口时观察bidir线上输出的from_core数据;要么就是需要在代码中添加寄存器来读出bidir线上的输出数据。
希望尽快找到这个问题的真相......
文章评论(0条评论)
登录后参与讨论