【发布时间】:2009-11-30 15:39:30
【问题描述】:
考虑:流程(a) 根据我的文字:
此时第一次进入一个进程 的模拟,此时它是 执行,直到它暂停自己由于 等待声明或敏感性 列表。
我是否正确地推断即使敏感列表上没有任何事件,进程也必须运行一次?另外,如果一个架构中有多个进程,它们是否都执行一次呢?
【问题讨论】:
-
是的,我知道一个进程总是处于活动状态/等待状态。我要问的是它里面的顺序语句在模拟时是否运行一次?
考虑:流程(a) 根据我的文字:
此时第一次进入一个进程 的模拟,此时它是 执行,直到它暂停自己由于 等待声明或敏感性 列表。
我是否正确地推断即使敏感列表上没有任何事件,进程也必须运行一次?另外,如果一个架构中有多个进程,它们是否都执行一次呢?
【问题讨论】:
AFAIK,敏感度列表(例如,process (x,y))只是wait on x,y; 的简写,就在程序的end process 之前(第 152 页,“VHDL 设计师指南”第 3 版)。所以所有程序都会至少运行一次。
【讨论】:
运行 VHDL 仿真涉及 3 个阶段。这些是细化、初始化和模拟。
在初始化阶段开始时,当前时间设置为 0。然后模拟内核将所有模拟进程放入活动进程队列中。然后从这个队列中取出每个模拟过程并执行,直到它挂起。初始化期间模拟过程的执行顺序并不重要。每个模拟过程的初始执行确保所有初始事务都安排好,以便模拟可以继续。
模拟过程被隐式或显式挂起。具有敏感性列表的进程在其顺序语句执行到进程结束后隐式挂起。具有一个或多个等待语句的进程在执行其第一个等待语句时显式挂起。
当活动进程队列为空时,初始化阶段完成。
所以为了回答您的问题,所有进程将在初始化阶段运行一次。
【讨论】: