VCS运行过程。
vcs仿真事件队列
第一步:将所有initial和always块和连续赋值语句读进去,将这些语句按照固定的顺应放到一个队列中。
第二步:首先执行没有延迟的语句,比如变量的初始化语句。
第三步:当这些没有延迟的语句和initial语句全部执行完,VCS工具就会将时间记为0,就是current time。
第四步:进入active region区,在这个区间首先执行User Defined Primitive(用户自定义语言),比如说与门、或门、非门;$dispaly语句;没有延迟的assign语句;阻塞赋值的全部;非阻塞赋值只将右边的表达式的值计算出来,没有完成对左边的赋值。
第五步:进入inactive region区,相当于没有#0的语句,该区域的语句执行相对晚点,这个区域主要执行#0延迟语句的。
第六步:进入 Nonblocking assign region区,该区域完成对非阻塞赋值左边的赋值。
第七步:进入monitor区,该区域主要执行monitor函数,比如说监测a的值,当a的值变化,monitor才会监测到。用monitor和display监测非阻塞赋值,monitor监测的赋值后的值,display展示的是赋值前的值。
第八步:进入future区,执行一些其他的语句。