逻辑仿真工具的并发操作特性
线程:fork...join|join_any|join_none
wait fork
disable fork
SystemVerilog 并发编程
只有begin...end语句是串行执行的(除了里面的非阻塞赋值语句),其他语句块都是并行执行;
一个线程执行时,只有遇到wait、#、@语句时才会停止。
当一个线程执行时,其它所有的线程进入队列等待
READY -表示在当前仿真时间内执行的线程
WAIT -表示语句被阻塞,当遇到等待条件后可以继续执行
当正在执行的线程进入WAIT状态时,线程进入WAIT序列,下一个READY状态的线程继续执行
当所有的线程进入WAIT状态时,仿真时间步进到下一个仿真周期
语句集合
Verilog典型并发语句集合
initial语句:在整个仿真时间内只执行一次,initial语句都是并发的
always语句:可以对组合电路和时序电路进行建模,always语句都是并发的
assign语句:可以对组合电路进行建模,assign语句都是并发的
begin...end:语句从上往下,顺序执行
fork...join:语句并行执行,与语句顺序无关,所有子线程共享父线程的变量
fork...join|join_any|join_none区别
fork statement 1; statement 2; join|join_any|join_none statement3; |
join -子线程statement1和statement2并行执行,并且必须在statement3执行之前完成。
-即所有子线程执行完成后,父线程才会继续执行
join_any -子线程statement1和statement2并行执行,在statement3执行之前,有一个子线程完成即可
-即任何一个子线程执行完成后,父线程继续执行,当父线程执行遇到阻塞语句(或执行完)时,子线程才继续执行
join_none -线程statement3执行,所有子线程与父线程并行执行
wait fork
等待所有的fork并发进程执行完成
在执行父进程之前,确保所有的fork并发子线程执行完成
等待所有的fork并发子线程全部执行完成
disable fork
停止fork所有并发子线程的执行,调用task中的disable fork也会停止,当前的子进程