Hello everybody,我們接著上期的Process(1)-產生進程的方式繼續講解SystemVerilog中對于process的多種控制方式。 本期黃鴨哥主要給大家講解 named block、wait_order、wait_fork、disable,還有SystemVerilog中的內建類:process類。
1
Namedblock
Block,也就是語句塊,SystemVerilog提供了兩種類型的語句塊,分別是begin…end為代表的順序語句塊,還有以fork…join為代表的并發語句塊。 這兩種block都是工程項目中常用的block,但是,大家可能都不知道block也是可以命名的,就像我們每個人的名字一樣,名字是我們每個人的一個標識。 通過這個標識,我們可以訪問block中的變量、parameter等。
圖1
圖1中,initial begin…end中有兩個named block,分別為順序執行的block_a和并發執行的block_b。
我們可以通過在block的開頭和結束編寫上標識名,也可以只在開頭進行編寫;
如果是在block的開頭和結束都有對應的標識名,則這兩標識名必須相同,否則會編譯報錯。
圖2
從圖1和圖2中我們還可以看到,int類型的變量和parameter的作用范圍都是在各自block范圍內的。
所以,我們要記住,如果需要訪問block中的變量或者parameter,則需要給block進行命名,并且,block中的變量、parameter都是相互獨立的。
2
wait_order、wait fork
SystemVerilog提供了兩大類process的控制方式,分別為wait和disable。 wait中又包含了三小類:wait、wait_order、wait fork。 其中,wait相對簡單,在這就不說了,黃鴨哥只介紹后兩種。 那么,什么是wait_order? 黃鴨哥總結一句:wait_order會阻塞等待多個事件的觸發,并且要求這幾個事件間發生的順序和設置的一致。 這句話該怎么理解呢?我們來看下例子:
圖3
例子中包含3個event,3個event分別在3個并發進程中進行觸發,event_1在第50個timeunit被觸發,event_2在第30個timeunit被觸發,event_3在第100個timeunit的時候被觸發。
wait_order需要阻塞到3個事件依次按照event_2、event_1、event_3的順序進行觸發后才能往下執行。這就是wait_order的用法。
wait中另外一個重要的用法是wait fork,關于它的用法,黃鴨哥總結了三句話:
① wait fork會引起調用進程阻塞,直到它的所有子進程結束;
② wait fork的目的是用來確保所有子進程執行結束;
③ wait fork作用父進程下的子進程,而不包括子進程下的子進程。
圖4
圖4中initial語句塊包含4個子進程,proc_1~proc_4。
其中,proc_4子進程中還含有一個子進程proc_4_1,此進程就是initial語句塊的子進程的子進程。
按照上面黃鴨哥總結的三點來看,wait fork應該只需要等待到第2個子進程:proc_2執行結束,因為wait fork只會作用到子進程,不會作用到子進程的子進程(不論是fork…join,fork…join_any還是fork…join_none產生的進程)。
我們來看下仿真結果驗證下我們的理論:
圖5
果然,wait fork只等待到proc_2,在第200個timeunit就打印出了“wait fork finish”。
3
disable 、disable fork
上面說完了wait,我們接著說SystemVerilog中第二大類的進程控制方式:disable。 disable語句常用的多種方式包括:disable named_block、disable task_name和disable fork等,調用disable語句將會終止指定的進程。
圖6
圖6里調用了disable,終止了對應的帶標識名的block,從仿真截圖中可以看出,block_1并沒有正常結束,而是中途被終止了。
圖7
上圖中disable proc_a相當于return,它會直接終止當前的task。
而關于disable fork,這個是我們工程項目中使用的最多的一類,也是最容易踩坑的一類,disable fork的用法我推薦大家學習下Q哥的一篇文章:disable fork,你真的會用嗎?
感興趣的同學可以點進去看看,他在里面有很詳細的描述,黃鴨哥在這里就不多說了。
4
內建類:process
SystemVerilog中內建了一種class,可以對進程進行訪問和控制,此種class就是process,我們先來看下process類的原型:
圖8
process類中定義了一個枚舉變量state,表示當前進程的幾種執行狀態:FINISHED,RUNNING,WAITING,SUSPENDED,KILLED。
另外,還聲明了幾種task和function,我們通過下面的表格來簡單了解下:
表1
有人會問了,這么多的method,我們都該記住嗎?
黃鴨哥覺得不是的,只需要記住這里面常用的幾個method:self(),status(),kill()就可以了,我們最后再來看個例子,加深下理解:
Method | Describe |
self() | 獲取當前進程的句柄,process類不能主動的通過new來進行創建,只能通過initial…begin…end,final…begin…end,4個always procedure,3個fork procedure和dynamic process來產生 |
status() | 獲取當前進程的狀態:FINISH: 該進程已經結束了RUNNING: 該進程正在運行WAITING: 該進程等待阻塞條件SUSPENDED:該進程停止了,等待resume,當前狀態只能通過調用process類中的resume函數來解除KILLED: 該進程被強制終止了 |
kill() | 終止該進程以及該進程的子進程 |
await() | 等待其他進程結束,不能在該進程中,調用該方法,只能是別的進程調用本進程的await()來阻塞本進程 |
suspend() | 掛起該進程 |
resume() | 恢復該進程 |
srandom(int seed) | 設置進程的隨機種子 |
圖9
圖10
圖9展示了這三個method的用法,通過self()獲取進程的句柄,然后傳遞給定義的兩個process類;
調用status()可以獲取到process_1和process_2進程的執行狀態,在100個timeunit的時候,process_1已經執行結束,而process_2則處于阻塞狀態;
當再次經過100個timeunit時,調用kill()終止了process_2的繼續執行,從這里可以看出,要終止一個進程,除了disable、disable fork之外,還可以調用process.kill()。
總結
process就講到這了,我們再回顧下今天的要點: 1、block可以進行命名,命名之后就可以通過標識名訪問block內部的變量和parameter,還可以通過disable named_block終止此block。 2、進程的兩大控制方式:wait、disable。 3、SystemVerilog內建類,process類,可以通過process類訪問進程和控制進程。 4、三種終止進程的方式:disable、disable fork、process.kill()。 審核編輯 :李倩
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
Verilog
+關注
關注
28文章
1364瀏覽量
111613 -
Block
+關注
關注
0文章
26瀏覽量
14874 -
Process
+關注
關注
0文章
17瀏覽量
12262
原文標題:扒一扒SystemVerilog中的Process之進程控制
文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
FinFet Process Flow-源漏極是怎樣形成的
本文介紹了FinFet Process Flow-源漏極是怎樣形成的。 在FinFET制造工藝中,當完成偽柵極結構后,接下來的關鍵步驟是形成源漏極(Source/Drain)。這一階段對于確保器件

