电子大神的日记本,供应链专家的功夫茶盘,在这里记录、分享与共鸣。

登录以开始

双向口通路问题的Quartus仿真

 

双向口通路问题的Quartus仿真

 

    前一篇短文问好像没有把问题描述清楚,现在把仿真结果、关键代码贴出来一起回顾这个问题,并尝试着给出解释。

 

双向口电路基本格式:

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

 

 

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

 

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

博主
zhinvxing
zhinvxing's Blog
zhinvxing
点击跳转