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

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

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

SystemVerilog中對(duì)于process的多種控制方式

工程師鄧生 ? 來(lái)源:杰瑞IC驗(yàn)證 ? 作者:老黃鴨 ? 2022-09-14 10:27 ? 次閱讀

Hello everybody,我們接著上期的Process(1)-產(chǎn)生進(jìn)程的方式(點(diǎn)擊跳轉(zhuǎn))繼續(xù)講解SystemVerilog中對(duì)于process的多種控制方式。

本期主要給大家講解 named block、wait_order、wait_fork、disable,還有SystemVerilog中的內(nèi)建類(lèi):process類(lèi)。

1

Namedblock

Block,也就是語(yǔ)句塊,SystemVerilog提供了兩種類(lèi)型的語(yǔ)句塊,分別是begin…end為代表的順序語(yǔ)句塊,還有以fork…join為代表的并發(fā)語(yǔ)句塊。

這兩種block都是工程項(xiàng)目中常用的block,但是,大家可能都不知道block也是可以命名的,就像我們每個(gè)人的名字一樣,名字是我們每個(gè)人的一個(gè)標(biāo)識(shí)。 通過(guò)這個(gè)標(biāo)識(shí),我們可以訪問(wèn)block中的變量、parameter等。

4dc8e81e-337a-11ed-ba43-dac502259ad0.png

圖1

圖1中,initial begin…end中有兩個(gè)named block,分別為順序執(zhí)行的block_a和并發(fā)執(zhí)行的block_b。

我們可以通過(guò)在block的開(kāi)頭和結(jié)束編寫(xiě)上標(biāo)識(shí)名,也可以只在開(kāi)頭進(jìn)行編寫(xiě);

如果是在block的開(kāi)頭和結(jié)束都有對(duì)應(yīng)的標(biāo)識(shí)名,則這兩標(biāo)識(shí)名必須相同,否則會(huì)編譯報(bào)錯(cuò)。

4ded47c2-337a-11ed-ba43-dac502259ad0.png

圖2

從圖1和圖2中我們還可以看到,int類(lèi)型的變量和parameter的作用范圍都是在各自block范圍內(nèi)的。

所以,我們要記住,如果需要訪問(wèn)block中的變量或者parameter,則需要給block進(jìn)行命名,并且,block中的變量、parameter都是相互獨(dú)立的。

2

wait_order、wait fork

SystemVerilog提供了兩大類(lèi)process的控制方式,分別為wait和disable。

wait中又包含了三小類(lèi):wait、wait_order、wait fork。

其中,wait相對(duì)簡(jiǎn)單,在這就不說(shuō)了,黃鴨哥只介紹后兩種。

那么,什么是wait_order?

總結(jié)一句:wait_order會(huì)阻塞等待多個(gè)事件的觸發(fā),并且要求這幾個(gè)事件間發(fā)生的順序和設(shè)置的一致。

這句話該怎么理解呢?我們來(lái)看下例子:

4e0e15ce-337a-11ed-ba43-dac502259ad0.png

圖3

例子中包含3個(gè)event,3個(gè)event分別在3個(gè)并發(fā)進(jìn)程中進(jìn)行觸發(fā),event_1在第50個(gè)timeunit被觸發(fā),event_2在第30個(gè)timeunit被觸發(fā),event_3在第100個(gè)timeunit的時(shí)候被觸發(fā)。

wait_order需要阻塞到3個(gè)事件依次按照event_2、event_1、event_3的順序進(jìn)行觸發(fā)后才能往下執(zhí)行。這就是wait_order的用法。

wait中另外一個(gè)重要的用法是wait fork,關(guān)于它的用法,總結(jié)了三句話:

① wait fork會(huì)引起調(diào)用進(jìn)程阻塞,直到它的所有子進(jìn)程結(jié)束;

② wait fork的目的是用來(lái)確保所有子進(jìn)程執(zhí)行結(jié)束;

③ wait fork作用父進(jìn)程下的子進(jìn)程,而不包括子進(jìn)程下的子進(jìn)程。


