chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

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

工程師鄧生 ? 來源:芯片學堂 ? 作者: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,并啟動它們,以構造出復雜的測試場景。

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

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

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

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

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

df1c1cb8-304c-11ed-ba43-dac502259ad0.png 實際上,UVM給我們預設了六種仲裁算法供選擇,同時保留了用戶自定義的接口。默認情況下,使用的仲裁算法是UVM_SEQ_ARB_FIFO,嚴格按照先進先出的原則來做選擇,所以才會出現(xià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)來配置仲裁算法,仿真結果我貼在下面,可以看到,我們分配的權重值開始起作用了:

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

02 LockingMechanism

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

Sequence搶占功能同樣來源于測試場景的需求,應用于當有某個sequence需要優(yōu)先并獨占sequencer的時候,比如對中斷(interrupt)的處理。如下圖所示,當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)用它的成員方法來獲取當前的狀態(tài)信息。比如,可以在sequence的body()里面使用m_sequencer.is_grabbed()函數(shù)來看當前sequencer是不是被誰鎖住了;還可以使用m_sequencer.current_grabber()函數(shù)來獲得當前鎖住sequencer的sequence句柄;還有其他函數(shù)可以使用,具體可以參考UVM的手冊。

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

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

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

這是一個UVM的bug,問題的根源在uvm_sequencer_base的源碼中,當有多個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構建的,用戶在使用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一旦被啟動,通常不會去想著將它異常結束(通過seq.kill()或者seqr.stop_sequences()調(diào)用),否則我們需要更加復雜的實現(xiàn)去查看當前driver是否空閑,以確保sequencer跟driver的握手機制不出問題。如果有必要將sequence提前結束,建議在sequence內(nèi)部去做條件判斷和處理。



審核編輯:劉清

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

    關注

    5

    文章

    912

    瀏覽量

    43536
  • UVM
    UVM
    +關注

    關注

    0

    文章

    183

    瀏覽量

    19933
  • FIFO芯片
    +關注

    關注

    0

    文章

    10

    瀏覽量

    9092

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    電能質量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳的優(yōu)先級是怎樣的?

    電能質量在線監(jiān)測裝置的暫態(tài)數(shù)據(jù)補傳優(yōu)先級設計遵循 事件驅動、主站指令優(yōu)先、資源動態(tài)分配 的原則,結合行業(yè)標準和設備機制,形成以下多層級優(yōu)先級體系: 一、最高優(yōu)先級:緊急事件驅動補傳 1
    的頭像 發(fā)表于 11-06 14:02 ?83次閱讀

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

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

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

    (ISR) 中斷仲裁:多個中斷源同時向處理器發(fā)出請求,仲裁選擇優(yōu)先處理哪個中斷源 中斷嵌套:已經(jīng)在處理某個中斷,執(zhí)行ISR,有一個優(yōu)先級更高的中斷請求到來,處理器終止當前的ISR,響應
    發(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,設置了3,5,6,8幾個優(yōu)先級,設備在現(xiàn)場正常運行了一年多后,顯示、前端、后端這3個低優(yōu)先級線程異常了,表現(xiàn)為屏幕不動,前端采集數(shù)據(jù)沒有變化等,其他高優(yōu)先級的線程如通訊,按鍵都能正常運行,通訊有喂狗操作,停止通訊,會看門狗復
    發(fā)表于 09-25 07:33

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

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

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

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

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

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

    請問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)整外設的中斷優(yōu)先級?

    你好林工,我該怎么調(diào)整外設的中斷優(yōu)先級?是否可以通過工具調(diào)整?默認設置下,是不是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

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