对于硬件的过程块,不同逻辑/时序块之间的通信或者同步,实际是通过信号的变化来完成的。
对于软件的多个线程(多个task同时执行),可用如下方法解决:
静态的同步对象句柄,先等待@ or wait(event_handle.triggered),再触发→ event_handle
······························
@是阻塞的,错过操作的时间点,若没有捕捉到,就会被阻塞在那里
······························
SV中引入了triggered属性,用于查询事件是否已被触发(在当前时间片)
······························
第一个例子产生了竞争,第二个例子使用triggered都打印
······························
wait_order
等待多个事件的触发,且要求这多个事件按照用户决定顺序触发,否则执行else后的语句
对同一资源的互斥访问
进程之间交换消息,数据通过一个进程发送给mailbox,然后由另一个进程获取(先进先出)
new//产生有界无界mailbox
put & get//会阻塞
try_put & try_get//不会阻塞
peek & try_peek//拿数据后不会删除原始数据
num//mailbox中还有的数据数
mailbox #(类型)//可设置为传递固定类型