4e1da192-337a-11ed-ba43-dac502259ad0.png

圖4

圖4中initial語(yǔ)句塊包含4個(gè)子進(jìn)程,proc_1~proc_4。

其中,proc_4子進(jìn)程中還含有一個(gè)子進(jìn)程proc_4_1,此進(jìn)程就是initial語(yǔ)句塊的子進(jìn)程的子進(jìn)程。

按照上面黃鴨哥總結(jié)的三點(diǎn)來(lái)看,wait fork應(yīng)該只需要等待到第2個(gè)子進(jìn)程:proc_2執(zhí)行結(jié)束,因?yàn)閣ait fork只會(huì)作用到子進(jìn)程,不會(huì)作用到子進(jìn)程的子進(jìn)程(不論是fork…join,fork…join_any還是fork…join_none產(chǎn)生的進(jìn)程)。 我們來(lái)看下仿真結(jié)果驗(yàn)證下我們的理論:

4e4399b0-337a-11ed-ba43-dac502259ad0.png

圖5 果然,wait fork只等待到proc_2,在第200個(gè)timeunit就打印出了“wait fork finish”。

3

disable 、disable fork

上面說(shuō)完了wait,我們接著說(shuō)SystemVerilog中第二大類(lèi)的進(jìn)程控制方式:disable。

disable語(yǔ)句常用的多種方式包括:disable named_block、disable task_name和disable fork等,調(diào)用disable語(yǔ)句將會(huì)終止指定的進(jìn)程。 4e88e8d0-337a-11ed-ba43-dac502259ad0.png

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

4eabf8fc-337a-11ed-ba43-dac502259ad0.png

圖7

上圖中disable proc_a相當(dāng)于return,它會(huì)直接終止當(dāng)前的task。 而關(guān)于disable fork,這個(gè)是我們工程項(xiàng)目中使用的最多的一類(lèi),也是最容易踩坑的一類(lèi),disable fork的用法我推薦大家學(xué)習(xí)下Q哥的一篇文章:disable fork,你真的會(huì)用嗎?

感興趣的同學(xué)可以點(diǎn)進(jìn)去看看,他在里面有很詳細(xì)的描述,黃鴨哥在這里就不多說(shuō)了。

4

內(nèi)建類(lèi):process

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

4ebd6cb8-337a-11ed-ba43-dac502259ad0.png

圖8 process類(lèi)中定義了一個(gè)枚舉變量state,表示當(dāng)前進(jìn)程的幾種執(zhí)行狀態(tài):FINISHED,RUNNING,WAITING,SUSPENDED,KILLED。 另外,還聲明了幾種task和function,我們通過(guò)下面的表格來(lái)簡(jiǎn)單了解下:

Method Describe
self() 獲取當(dāng)前進(jìn)程的句柄,process類(lèi)不能主動(dòng)的通過(guò)new來(lái)進(jìn)行創(chuàng)建,只能通過(guò)initial…begin…end,final…begin…end,4個(gè)always procedure,3個(gè)fork procedure和dynamic process來(lái)產(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)只能通過(guò)調(diào)用process類(lèi)中的resume函數(shù)來(lái)解除 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()來(lái)阻塞本進(jìn)程
suspend() 掛起該進(jìn)程
resume() 恢復(fù)該進(jìn)程
srandom(int seed) 設(shè)置進(jìn)程的隨機(jī)種子


表1 有人會(huì)問(wèn)了,這么多的method,我們都該記住嗎? 黃鴨哥覺(jué)得不是的,只需要記住這里面常用的幾個(gè)method:self(),status(),kill()就可以了,我們最后再來(lái)看個(gè)例子,加深下理解:

4ed8f000-337a-11ed-ba43-dac502259ad0.png

圖9

4f073ff0-337a-11ed-ba43-dac502259ad0.png

圖10

圖9展示了這三個(gè)method的用法,通過(guò)self()獲取進(jìn)程的句柄,然后傳遞給定義的兩個(gè)process類(lèi);

