0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

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

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

如何配置sequence的仲裁算法和優(yōu)先級(jí)

工程師鄧生 ? 來源:芯片學(xué)堂 ? 作者:JKZHAN ? 2022-09-14 15:59 ? 次閱讀

本文依然是比較多的干貨,也偏保姆級(jí),介紹Sequence之間發(fā)生競(jìng)爭(zhēng)的時(shí)候,我們需要或者說可以做些什么,包括如何配置sequence的仲裁算法和優(yōu)先級(jí)、如何讓sequence占用sequencer(這個(gè)地方UVM 1.2有個(gè)bug),以及如何中斷sequence的執(zhí)行。

01 Arbitrary

在UVM中,多個(gè)sequence可以同時(shí)被綁定到相同的sequencer并啟動(dòng)。這種測(cè)試場(chǎng)景在實(shí)際中是存在的,比如在模擬同一個(gè)總線master口上的不同類型的數(shù)據(jù)流時(shí),可以將符合這些不同類型的數(shù)據(jù)流的sequence綁定到同一個(gè)sequencer,并啟動(dòng)它們,以構(gòu)造出復(fù)雜的測(cè)試場(chǎng)景。

de6945ca-304c-11ed-ba43-dac502259ad0.png

這樣一來,在驗(yàn)證環(huán)境運(yùn)行中就會(huì)出現(xiàn)競(jìng)爭(zhēng)的問題,當(dāng)多個(gè)sequence同時(shí)企圖向下游發(fā)transaction的時(shí)候,sequencer需要能夠決定處理這些transaction的順序。而給出答案的,是sequencer內(nèi)建的仲裁機(jī)制。

下面給出一個(gè)簡(jiǎn)單的UVM例程:例程同時(shí)啟動(dòng)三個(gè)sequence(seq_0, seq_1, seq_2),它們會(huì)往同一個(gè)sequencer發(fā)transaction,并且在啟動(dòng)的時(shí)候還分配了權(quán)重值(start方法的第三個(gè)參數(shù)),每個(gè)sequence會(huì)循環(huán)發(fā)送4個(gè)transaction。在Env中例化sequencer和driver,并完成連接。例程中在driver拿到transaction之后,會(huì)根據(jù)transaction的成員變量id和index打印出來當(dāng)前transaction產(chǎn)生自哪個(gè)sequence,以及是循環(huán)的第幾次。

dea60456-304c-11ed-ba43-dac502259ad0.png

仿真結(jié)果如下,可以看得出來在沒有配置仲裁算法的情況下,即使我們?yōu)閟equence都分配了權(quán)重值,sequencer對(duì)三個(gè)sequence還是“雨露均沾”:

df1c1cb8-304c-11ed-ba43-dac502259ad0.png 實(shí)際上,UVM給我們預(yù)設(shè)了六種仲裁算法供選擇,同時(shí)保留了用戶自定義的接口。默認(rèn)情況下,使用的仲裁算法是UVM_SEQ_ARB_FIFO,嚴(yán)格按照先進(jìn)先出的原則來做選擇,所以才會(huì)出現(xiàn)上面說的,仿真結(jié)果跟權(quán)重值沒有關(guān)系。關(guān)于仲裁算法,需要根據(jù)實(shí)際測(cè)試場(chǎng)景來做出選擇。

df941862-304c-11ed-ba43-dac502259ad0.png

那么如何配置仲裁算法?在代碼中,可以通過調(diào)用sequencer的方法set_arbitration()來對(duì)仲裁算法進(jìn)行配置。比如在上面例程env_demo類的build_phase函數(shù)的最后一行,可以加上sqr.set_arbitration(UVM_SEQ_ARB_WEIGHTED)來配置仲裁算法,仿真結(jié)果我貼在下面,可以看到,我們分配的權(quán)重值開始起作用了:

dfcb7460-304c-11ed-ba43-dac502259ad0.png

02 LockingMechanism

Locking mechanism指的是sequence對(duì)sequencer的占用,sequence可以優(yōu)先獲得sequencer的使用權(quán)限,并且在它自己釋放之前,其他sequence無法通過該sequencer和driver發(fā)送transaction。

