内部通信机制 event semaphore mailbox
事件event:
同步线程
event是一个同步对象的句柄,可以当做参数传递给子程序
不需要声明为全局变量,就可以将event作为共享资源使用
触发一个事件的操作符:->和->>
等待一个事件被触发的操作符:@和wait();
triggered函数用于检查一个事件是否被触发过,返回值是一个状态
wait(event.triggered)(一个时间点)
如果在当前仿真时间内,,事件曾被触发过,语句不会被阻塞
否则,wait(event.triggered)语句会一直等待事件被触发
事件event:语句阻塞在事件的边沿
Verilog 语言中使用event同步线程,事件持续时间是事件触发的那个时间点
触发事件操作符:->(不会阻塞线程的执行)
等待事件被触发:@(边沿敏感)
事件event:等待一个事件触发
@event 是边沿敏感
wait(event.triggered) 是电平敏感
在两个线程之间通过事件同步时必须注意
如果在循环中使用wait(event.triggered),必须要保证在等待下一次循环之前更新仿真时间
否则,代码将进入0延迟的循环,将一次又一次的在单一事件触发时进行等待
阻塞事件触发
使用->操作符
触发一个事件不会阻塞当前等待该事件的所有进程
触发事件的行为边沿敏感信号
非阻塞事件触发
使用->>操作符
在事件发生的时间点创建一个非阻塞赋值
在仿真时间的非阻塞区更新事件
事件序列:wait_order()
当指定的一系列事件按照从左到右的顺序发生时,wait_order进程开始执行
如果指定的一系列事件是乱序执行的,wait_order进程将不会执行
事件变量
合并变量
event是一个独立的数据类型,可以进行赋值
当把一个事件赋值给另一个事件时,原事件与目的事件共享原事件
当把一个事件赋值给另一个事件时,两个事件合并为一个事件
当事件合并时&