調(diào)用status()可以獲取到process_1和process_2進(jìn)程的執(zhí)行狀態(tài),在100個(gè)timeunit的時(shí)候,process_1已經(jīng)執(zhí)行結(jié)束,而process_2則處于阻塞狀態(tài);

當(dāng)再次經(jīng)過(guò)100個(gè)timeunit時(shí),調(diào)用kill()終止了process_2的繼續(xù)執(zhí)行,從這里可以看出,要終止一個(gè)進(jìn)程,除了disable、disable fork之外,還可以調(diào)用process.kill()。

總結(jié)

process就講到這了,我們?cè)倩仡櫹陆裉斓囊c(diǎn):

1、block可以進(jìn)行命名,命名之后就可以通過(guò)標(biāo)識(shí)名訪問(wèn)block內(nèi)部的變量和parameter,還可以通過(guò)disable named_block終止此block。

2、進(jìn)程的兩大控制方式:wait、disable。

3、SystemVerilog內(nèi)建類(lèi),process類(lèi),可以通過(guò)process類(lèi)訪問(wèn)進(jìn)程和控制進(jìn)程。

4、三種終止進(jìn)程的方式:disable、disable fork、process.kill()。



審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 仿真器
    +關(guān)注

    關(guān)注

    14

    文章

    1008

    瀏覽量

    83440
  • Verilog
    +關(guān)注

    關(guān)注

    28

    文章

    1333

    瀏覽量

    109713

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