Sequence搶占功能同樣來源于測(cè)試場(chǎng)景的需求,應(yīng)用于當(dāng)有某個(gè)sequence需要優(yōu)先并獨(dú)占sequencer的時(shí)候,比如對(duì)中斷(interrupt)的處理。如下圖所示,當(dāng)sequence_2占用了sequencer之后,其他sequence在sequence_2釋放之前將無法聯(lián)系上sequencer。

e0119ec2-304c-11ed-ba43-dac502259ad0.png

UVM提供了兩種搶占方法:lock和grab。lock方式會(huì)等待仲裁機(jī)制正常調(diào)度到該sequence(即將請(qǐng)求放在仲裁隊(duì)里的最后),并占用該sequencer直到sequence調(diào)用unlock()來解鎖;grab方式則會(huì)使該sequence在下一輪仲裁中被執(zhí)行(即將請(qǐng)求放在仲裁隊(duì)列的最前面),并占用該sequencer直到sequence調(diào)用unlock()和ungrab()。

Sequencer被某個(gè)sequence搶占了之后,我們可以通過調(diào)用它的成員方法來獲取當(dāng)前的狀態(tài)信息。比如,可以在sequence的body()里面使用m_sequencer.is_grabbed()函數(shù)來看當(dāng)前sequencer是不是被誰鎖住了;還可以使用m_sequencer.current_grabber()函數(shù)來獲得當(dāng)前鎖住sequencer的sequence句柄;還有其他函數(shù)可以使用,具體可以參考UVM的手冊(cè)。

e032c20a-304c-11ed-ba43-dac502259ad0.png

關(guān)于lock和grab的使用在其他地方有很多示例代碼,這里將基于上面的例程,展示UVM 1.2潛藏的一個(gè)bug。先在上述代碼中seq_demo_0類的body()任務(wù)的入口和出口處,分別加上lock()和unlock(),如上圖所示,然后進(jìn)行仿真,就會(huì)發(fā)現(xiàn):最終只有seq_0搶先鎖住了sequencer,雖然我們?cè)赽ody()的最后調(diào)用了unlock(),但是seq_1和seq_2在seq_0結(jié)束之后依然搶不到鎖,仿真最后結(jié)束在UVM timeout,如下圖:

e0640036-304c-11ed-ba43-dac502259ad0.png

這是一個(gè)UVM的bug,問題的根源在uvm_sequencer_base的源碼中,當(dāng)有多個(gè)sequence在lock_list隊(duì)列里面時(shí),調(diào)用m_wait_for_available_sequence()方法獲取sequence句柄會(huì)使代碼掛死。該UVM issue已經(jīng)有人提交到了accellera,具體可以參見參考資料2。這個(gè)bug在UVM 2017-1.1或者UVM 2020中可能已經(jīng)修掉了,有興趣的讀者可以自己試一下。鑒于目前有很多代碼是基于UVM 1.2構(gòu)建的,用戶在使用lock/grab的時(shí)候需要特別注意這個(gè)bug。

03Sequence Interrupt

處理器等數(shù)字系統(tǒng)中,通常硬件中斷都是由某個(gè)信號(hào)脈沖或者電平來觸發(fā),并通過中斷控制仲裁之后,由控制器發(fā)送給處理器進(jìn)行處理。

在Sequence中的中斷操作也類似,分兩部分實(shí)現(xiàn):第一部分是將通過虛擬接口監(jiān)視中斷源信號(hào)的變化,以實(shí)現(xiàn)軟硬件的隔離;第二部分是在主sequence中發(fā)起一個(gè)監(jiān)視進(jìn)程(monitor process),在等到中斷到來之后啟動(dòng)用作中斷處理的sequence。

e09c3a0a-304c-11ed-ba43-dac502259ad0.png

另外,Sequence一旦被啟動(dòng),通常不會(huì)去想著將它異常結(jié)束(通過seq.kill()或者seqr.stop_sequences()調(diào)用),否則我們需要更加復(fù)雜的實(shí)現(xiàn)去查看當(dāng)前driver是否空閑,以確保sequencer跟driver的握手機(jī)制不出問題。如果有必要將sequence提前結(jié)束,建議在sequence內(nèi)部去做條件判斷和處理。



審核編輯:劉清

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

    關(guān)注

    5

    文章

    904

    瀏覽量

    42551
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

    19448
  • FIFO芯片
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    8978

原文標(biāo)題:SystemVerilog | UVM | Sequence的仲裁和鎖定,還有要避開UVM的bug

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