FinFet Process Flow—啞柵極的形成
了FinFET的柵極寬度,這對于控制電流流動至關重要。在22nm及以下技術節點中,由于鰭片尺寸非常小,通常通過SADP(Self-Aligned Double Patterning)或SAQP

伺服電機的控制方式有哪些?舉例分析
伺服電機是一種高精度的電機,廣泛應用于工業自動化、機器人、精密機械等領域。伺服電機的控制方式多種多樣,可以根據不同的應用場景和需求進行選擇。以下是一些常見的伺服電機控制
PLC多種通訊方式匯總學習~
PLC的通訊功能是其連接設備、控制系統和外部系統的重要組成部分。PLC支持多種通訊方式,本文將講述PLC常見的通訊方式及其優缺點,別再傻傻分不清楚~ 一.點對點通訊(P2P) 點對點通

PLC中的邏輯運算方式有哪些
PLC(可編程邏輯控制器)中的邏輯運算方式主要包括以下幾種,這些邏輯運算在PLC編程中扮演著至關重要的角色,用于實現各種復雜的控制邏輯。
工業自動化中的控制方式
工業自動化是現代工業發展的重要標志,它極大地提高了生產效率,降低了生產成本,并改善了產品質量。在工業自動化中,控制方式作為實現自動化控制的關鍵環節,其重要性不言而喻。本文將詳細介紹工業
PLC連接電腦的多種方式
隨著工業自動化技術的不斷發展,可編程邏輯控制器(PLC)作為工業自動化領域的核心設備,其重要性日益凸顯。PLC與電腦之間的連接是工業自動化系統中不可或缺的一環,它們之間的連接方式多種多
CubeIDE生成的代碼框架會卡在MX_X_CUBE_AI_Process()函數中是怎么回事?
當我將網絡模型部署到STM32F407VGT6中時,CubeIDE生成的代碼框架會卡在MX_X_CUBE_AI_Process()函數中是怎么回事?CUbeAI庫的版本是9.0。期待您的回復,謝謝
發表于 05-30 06:11
變頻器常用的控制方式詳解
變頻器作為現代工業自動化領域的核心設備,其控制方式直接決定了電機的運行效率和穩定性。隨著技術的不斷發展,變頻器的控制方式也日益多樣化。本文將詳細解析變頻器常用的
評論