文章出處:【微信號(hào):處芯積律,微信公眾號(hào):處芯積律】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    控制器常采用哪些控制方式進(jìn)行

    控制器是自動(dòng)化控制系統(tǒng)的核心部件,負(fù)責(zé)接收傳感器信號(hào)、處理數(shù)據(jù)、發(fā)出控制指令,以實(shí)現(xiàn)對(duì)被控對(duì)象的精確控制。
    的頭像 發(fā)表于 06-30 10:35 ?701次閱讀

    控制閥有哪幾種控制方式

    控制閥是工業(yè)自動(dòng)化系統(tǒng)的重要組成部分,其主要作用是控制流體的流量、壓力、溫度等參數(shù),以滿足生產(chǎn)過(guò)程的需要。控制閥的控制
    的頭像 發(fā)表于 06-30 09:51 ?427次閱讀

    工業(yè)自動(dòng)化控制方式

    工業(yè)自動(dòng)化是現(xiàn)代工業(yè)發(fā)展的重要標(biāo)志,它極大地提高了生產(chǎn)效率,降低了生產(chǎn)成本,并改善了產(chǎn)品質(zhì)量。在工業(yè)自動(dòng)化,控制方式作為實(shí)現(xiàn)自動(dòng)化控制的關(guān)鍵環(huán)節(jié),其重要性不言而喻。本文將詳細(xì)介紹工業(yè)
    的頭像 發(fā)表于 06-17 11:41 ?507次閱讀

    PLC連接電腦的多種方式

    隨著工業(yè)自動(dòng)化技術(shù)的不斷發(fā)展,可編程邏輯控制器(PLC)作為工業(yè)自動(dòng)化領(lǐng)域的核心設(shè)備,其重要性日益凸顯。PLC與電腦之間的連接是工業(yè)自動(dòng)化系統(tǒng)不可或缺的一環(huán),它們之間的連接方式多種
    的頭像 發(fā)表于 06-12 15:32 ?1166次閱讀

    在Vivado Synthesis怎么使用SystemVerilog接口連接邏輯呢?

    SystemVerilog 接口的開(kāi)發(fā)旨在讓設(shè)計(jì)中層級(jí)之間的連接變得更加輕松容易。 您可以把這類(lèi)接口看作是多個(gè)模塊共有的引腳集合。
    的頭像 發(fā)表于 03-04 15:25 ?741次閱讀
    在Vivado Synthesis<b class='flag-5'>中</b>怎么使用<b class='flag-5'>SystemVerilog</b>接口連接邏輯呢?

    伺服電機(jī)的三種控制方式 如何確定選擇伺服電機(jī)控制方式?

    電機(jī)的控制方式多種,每一種都有自己的特點(diǎn)和應(yīng)用范圍。在選擇伺服電機(jī)控制方式時(shí),需要考慮多個(gè)因素,包括應(yīng)用需求、成本效益、
    的頭像 發(fā)表于 12-26 14:02 ?1412次閱讀

    分享一些SystemVerilog的coding guideline

    本文分享一些SystemVerilog的coding guideline。
    的頭像 發(fā)表于 11-22 09:17 ?579次閱讀
    分享一些<b class='flag-5'>SystemVerilog</b>的coding  guideline

    簡(jiǎn)述控制器的多種工作模式

    引言:和降壓控制器類(lèi)似,升壓控制器也有多種工作模式,在/重負(fù)載模式工作時(shí),控制器以固定頻率連續(xù)規(guī)律工作,在輕載模式下則有
    的頭像 發(fā)表于 10-26 14:41 ?1943次閱讀
    簡(jiǎn)述<b class='flag-5'>控制</b>器的<b class='flag-5'>多種</b>工作模式

    SystemVerilog相比于Verilog的優(yōu)勢(shì)

    和always_latch。always_ff用于描述時(shí)序邏輯,對(duì)應(yīng)FPGA的觸發(fā)器,其內(nèi)部應(yīng)使用非阻塞(
    的頭像 發(fā)表于 10-26 10:05 ?708次閱讀
    <b class='flag-5'>SystemVerilog</b>相比于Verilog的優(yōu)勢(shì)

    SystemVerilog在硬件設(shè)計(jì)部分有哪些優(yōu)勢(shì)

    談到SystemVerilog,很多工程師都認(rèn)為SystemVerilog僅僅是一門(mén)驗(yàn)證語(yǔ)言,事實(shí)上不只如此。傳統(tǒng)的Verilog和VHDL被稱為HDL(Hardware Description
    的頭像 發(fā)表于 10-19 11:19 ?944次閱讀
    <b class='flag-5'>SystemVerilog</b>在硬件設(shè)計(jì)部分有哪些優(yōu)勢(shì)

    SystemVerilog:處理信號(hào)雙驅(qū)動(dòng)問(wèn)題解析

    SystemVerilog,類(lèi)型可以分為線網(wǎng)(net)和變量(variable)。線網(wǎng)的賦值設(shè)定與Verilog的要求相同,即線網(wǎng)賦值需要使用連續(xù)賦值語(yǔ)句(assign),而不應(yīng)該出現(xiàn)在過(guò)程塊(initial/always)
    的頭像 發(fā)表于 10-13 14:53 ?1727次閱讀
    <b class='flag-5'>SystemVerilog</b>:處理信號(hào)雙驅(qū)動(dòng)問(wèn)題解析

    SystemVerilog的聯(lián)合(union)介紹

    SystemVerilog ,聯(lián)合只是信號(hào),可通過(guò)不同名稱和縱橫比來(lái)加以引用。
    的頭像 發(fā)表于 10-08 15:45 ?1090次閱讀
    <b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>的聯(lián)合(union)介紹

    看一下SystemVerilogpackage的使用方法與注意事項(xiàng)

    談到package,用過(guò)VHDL的工程師并不陌生。實(shí)際上,SystemVerilog的package正是從VHDL引入的,以進(jìn)一步增強(qiáng)其在系統(tǒng)級(jí)的描述能力。
    的頭像 發(fā)表于 10-07 11:33 ?1821次閱讀
    看一下<b class='flag-5'>SystemVerilog</b><b class='flag-5'>中</b>package的使用方法與注意事項(xiàng)

    SystemVerilog的隨機(jī)約束方法

    上一篇文章《暗藏玄機(jī)的SV隨機(jī)化》介紹了SystemVerilog的各種隨機(jī)化方法,本文將在其基礎(chǔ)上引入SystemVerilog的隨機(jī)約束方法(constraints)。通過(guò)使用隨機(jī)約束,我們可以將隨機(jī)限制在一定的空間內(nèi),有針對(duì)性地提高功能覆蓋率。
    的頭像 發(fā)表于 09-24 12:15 ?1213次閱讀