a: 阻塞語句=,非阻塞語句<=,自加自減++、--,過程連續復制語句assign、deassign、force、deposit、release
b: if……else、case、casex、casez、
c: for、foreach、while、do……while、repeat、forever
d: break、continue、return、return(statement)
e: fork……join/join_any/join_none:並發結構
mailbox:實現進程通信
semaphore實現進程的互斥與仲裁
event:實現進程的同步
f: 需要知道的概念:父進程與子進程、fork和begin名、進程與變量(靜態和動態)、disable(名或fork)、wait fork。
maibox內置函數:new、put、get或peek、try_put、try_get或try_peek、num、生產進程和客戶進程、客戶進程可以掛起、參數化。
semaphore內置:new、put、get、try_get。key
event:->、->>、@、wait、事件觸發、事件觸發狀態。
1: case:做全等比較(===),而非==。
casex:case表達式中的所有x值不參與比較。
casez:case表達式中的所有的x和z都不參與比較。
priority/unique 修飾case。
2: break:跳出本層循環。
continue:調到本次循環尾部,開始下一次循環。
return:退出一個任務或void函數。
return(expression):退出一個函數並返回函數值。
3:fork……join/join_any/join_none
join:表示fork內所有進程都結束后,跳出fork主進程。
join_any:表示任一子進程結束,都跳出主進程,子進程沒結束的繼續執行。
join_none:剛進子進程便跳出主進程,子進程繼續執行。
fork表示主進程、fork內部的程序稱為子進程,可以用begin/end。
代碼:fork:aaa或者begin:bbb,表示fork名為aaa,begin名為bbb。
for循環中有fork/join_none時,SV會先做for,最后做fork,所以最后執行的子進程的變量可能為一樣,所以需要將變量定義為automatic。即SV會先執行循環體,將子進程展開后,在啟動並執行。
disable可以中止特定塊的進程;disable fork僅中止fork塊的進程,中止所有子進程。
wait fork表示等到所有的fork的主進程和子進程都執行完畢后,再執行之后的語句。
4:mailbox
可以理解為FIFO,空時讀和滿時寫都會阻塞。try_*表示非阻塞,此外,get為取走,peek為復制走。
如果為空時,去讀,會掛起,直到有數據寫入。
new時,傳參缺省或為0時,表示此mailbox是無邊界的。傳參表mailbox深度。new返回句柄,傳參必須為正,負時會導致不確定后果。
try_put,如果放入了,函數返回1,否則返回0。try_get,拿走了,返回1,數據類型不匹配,返回負1,空的返回0。try_peek類似。
num得到此mailbox內的數據的個數。
申明時,默認的mailbox無類型,可以接收各種數據,也可以申明是指定需要傳輸的數據類型,方便編譯器發現類型不匹配。
5:semaphore
key的概念。
new時,傳參缺省值為0,傳參表示key的個數。
put傳參表示放回key的個數,缺省值1.
get傳參表示獲得key的個數,缺省值1,不存在指定數目key時,進程會阻塞到對應key數量的出現。
try_get無阻塞的獲得指定數目的key,存在則返回1,否則返回0。
6:event
wait(event.triggered):等事件觸發狀態,可看成狀態觸發。
@:等事件觸發,可看成沿觸發