一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

講解SystemVerilog中對于process的多種控制方式

路科驗證 ? 來源:杰瑞IC驗證 ? 作者:老黃鴨 ? 2022-09-26 15:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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都是工程項目中常用的block,但是,大家可能都不知道block也是可以命名的,就像我們每個人的名字一樣,名字是我們每個人的一個標(biāo)識。 通過這個標(biāo)識,我們可以訪問block中的變量、parameter等。

a566d294-3d51-11ed-9e49-dac502259ad0.png

圖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)識名必須相同,否則會編譯報錯。

a5a3189e-3d51-11ed-9e49-dac502259ad0.png

圖2 從圖1和圖2中我們還可以看到,int類型的變量和parameter的作用范圍都是在各自block范圍內(nèi)的。 所以,我們要記住,如果需要訪問block中的變量或者parameter,則需要給block進(jìn)行命名,并且,block中的變量、parameter都是相互獨立的

2

wait_order、wait fork

SystemVerilog提供了兩大類process的控制方式,分別為wait和disable。 wait中又包含了三小類:wait、wait_order、wait fork。 其中,wait相對簡單,在這就不說了,黃鴨哥只介紹后兩種。 那么,什么是wait_order? 黃鴨哥總結(jié)一句:wait_order會阻塞等待多個事件的觸發(fā),并且要求這幾個事件間發(fā)生的順序和設(shè)置的一致。 這句話該怎么理解呢?我們來看下例子:

a5c9b8be-3d51-11ed-9e49-dac502259ad0.png

圖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)程。

a5ffa762-3d51-11ed-9e49-dac502259ad0.png

圖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é)的三點來看,wait fork應(yīng)該只需要等待到第2個子進(jìn)程:proc_2執(zhí)行結(jié)束,因為wait fork只會作用到子進(jìn)程,不會作用到子進(jìn)程的子進(jìn)程(不論是fork…join,fork…join_any還是fork…join_none產(chǎn)生的進(jìn)程)。 我們來看下仿真結(jié)果驗證下我們的理論:

a67f537c-3d51-11ed-9e49-dac502259ad0.png

圖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)程

a6cfcf82-3d51-11ed-9e49-dac502259ad0.png

圖6 圖6里調(diào)用了disable,終止了對應(yīng)的帶標(biāo)識名的block,從仿真截圖中可以看出,block_1并沒有正常結(jié)束,而是中途被終止了。

a6f043b6-3d51-11ed-9e49-dac502259ad0.png

圖7 上圖中disable proc_a相當(dāng)于return,它會直接終止當(dāng)前的task。 而關(guān)于disable fork,這個是我們工程項目中使用的最多的一類,也是最容易踩坑的一類,disable fork的用法我推薦大家學(xué)習(xí)下Q哥的一篇文章:disable fork,你真的會用嗎? 感興趣的同學(xué)可以點進(jìn)去看看,他在里面有很詳細(xì)的描述,黃鴨哥在這里就不多說了。

4

內(nèi)建類:process

SystemVerilog中內(nèi)建了一種class,可以對進(jìn)程進(jìn)行訪問和控制,此種class就是process,我們先來看下process類的原型:

a789290a-3d51-11ed-9e49-dac502259ad0.png

圖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)程正在運行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()就可以了,我們最后再來看個例子,加深下理解:

a7b8d088-3d51-11ed-9e49-dac502259ad0.png

圖9

a7de7306-3d51-11ed-9e49-dac502259ad0.png

圖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就講到這了,我們再回顧下今天的要點: 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)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Verilog
    +關(guān)注

    關(guān)注

    29

    文章

    1367

    瀏覽量

    112231
  • Block
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    14949
  • Process
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    12318

原文標(biāo)題:扒一扒SystemVerilog中的Process之進(jìn)程控制

