Event是靜態物件,用來同步兩個或更多個運行中的process,一個process會觸發Event,其他process等待(wait)這個event。
Event的宣告方式
1 | Event evt; |
Event的使用方式:
觸發Event: 用 -> 或 ->> 運算元
等待Event: 用 @ 運算元 或 .triggered
Example:
1 | module tb(); |
Output:
1 | # 2 t:0 start to polling event |
@ 和 .triggered的差別
如果同一時間觸發event和等待event的話會有race condition的問題,如果是使用wait(event.triggered)可以避免發生問題
Example:
1 | module tb(); |
Output:
1 | # run 1000 |
可以看見使用@evt的話,因為同一時間觸發Event和用@等待event,所以第二個initial block沒有收到event