课程链接:https://www.bilibili.com/video/BV1k7411H7Jo?p=23
在Verilog中,initial和always都可以看做独立的线程,always线程会一直占用仿真的资源,因为它们并不会结束。而验证环境中的线程都为initial线程,在仿真过程中,这些线程可以销毁,因此验证过程中的资源分布是动态的。
在initial语句中,有两种分组方式。一种是begin…end,一种是fork…join。前者是顺序执行,后者是并行执行。
SV新引入的fork…join_none和fork…join_any。在进入fork…join语句后,语句内的进程被同时执行。第一种情况表明只有在语句块中所有的进程全部完成,才会跳出语句块。第二种情况表明只需最短地进程完成就可以跳出语句块。第三种情况表明不需要等待任何进程完成就可以继续执行接下来的程序。
这种方法和fork…jion有什么区别?不懂。
这里的disable fork保证了最短的线程结束后另外两个线程能停止,避免了不需要的线程对仿真资源的浪费。