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的敏感量到底怎么设置呢???
恳请大家讨论能帮助指导一大批人,谢谢!!!