Systemverilog中interprocess间synchronization和communication的记录
1. 同步和通讯机制的种类
systemverilog提供了三种方式:named event type(->, @)、semaphore、mailbox。其中semaphores和mailbox虽然是built-in type,但它们是class,且可以作为base classes被扩展为更高level的class。这些built-in class放在built-in std package里,因此可以在任何scope里被使用的。
2. Semaphores(旗语)
semaphores像是一个水桶,只有获取到水桶里的key,才能继续执行。semaphores通常用于mutual exclusion、access control to shared resources和basic synchronization。
3. Mailboxes(邮箱)
mailbox是一种通讯机制,可以用于processes之间进行message的交换,data可以通过mailbox从一个进程送到另一个进程。
mailbox有bounded和un-bounded两种。Bounded mailbox在满了之后,继续put会被block住。un-bounded mailbox不会满,一直put都可以的。
mailbox也可以分为generic mailbox和Parameterized mailboxes,这两种的区别是:generic里可以放各种类型的data,因此需要在runtime时做type check,而parameterized mailbox只能放特定的type,所以compiler在编译时就进行检查的。parameterized mailboxes和parameterized class/module/interface使用同样的parameter机制,定义如下:mailbox #(type = dynamic_type)。它的内置方法和generic mailbox一模一样。
4. named events
Named event提供对潜在synchronization对象的句柄。当一个process在等待event触发时,该process会被放在synchronization对象维护的queue中。process可以通过@操作符或检查triggered state的wait()来等待named event。
wait_order可以用于检测几个event发生的顺序。
event可以通过赋值为null来释放掉,如:
另外一点就是event变量的句柄可以用logically equality和case equality来进行比较的,如: