导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→很是奇怪的事情!!![lwq911]

 *第25380篇: 很是奇怪的事情!!!

  
楼 主:lwq911 2004年9月5日16:18
 很是奇怪的事情!!!
在用不同的软件仿真例子的时候出现以下怪事,请大家来讨论讨论!程序如下:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;

entity latch is  
    Port ( D:in std_logic;ENA: in std_logic;Q:out std_logic );
end entity latch;

architecture Behavioral of latch is
signal sig_save:std_logic;
begin
  process(D,ENA)
   begin 
    if ENA='1' then
    sig_save  <=D;
   end if;
     Q  <=sig_save;
  end process;  

end architecture Behavioral; 
   
1。在MAXPLUSII里,进行功能仿真的时候会,如果你在激励测试文件*.scf文件的信号D和ENA在很近的位置同时变化时(注意是比较接近的时间轴而不是在同一时刻)在编译时会出现一个提示为0周期的震荡错误!(这个是为什么呢?)避免了这个后功能仿真和时序仿真都是正确的!MAXPLUSII版本为10.2
2。在ISE6.2中,使用MODELSIM5.7g进行行为仿真的时候,就出现了很是奇怪的问题:应该是在ENA从0到1或者D发生变化时进程启动,然而其输出的Q却是在下一次进程启动时才被输出,也就是当进程启动时end if;后面的  Q  <=sig_save;被跳过,直到下一次进程启动而ENA不等于1时,才执行Q  <=sig_save,有的书上是说明在process中语句执行是顺序的,比如ENA=1,则执行到END IF;后就到了end architecture Behavioral;然后等待下一次进程启动,可是为什么在MAXPLUSII里不是这样执行的呢??而且行为仿真的时序图也不是完全满足这个关系,后面就有写位置不满足这个关系,请您仿真一下,把激励设置的稍微复杂一点,不然你看不到!!!请大家解释!!!!
3。在在ISE6.2中,如果把process(D,ENA)改为process(ENA),然后在进行,post-transate ,post-map,post-play*rout*中进行仿真,你就会看到它根本不是按程序写的那样进行仿真的,而是把D默认的加入到敏感量列表中了,然后这种情况在MAXPLUSII中不会出现,这又是为什么呢?到底PROCESS的敏感量到底怎么设置呢???

恳请大家讨论能帮助指导一大批人,谢谢!!!


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:急!急!高薪寻找硬件工程师,不然明天就死了!

[下一篇主题]:用VHDL编XILINX9500如何做一个上升/下降沿触发的单个脉冲?