System Verilog验证第七章笔记 - 进程间通信


IPC

IPC(inter process communicate)方法有:event(@,->),wait/disable,mailbox,semaphore。

线程结构

Verilog的线程结构有begin...end,fork...join。
System Verilog新增的fork...join_none,fork...join_any。

fork...join_none块后的语句默认早于块内的任何语句。
并发线程中务必使用automatic变量。
推荐用disable label的方法来停止命名线程,比disable fork指向性更明确。

事件

最常用于把事件传递到一个对象的构造器中。
wait(some_event.triggered)电平敏感类似于@some_event的边沿敏感,会检查当前整个时间步,减少了竞争,但是要注意防止零延时循环。

旗语

常用于总线互斥访问。
new,1个或多个钥匙。
get。
put。
try_get,1表示有足够的钥匙。

信箱

可看作有发端和收端的FIFO。
new,0或默认指无穷大。
put。
get。
peek。
try_get,1表示执行成功。
try_peek,1表示执行成功。

定容信箱和peek可以实现线程间同步,接收端先peek处理完再get,这时发端就知道处理完成了。

信箱内可以放入句柄,但不能是对象。所以循环体要确保每次循环都有构造对象/随机化/送入信箱的完整步骤,避免实际送入信箱的都是最后一次循环的数据。

 

你可能感兴趣的:(芯片验证)