SV中的线程
SV中线程之间的通信可以让验证组件之间更好的传递transaction。 SV对verilog建模方式的扩展:1) fork.....join 必须等到块内的所有线程都执行结束后,才能继续执行块后的语句。(所以使用的很少) 2) fork.....join_none 先执行块后的线程,而后再执行块内的线程。不会产生块后的线程必须等块内线程的情形。 3) fork.....join_any 只要块内的线程有一个执行结束,就执行块之后的线程。 需要说明一下,begin.....end之间的顺序操作,只要先前的进程已经开始执行,那之后的进程就会开始执行。在2例中a = b线程先于c = a线程执行,但俩者都是在 零时刻执行,因为阻塞赋值都是一个仿真时间区域,所以最后的结果是c = b;如果改成a <= b;因为同一个仿真时刻,阻塞赋值在非阻塞赋值之前,所 以最后的结果是c = a; a <= b; ( 未仿真检测 ) 在例1中,0时刻a = b线程被#2阻塞,c=a线程因为a = b还未执行结束也阻塞。2个仿真单位之后,a=b线程结束,开始c = a线程,被#3阻塞,又 过3个仿真单位后,执行结束。 begin begin #2 a = b; a = b; #3 c = a; c = a; end end 线程中的自动变量:两种用法,#0会阻塞$display任务