原创 双向口通路问题的Quartus仿真

2009-11-12 11:46 4730 3 3 分类: FPGA/CPLD

 


双向口通路问题的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平台下编译该文件并进行功能仿真可得到下面的仿真波形图:


 


66122b63-6c5c-4223-8722-fa3477f4b646.jpg


<?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线上的输出数据。


 


希望尽快找到这个问题的真相......

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条