文章出處:【微信號:Rocker-IC,微信公眾號:路科驗證】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    工業(yè)機(jī)器人4大控制方式,你知道幾種?

    目前市場上使用最多的機(jī)器人當(dāng)屬工業(yè)機(jī)器人,也是最成熟完善的一種機(jī)器人,而工業(yè)機(jī)器人能得到廣泛應(yīng)用,得益于它擁有多種控制方式,按作業(yè)任務(wù)的不同,可主要分為點位控制
    的頭像 發(fā)表于 03-13 10:11 ?778次閱讀
    工業(yè)機(jī)器人4大<b class='flag-5'>控制</b><b class='flag-5'>方式</b>,你知道幾種?

    FinFet Process Flow-源漏極是怎樣形成的

    本文介紹了FinFet Process Flow-源漏極是怎樣形成的。 在FinFET制造工藝,當(dāng)完成偽柵極結(jié)構(gòu)后,接下來的關(guān)鍵步驟是形成源漏極(Source/Drain)。這一階段對于確保器件
    的頭像 發(fā)表于 01-17 11:00 ?1144次閱讀
    FinFet <b class='flag-5'>Process</b> Flow-源漏極是怎樣形成的

    FinFet Process Flow—啞柵極的形成

    了FinFET的柵極寬度,這對于控制電流流動至關(guān)重要。在22nm及以下技術(shù)節(jié)點中,由于鰭片尺寸非常小,通常通過SADP(Self-Aligned Double Patterning)或SAQP
    的頭像 發(fā)表于 01-14 13:55 ?760次閱讀
    FinFet <b class='flag-5'>Process</b> Flow—啞柵極的形成

    不同控制方式下BUCK電路占空比比較

    在BUCK電路,占空比是一個關(guān)鍵參數(shù),它決定了輸出電壓的大小。不同的控制方式會對BUCK電路的占空比產(chǎn)生不同的影響。以下是對幾種常見控制方式
    的頭像 發(fā)表于 12-12 17:11 ?1385次閱讀

    伺服電機(jī)的控制方式有哪些?舉例分析

    伺服電機(jī)是一種高精度的電機(jī),廣泛應(yīng)用于工業(yè)自動化、機(jī)器人、精密機(jī)械等領(lǐng)域。伺服電機(jī)的控制方式多種多樣,可以根據(jù)不同的應(yīng)用場景和需求進(jìn)行選擇。以下是一些常見的伺服電機(jī)控制
    的頭像 發(fā)表于 10-22 11:13 ?1401次閱讀

    PLC多種通訊方式匯總學(xué)習(xí)~

    PLC的通訊功能是其連接設(shè)備、控制系統(tǒng)和外部系統(tǒng)的重要組成部分。PLC支持多種通訊方式,本文將講述PLC常見的通訊方式及其優(yōu)缺點,別再傻傻分不清楚~ 一.點對點通訊(P2P) 點對點通
    的頭像 發(fā)表于 09-25 09:09 ?1127次閱讀
    PLC<b class='flag-5'>多種</b>通訊<b class='flag-5'>方式</b>匯總學(xué)習(xí)~

    電感技術(shù)講解

    電阻電容電感,是硬件電路中最基本的元器件。我們在學(xué)習(xí)電容時,為了讓大家更形象,更通俗的去理解這個元器件,都是拿水缸去打比方的。但是對于電感,我們很難拿生活的例子去類比,所以,在后面的學(xué)習(xí),我們
    發(fā)表于 09-06 02:07 ?31次下載

    工業(yè)機(jī)器人控制方式有幾種

    工業(yè)機(jī)器人的控制方式多種多樣,這些方式根據(jù)作業(yè)任務(wù)的不同而有所區(qū)別。主要可以分為以下幾種:點位控制方式
    的頭像 發(fā)表于 09-04 09:31 ?2411次閱讀

    變頻器的基本原理及控制方式

    交流電機(jī)的速度。在傳統(tǒng)的V/F(電壓/頻率)控制方式,變頻器通過調(diào)節(jié)輸入電源的電壓和頻率來改變電機(jī)的運行速度。這種方式可以是開環(huán)控制,也可
    的頭像 發(fā)表于 08-27 16:08 ?1697次閱讀

    調(diào)速器的主要分類和運轉(zhuǎn)方式

    調(diào)速器作為一種用于控制發(fā)動機(jī)轉(zhuǎn)速的裝置,在機(jī)械設(shè)備起著至關(guān)重要的作用。其分類和運轉(zhuǎn)方式多種多樣,以下是對調(diào)速器主要分類和運轉(zhuǎn)方式的詳細(xì)解析
    的頭像 發(fā)表于 08-25 16:42 ?3489次閱讀

    簡述計算機(jī)的I/O控制方式

    計算機(jī)的I/O(輸入/輸出)控制方式是計算機(jī)系統(tǒng)至關(guān)重要的部分,它決定了CPU與外設(shè)之間數(shù)據(jù)交換的方式和效率。隨著計算機(jī)技術(shù)的不斷發(fā)展,I/O控制
    的頭像 發(fā)表于 08-20 10:55 ?2355次閱讀

    變頻器控制電機(jī)的正反轉(zhuǎn)與控制方式有哪些?

    變頻器是一種廣泛應(yīng)用于工業(yè)領(lǐng)域的電力調(diào)整設(shè)備,它可以通過改變電源的頻率來實現(xiàn)電機(jī)的速度控制。在許多生產(chǎn)過程,電機(jī)的正反轉(zhuǎn)控制是非常重要的,變頻器能夠通過不同的控制
    的頭像 發(fā)表于 08-14 17:04 ?2963次閱讀

    簡述DC變換器的控制方式

    DC變換器,也稱為DC-DC轉(zhuǎn)換器,是一種將直流電壓轉(zhuǎn)換為另一種直流電壓的電力電子設(shè)備。在DC變換器的設(shè)計和應(yīng)用,控制方式是至關(guān)重要的,它決定了變換器的性能、效率和穩(wěn)定性。以下將詳細(xì)描述DC變換器
    的頭像 發(fā)表于 08-14 14:37 ?2403次閱讀

    PLC的邏輯運算方式有哪些

    PLC(可編程邏輯控制器)的邏輯運算方式主要包括以下幾種,這些邏輯運算在PLC編程扮演著至關(guān)重要的角色,用于實現(xiàn)各種復(fù)雜的控制邏輯。
    的頭像 發(fā)表于 07-24 16:55 ?1490次閱讀

    智能家居的控制方式有哪些

    智能家居的控制方式多種多樣,這些方式不僅提升了家居生活的便捷性,還使得家居環(huán)境更加智能化和個性化。以下是智能家居的主要控制
    的頭像 發(fā)表于 07-23 14:30 ?3187次閱讀