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

* 61705: 很是奇怪的事情!!!

   lwq911 
lwq911发表的帖子 

 很是奇怪的事情!!!
在用不同的软件仿真例子的时候出现以下怪事,请大家来讨论讨论!程序如下:
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的敏感量到底怎么设置呢???

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

发表时间:2004年9月5日16:18:18

  
回复该帖

本主题共有 1 帖,分页:>>>>>该主题的所有内容[1]条

 *树形目录 只列出部分跟帖的标题以及简单的摘要信息 该主题的部分跟帖如下:

[上一篇帖子]:sdss
[下一篇帖子]:用VHDL编XILINX9500如何做一个上升/下降沿触发的单个脉冲?我在用XILINX9500XL