收藏 0人收藏

    評(píng)論

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

    Analog Devices Inc. DC1717B演示板數(shù)據(jù)手冊(cè)

    Analog Devices Inc. DC1717B演示板使用LTC4417控制器在三個(gè)輸入電源軌之間仲裁,選擇具有最高優(yōu)先級(jí)的有效電源為負(fù)載供電。 電源軌的優(yōu)先級(jí)由輸入連接 (V1-V3) 定義
    的頭像 發(fā)表于 06-11 09:26 ?100次閱讀
    Analog Devices Inc. DC1717B演示板數(shù)據(jù)手冊(cè)

    ADL5308可以通過軟件和硬件配置的參數(shù),配置優(yōu)先級(jí)是什么?

    你好,麻煩問一下ADL5308可以通過軟件和硬件配置的參數(shù),配置優(yōu)先級(jí)是什么?有沒有更詳細(xì)的寄存器配置手冊(cè),截距配置的步進(jìn)是多少?
    發(fā)表于 06-10 06:39

    CyU3PDebugPrint的最高優(yōu)先級(jí)和最低優(yōu)先級(jí)是什么?

    [i]CyU3PDebugPrint的最高優(yōu)先級(jí)和最低優(yōu)先級(jí)是什么?
    發(fā)表于 05-13 08:22

    配電柜—斷電危機(jī)?配電柜故障排查優(yōu)先級(jí)指南

    在排查配電柜故障過程中,合理安排排查優(yōu)先級(jí)至關(guān)重要。下面聊一下如何科學(xué)合理安排配電柜故障排查優(yōu)先級(jí)順序。
    的頭像 發(fā)表于 03-06 18:55 ?317次閱讀
    配電柜—斷電危機(jī)?配電柜故障排查<b class='flag-5'>優(yōu)先級(jí)</b>指南

    瑞芯微RK3399開發(fā)板Android7.1修改網(wǎng)絡(luò)優(yōu)先級(jí)方法,觸覺智能SBC3968開發(fā)板演示

    本文介紹Android7.1修改網(wǎng)絡(luò)優(yōu)先級(jí)方法,基于觸覺智能SBC3968主板,搭載瑞芯微RK3399芯片,底板具備千兆網(wǎng)口、USB、HDMI、TYPE-C、音頻等接口??蛇m用于工業(yè)主機(jī)、物聯(lián)網(wǎng)設(shè)備、醫(yī)療健康設(shè)備、廣告機(jī)、互動(dòng)自助終端、教學(xué)實(shí)驗(yàn)平臺(tái)、顯示控制、車載安防和人臉識(shí)別等多個(gè)領(lǐng)域。
    的頭像 發(fā)表于 10-09 11:37 ?561次閱讀
    瑞芯微RK3399開發(fā)板Android7.1修改網(wǎng)絡(luò)<b class='flag-5'>優(yōu)先級(jí)</b>方法,觸覺智能SBC3968開發(fā)板演示

    PCM9211的默認(rèn)模式下,ADC和RXIN2( 光纖輸入)是自動(dòng)識(shí)別的嗎,并且光纖具有輸入優(yōu)先級(jí)?

    咨詢一下,PCM9211的默認(rèn)模式下,ADC和RXIN2( 光纖輸入)是自動(dòng)識(shí)別的嗎,并且光纖具有輸入優(yōu)先級(jí)
    發(fā)表于 09-29 06:44

    使用CH32V103C8TC設(shè)置中斷優(yōu)先級(jí)分組時(shí),編譯報(bào)錯(cuò)的原因?

    使用CH32V103C8TC設(shè)置中斷優(yōu)先級(jí)分組時(shí),設(shè)置為NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);編譯報(bào)錯(cuò) 而使用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1); 卻不會(huì)報(bào)錯(cuò) 這是什么原因呢??
    發(fā)表于 09-27 06:03

    CH32V103 使用中斷優(yōu)先級(jí)分組0時(shí)報(bào)錯(cuò)

    使用CH32V103C8TC設(shè)置中斷優(yōu)先級(jí)分組時(shí),設(shè)置為NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);而使用NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);卻不會(huì)報(bào)錯(cuò)
    發(fā)表于 09-23 13:52

    車載以太網(wǎng)交換機(jī)入門基本功(4)—優(yōu)先級(jí)設(shè)計(jì)與VLAN測(cè)試

    VLAN通過報(bào)文Tag、交換機(jī)端口屬性、交換機(jī)端口過濾功能得以實(shí)現(xiàn),并通過優(yōu)先級(jí)和隊(duì)列實(shí)現(xiàn)轉(zhuǎn)發(fā)的有效調(diào)度。為了驗(yàn)證交換機(jī)芯片的功能實(shí)現(xiàn),需要參考OPEN聯(lián)盟的TC11交換機(jī)芯片測(cè)試規(guī)范,包括通用測(cè)試、地址解析、VLAN等9個(gè)方面,此外,實(shí)時(shí)更進(jìn)規(guī)范修改方案并與讀者分享。
    的頭像 發(fā)表于 09-06 14:45 ?842次閱讀
    車載以太網(wǎng)交換機(jī)入門基本功(4)—<b class='flag-5'>優(yōu)先級(jí)</b>設(shè)計(jì)與VLAN測(cè)試

    在汽車區(qū)域模塊中使用理想二極管的優(yōu)先級(jí)電源多路復(fù)用器

    電子發(fā)燒友網(wǎng)站提供《在汽車區(qū)域模塊中使用理想二極管的優(yōu)先級(jí)電源多路復(fù)用器.pdf》資料免費(fèi)下載
    發(fā)表于 09-05 11:08 ?0次下載
    在汽車區(qū)域模塊中使用理想二極管的<b class='flag-5'>優(yōu)先級(jí)</b>電源多路復(fù)用器

    freertos中斷優(yōu)先級(jí)在哪設(shè)置

    FreeRTOS是一個(gè)流行的實(shí)時(shí)操作系統(tǒng),它廣泛應(yīng)用于嵌入式系統(tǒng)開發(fā)。在FreeRTOS中,中斷優(yōu)先級(jí)是一個(gè)重要的概念,因?yàn)樗鼪Q定了中斷處理的順序和響應(yīng)時(shí)間。 1. 理解中斷優(yōu)先級(jí) 在討論如何設(shè)置
    的頭像 發(fā)表于 09-02 14:17 ?1435次閱讀

    通過I2C PWM IC控制伺服,可以為伺服控制進(jìn)行高優(yōu)先級(jí)中斷嗎?

    () 大約需要 100 毫秒才能完成請(qǐng)求。 我怎樣才能避免那里的事情。 我可以為伺服控制進(jìn)行高優(yōu)先級(jí)中斷嗎? 使用 Arduino IDE。
    發(fā)表于 07-12 06:20

    APS智能優(yōu)化排產(chǎn)軟件的優(yōu)先級(jí)應(yīng)用

    資源、訂單需求和約束條件,自動(dòng)計(jì)算出最優(yōu)的生產(chǎn)計(jì)劃。在這個(gè)過程中,訂單排產(chǎn)的優(yōu)先規(guī)則起著至關(guān)重要的作用。1.交期優(yōu)先級(jí)交期優(yōu)先級(jí)是訂單排產(chǎn)中最基本的優(yōu)先規(guī)則。根據(jù)
    的頭像 發(fā)表于 06-26 17:43 ?691次閱讀
    APS智能優(yōu)化排產(chǎn)軟件的<b class='flag-5'>優(yōu)先級(jí)</b>應(yīng)用

    ESP32S2如何設(shè)置中斷優(yōu)先級(jí)?

    ESP32S2有六級(jí)中斷, 如何設(shè)置中斷優(yōu)先級(jí)? 比如在GPIO例程里 ,這種中斷優(yōu)先級(jí)是如何設(shè)置的呢? 中斷寄存器列表里 ,只有簡(jiǎn)稱,哪里能獲取這個(gè)名稱所對(duì)應(yīng)的功能??
    發(fā)表于 06-21 07:59

    請(qǐng)問有什么方法降低WIFI中斷的優(yōu)先級(jí)

    因?yàn)轫?xiàng)目對(duì)時(shí)序輸出要求比較嚴(yán)格,WIFI中斷優(yōu)先級(jí)比硬件定時(shí)器中斷優(yōu)先級(jí)要高,在定時(shí)器中斷里面對(duì)GPIO管腳控制被延長(zhǎng)執(zhí)行,請(qǐng)問有什么方法降低WIFI中斷的優(yōu)先級(jí)?
    發(fā)表于 06-19 07:37

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品