亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

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

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

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

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

工程師鄧生 ? 來源:芯片學(xué)堂 ? 作者:JKZHAN ? 2022-09-14 15:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

01 Arbitrary

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

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

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

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

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

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

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

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

那么如何配置仲裁算法?在代碼中,可以通過調(diào)用sequencer的方法set_arbitration()來對仲裁算法進行配置。比如在上面例程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對sequencer的占用,sequence可以優(yōu)先獲得sequencer的使用權(quán)限,并且在它自己釋放之前,其他sequence無法通過該sequencer和driver發(fā)送transaction。

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

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

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

Sequencer被某個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的手冊。

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

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

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

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

03Sequence Interrupt

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

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

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

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



審核編輯:劉清

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

    關(guān)注

    5

    文章

    911

    瀏覽量

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

    關(guān)注

    0

    文章

    183

    瀏覽量

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

    關(guān)注

    0

    文章

    10

    瀏覽量

    9089

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    電能質(zhì)量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳的優(yōu)先級如何在實際應(yīng)用中進行動態(tài)調(diào)整?

    電能質(zhì)量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳優(yōu)先級在實際應(yīng)用中通過 事件驅(qū)動、主站指令、資源狀態(tài)感知和動態(tài)策略調(diào)整 等多層機制實現(xiàn)靈活調(diào)控,確保關(guān)鍵數(shù)據(jù)的實時性與可靠性。以下是具體實現(xiàn)方式和典型場景的動態(tài)調(diào)整
    的頭像 發(fā)表于 11-06 14:10 ?18次閱讀

    FreeRTOS任務(wù)調(diào)度及優(yōu)先級問題

    都有容錯,但是心里沒底,想向大家了解一下實際工作中有沒有遇到到類似的問題,如果有又是怎么解決的呢? 另外有前輩可以分享一下任務(wù)的優(yōu)先級在實際項目中該基于什么原則來劃分呢?
    發(fā)表于 11-06 02:18

    關(guān)于蜂鳥E203內(nèi)核中斷硬件實現(xiàn)中斷嵌套的設(shè)計

    (ISR) 中斷仲裁:多個中斷源同時向處理器發(fā)出請求,仲裁選擇優(yōu)先處理哪個中斷源 中斷嵌套:已經(jīng)在處理某個中斷,執(zhí)行ISR,有一個優(yōu)先級更高的中斷請求到來,處理器終止當(dāng)前的ISR,響應(yīng)
    發(fā)表于 10-23 07:07

    使用fal api 來讀寫1024 字節(jié)數(shù)據(jù),需要需要考慮被高優(yōu)先級線程打斷嗎?

    使用fal api 來讀寫1024 字節(jié)數(shù)據(jù),需要需要考慮被高優(yōu)先級線程打斷嗎?
    發(fā)表于 10-10 07:16

    優(yōu)先級線程無法調(diào)度怎么解決?

    1,設(shè)置了3,5,6,8幾個優(yōu)先級,設(shè)備在現(xiàn)場正常運行了一年多后,顯示、前端、后端這3個低優(yōu)先級線程異常了,表現(xiàn)為屏幕不動,前端采集數(shù)據(jù)沒有變化等,其他高優(yōu)先級的線程如通訊,按鍵都能正常運行,通訊有喂狗操作,停止通訊,會看門狗復(fù)
    發(fā)表于 09-25 07:33

    什么是RTOS中的優(yōu)先級反轉(zhuǎn)

    當(dāng)一個高優(yōu)先級任務(wù)正在等待一個資源,但一個低優(yōu)先級任務(wù)正在持有它,一個中等優(yōu)先級任務(wù)繼續(xù)在中間運行時,就會發(fā)生優(yōu)先級反轉(zhuǎn)——阻止低優(yōu)先級任務(wù)
    的頭像 發(fā)表于 09-09 14:50 ?659次閱讀

    求助,關(guān)于MS51設(shè)置中斷優(yōu)先級問題求解

    我確實發(fā)現(xiàn)在庫代碼和 TRM 之間設(shè)置中斷優(yōu)先級有一些差異,如下圖所示。 Could you check what's wrong with me?
    發(fā)表于 08-25 07:01

    揭秘!基于RT-Thread探究“優(yōu)先級反轉(zhuǎn)”下的任務(wù)調(diào)度究竟是什么樣的?| 技術(shù)集結(jié)

    本文將基于RT-Thread,結(jié)合RT-Trace調(diào)試器細化到實際任務(wù)調(diào)度的粒度,來調(diào)試并逐步講解“優(yōu)先級反轉(zhuǎn)”的調(diào)度和運行邏輯。如果對RT-Trace感興趣的可以看這篇文章:國產(chǎn)嵌入式調(diào)試器之光
    的頭像 發(fā)表于 08-17 10:07 ?2670次閱讀
    揭秘!基于RT-Thread探究“<b class='flag-5'>優(yōu)先級</b>反轉(zhuǎn)”下的任務(wù)調(diào)度究竟是什么樣的?| 技術(shù)集結(jié)

    請問STM32的內(nèi)部Flash操作是不是優(yōu)先級最高?

    STM32的內(nèi)部Flash操作是不是優(yōu)先級最高?目前在內(nèi)部Flash的單獨一頁存儲了數(shù)據(jù),發(fā)現(xiàn)在進行頁擦除的時候正常工作的定時器中斷無法進入了
    發(fā)表于 08-13 07:03

    TLe9893怎么調(diào)整外設(shè)的中斷優(yōu)先級?

    你好林工,我該怎么調(diào)整外設(shè)的中斷優(yōu)先級?是否可以通過工具調(diào)整?默認(rèn)設(shè)置下,是不是Brdv的在中斷優(yōu)先級高于T20和can?
    發(fā)表于 08-01 06:20

    請問C0系列單片機中斷優(yōu)先級只有4嗎?

    C0系列單片機中斷優(yōu)先級只有4?C071在配置的時候只能配置0-3
    發(fā)表于 07-23 08:00

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

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

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

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

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

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

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

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