Hello everybody,我們接著上期的Process(1)-產(chǎn)生進(jìn)程的方式繼續(xù)講解SystemVerilog中對于process的多種控制方式。
本期黃鴨哥主要給大家講解 named block、wait_order、wait_fork、disable,還有SystemVerilog中的內(nèi)建類:process類。
1
Namedblock
Block,也就是語句塊,SystemVerilog提供了兩種類型的語句塊,分別是begin…end為代表的順序語句塊,還有以fork…join為代表的并發(fā)語句塊。
這兩種block都是工程項(xiàng)目中常用的block,但是,大家可能都不知道block也是可以命名的,就像我們每個人的名字一樣,名字是我們每個人的一個標(biāo)識。
通過這個標(biāo)識,我們可以訪問block中的變量、parameter等。
圖1
圖1中,initial begin…end中有兩個named block,分別為順序執(zhí)行的block_a和并發(fā)執(zhí)行的block_b。
我們可以通過在block的開頭和結(jié)束編寫上標(biāo)識名,也可以只在開頭進(jìn)行編寫;
如果是在block的開頭和結(jié)束都有對應(yīng)的標(biāo)識名,則這兩標(biāo)識名必須相同,否則會編譯報錯。
圖2
從圖1和圖2中我們還可以看到,int類型的變量和parameter的作用范圍都是在各自block范圍內(nèi)的。
所以,我們要記住,如果需要訪問block中的變量或者parameter,則需要給block進(jìn)行命名,并且,block中的變量、parameter都是相互獨(dú)立的。
2
wait_order、wait fork
SystemVerilog提供了兩大類process的控制方式,分別為wait和disable。
wait中又包含了三小類:wait、wait_order、wait fork。
其中,wait相對簡單,在這就不說了,黃鴨哥只介紹后兩種。
那么,什么是wait_order?
黃鴨哥總結(jié)一句:wait_order會阻塞等待多個事件的觸發(fā),并且要求這幾個事件間發(fā)生的順序和設(shè)置的一致。
這句話該怎么理解呢?我們來看下例子:
圖3
例子中包含3個event,3個event分別在3個并發(fā)進(jìn)程中進(jìn)行觸發(fā),event_1在第50個timeunit被觸發(fā),event_2在第30個timeunit被觸發(fā),event_3在第100個timeunit的時候被觸發(fā)。
wait_order需要阻塞到3個事件依次按照event_2、event_1、event_3的順序進(jìn)行觸發(fā)后才能往下執(zhí)行。這就是wait_order的用法。
wait中另外一個重要的用法是wait fork,關(guān)于它的用法,黃鴨哥總結(jié)了三句話:
① wait fork會引起調(diào)用進(jìn)程阻塞,直到它的所有子進(jìn)程結(jié)束;
② wait fork的目的是用來確保所有子進(jìn)程執(zhí)行結(jié)束;
③ wait fork作用父進(jìn)程下的子進(jìn)程,而不包括子進(jìn)程下的子進(jìn)程。
圖4
圖4中initial語句塊包含4個子進(jìn)程,proc_1~proc_4。
其中,proc_4子進(jìn)程中還含有一個子進(jìn)程proc_4_1,此進(jìn)程就是initial語句塊的子進(jìn)程的子進(jìn)程。
按照上面黃鴨哥總結(jié)的三點(diǎn)來看,wait fork應(yīng)該只需要等待到第2個子進(jìn)程:proc_2執(zhí)行結(jié)束,因?yàn)閣ait fork只會作用到子進(jìn)程,不會作用到子進(jìn)程的子進(jìn)程(不論是fork…join,fork…join_any還是fork…join_none產(chǎn)生的進(jìn)程)。
我們來看下仿真結(jié)果驗(yàn)證下我們的理論:
圖5
果然,wait fork只等待到proc_2,在第200個timeunit就打印出了“wait fork finish”。
3
disable 、disable fork
上面說完了wait,我們接著說SystemVerilog中第二大類的進(jìn)程控制方式:disable。
disable語句常用的多種方式包括:disable named_block、disable task_name和disable fork等,調(diào)用disable語句將會終止指定的進(jìn)程。
圖6
圖6里調(diào)用了disable,終止了對應(yīng)的帶標(biāo)識名的block,從仿真截圖中可以看出,block_1并沒有正常結(jié)束,而是中途被終止了。
圖7
上圖中disable proc_a相當(dāng)于return,它會直接終止當(dāng)前的task。
而關(guān)于disable fork,這個是我們工程項(xiàng)目中使用的最多的一類,也是最容易踩坑的一類,disable fork的用法我推薦大家學(xué)習(xí)下Q哥的一篇文章:disable fork,你真的會用嗎?
感興趣的同學(xué)可以點(diǎn)進(jìn)去看看,他在里面有很詳細(xì)的描述,黃鴨哥在這里就不多說了。
4
內(nèi)建類:process
SystemVerilog中內(nèi)建了一種class,可以對進(jìn)程進(jìn)行訪問和控制,此種class就是process,我們先來看下process類的原型:
圖8
process類中定義了一個枚舉變量state,表示當(dāng)前進(jìn)程的幾種執(zhí)行狀態(tài):FINISHED,RUNNING,WAITING,SUSPENDED,KILLED。
另外,還聲明了幾種task和function,我們通過下面的表格來簡單了解下:
Method |
Describe |
self() |
獲取當(dāng)前進(jìn)程的句柄,process類不能主動的通過new來進(jìn)行創(chuàng)建,只能通過initial…begin…end,final…begin…end,4個always procedure,3個fork procedure和dynamic process來產(chǎn)生 |
status() |
獲取當(dāng)前進(jìn)程的狀態(tài):FINISH: 該進(jìn)程已經(jīng)結(jié)束了RUNNING: 該進(jìn)程正在運(yùn)行WAITING: 該進(jìn)程等待阻塞條件SUSPENDED:該進(jìn)程停止了,等待resume,當(dāng)前狀態(tài)只能通過調(diào)用process類中的resume函數(shù)來解除KILLED: 該進(jìn)程被強(qiáng)制終止了 |
kill() |
終止該進(jìn)程以及該進(jìn)程的子進(jìn)程 |
await() |
等待其他進(jìn)程結(jié)束,不能在該進(jìn)程中,調(diào)用該方法,只能是別的進(jìn)程調(diào)用本進(jìn)程的await()來阻塞本進(jìn)程 |
suspend() |
掛起該進(jìn)程 |
resume() |
恢復(fù)該進(jìn)程 |
srandom(int seed) |
設(shè)置進(jìn)程的隨機(jī)種子 |
表1
有人會問了,這么多的method,我們都該記住嗎?
黃鴨哥覺得不是的,只需要記住這里面常用的幾個method:self(),status(),kill()就可以了,我們最后再來看個例子,加深下理解:
圖9
圖10
圖9展示了這三個method的用法,通過self()獲取進(jìn)程的句柄,然后傳遞給定義的兩個process類;
調(diào)用status()可以獲取到process_1和process_2進(jìn)程的執(zhí)行狀態(tài),在100個timeunit的時候,process_1已經(jīng)執(zhí)行結(jié)束,而process_2則處于阻塞狀態(tài);
當(dāng)再次經(jīng)過100個timeunit時,調(diào)用kill()終止了process_2的繼續(xù)執(zhí)行,從這里可以看出,要終止一個進(jìn)程,除了disable、disable fork之外,還可以調(diào)用process.kill()。
總結(jié)
process就講到這了,我們再回顧下今天的要點(diǎn):
1、block可以進(jìn)行命名,命名之后就可以通過標(biāo)識名訪問block內(nèi)部的變量和parameter,還可以通過disable named_block終止此block。
2、進(jìn)程的兩大控制方式:wait、disable。
3、SystemVerilog內(nèi)建類,process類,可以通過process類訪問進(jìn)程和控制進(jìn)程。
4、三種終止進(jìn)程的方式:disable、disable fork、process.kill()。
審核編輯 :李倩
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
原文標(biāo)題:扒一扒SystemVerilog中的Process之進(jìn)程控制
文章出處:【微信號:Rocker-IC,微信公眾號:路科驗(yàn)證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
相關(guān)推薦
伺服電機(jī)是一種高精度的電機(jī),廣泛應(yīng)用于工業(yè)自動化、機(jī)器人、精密機(jī)械等領(lǐng)域。伺服電機(jī)的控制方式多種多樣,可以根據(jù)不同的應(yīng)用場景和需求進(jìn)行選擇。以下是一些常見的伺服電機(jī)控制
發(fā)表于 10-22 11:13
?418次閱讀
PLC的通訊功能是其連接設(shè)備、控制系統(tǒng)和外部系統(tǒng)的重要組成部分。PLC支持多種通訊方式,本文將講述PLC常見的通訊方式及其優(yōu)缺點(diǎn),別再傻傻分不清楚~ 一.點(diǎn)對點(diǎn)通訊(P2P) 點(diǎn)對點(diǎn)通
發(fā)表于 09-25 09:09
?324次閱讀
工業(yè)機(jī)器人的控制方式多種多樣,這些方式根據(jù)作業(yè)任務(wù)的不同而有所區(qū)別。主要可以分為以下幾種:點(diǎn)位控制方式
發(fā)表于 09-04 09:31
?931次閱讀
智能家居的控制方式多種多樣,這些方式不僅提升了家居生活的便捷性,還使得家居環(huán)境更加智能化和個性化。以下是智能家居的主要控制
發(fā)表于 07-23 14:30
?1297次閱讀
控制器是自動化控制系統(tǒng)中的核心部件,負(fù)責(zé)接收傳感器信號、處理數(shù)據(jù)、發(fā)出控制指令,以實(shí)現(xiàn)對被控對象的精確控制。
發(fā)表于 06-30 10:35
?1248次閱讀
控制閥是工業(yè)自動化系統(tǒng)中的重要組成部分,其主要作用是控制流體的流量、壓力、溫度等參數(shù),以滿足生產(chǎn)過程的需要。控制閥的控制
發(fā)表于 06-30 09:51
?843次閱讀
工業(yè)自動化是現(xiàn)代工業(yè)發(fā)展的重要標(biāo)志,它極大地提高了生產(chǎn)效率,降低了生產(chǎn)成本,并改善了產(chǎn)品質(zhì)量。在工業(yè)自動化中,控制方式作為實(shí)現(xiàn)自動化控制的關(guān)鍵環(huán)節(jié),其重要性不言而喻。本文將詳細(xì)介紹工業(yè)
發(fā)表于 06-17 11:41
?816次閱讀
交流電力控制電路是現(xiàn)代電力系統(tǒng)的重要組成部分,它涉及到對交流電的控制和調(diào)節(jié)。在實(shí)際應(yīng)用中,交流電力控制電路的控制
發(fā)表于 06-16 11:19
?3545次閱讀
隨著工業(yè)自動化技術(shù)的不斷發(fā)展,可編程邏輯控制器(PLC)作為工業(yè)自動化領(lǐng)域的核心設(shè)備,其重要性日益凸顯。PLC與電腦之間的連接是工業(yè)自動化系統(tǒng)中不可或缺的一環(huán),它們之間的連接方式多種多
發(fā)表于 06-12 15:32
?2120次閱讀
當(dāng)我將網(wǎng)絡(luò)模型部署到STM32F407VGT6中時,CubeIDE生成的代碼框架會卡在MX_X_CUBE_AI_Process()函數(shù)中是怎么回事?CUbeAI庫的版本是9.0。期待您的回復(fù),謝謝
發(fā)表于 05-30 06:11
SOC(System on Chip,片上系統(tǒng))設(shè)計中,時鐘信號的控制對于整個系統(tǒng)的性能和功耗至關(guān)重要。本文將帶您了解SOC設(shè)計中的一種時鐘控制
發(fā)表于 04-28 09:12
?2221次閱讀
2024年3月初,在美國硅谷舉辦的DVCon2024上,IEEE-SA和Accellera聯(lián)合宣布通過IEEE Get Program可以免費(fèi)獲取IEEE 1800-2023 SystemVerilog語言參考手冊。
發(fā)表于 03-20 13:52
?1729次閱讀
SystemVerilog 接口的開發(fā)旨在讓設(shè)計中層級之間的連接變得更加輕松容易。 您可以把這類接口看作是多個模塊共有的引腳集合。
發(fā)表于 03-04 15:25
?964次閱讀
ARM中的編指方式與尋址方式有何不同? ARM處理器是一種廣泛應(yīng)用的微處理器架構(gòu),被廣泛用于移動設(shè)備、嵌入式設(shè)備以及智能家居等領(lǐng)域。在ARM架構(gòu)中,編碼
發(fā)表于 01-29 18:10
?690次閱讀
在模擬控制方式中,PID控制完全在于Chopper2 amplifer中對嗎?
在數(shù)字控制
發(fā)表于 01-03 10:52
評論