色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

如何配置sequence的仲裁算法和優先級?

sanyue7758 ? 來源:芯片學堂 ? 2023-04-27 15:20 ? 次閱讀

01 Arbitrary

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

243ed7da-e4cb-11ed-ab56-dac502259ad0.png

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

下面給出一個簡單的UVM例程:例程同時啟動三個sequence(seq_0, seq_1, seq_2),它們會往同一個sequencer發transaction,并且在啟動的時候還分配了權重值(start方法的第三個參數),每個sequence會循環發送4個transaction。

在Env中例化sequencer和driver,并完成連接。例程中在driver拿到transaction之后,會根據transaction的成員變量id和index打印出來當前transaction產生自哪個sequence,以及是循環的第幾次。

244de914-e4cb-11ed-ab56-dac502259ad0.png

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

2457b390-e4cb-11ed-ab56-dac502259ad0.png

實際上,UVM給我們預設了六種仲裁算法供選擇,同時保留了用戶自定義的接口。默認情況下,使用的仲裁算法是UVM_SEQ_ARB_FIFO,嚴格按照先進先出的原則來做選擇,所以才會出現上面說的,仿真結果跟權重值沒有關系。關于仲裁算法,需要根據實際測試場景來做出選擇。

24703a50-e4cb-11ed-ab56-dac502259ad0.png

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

247a69ee-e4cb-11ed-ab56-dac502259ad0.png

02 LockingMechanism

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

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

24938f5a-e4cb-11ed-ab56-dac502259ad0.png

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

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

24a0670c-e4cb-11ed-ab56-dac502259ad0.png

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

24a7a166-e4cb-11ed-ab56-dac502259ad0.png

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

03Sequence Interrupt

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

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

24c2660e-e4cb-11ed-ab56-dac502259ad0.png

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




審核編輯:劉清

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

    關注

    68

    文章

    19404

    瀏覽量

    230849
  • 控制器
    +關注

    關注

    112

    文章

    16444

    瀏覽量

    179122
  • UVM
    UVM
    +關注

    關注

    0

    文章

    182

    瀏覽量

    19211
  • FIFO存儲
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6026

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

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

收藏 人收藏

    評論

    相關推薦

    基于優先級搶占系統的QNX調度算法

    調度算法,是基于優先級的。QNX的線程優先級,是一個0-255的數字,數字越大優先級越高。所以,優先級0是內核中的idle線程。同時,
    發表于 10-31 09:17 ?758次閱讀

    RTOS應用中的優先級反轉問題

    在嵌入式系統中,如果使用基于優先級調度算法的RTOS,系統中可能發生優先級反轉現象。優先級反轉用來描述系統中高優先級任務由于等待低
    發表于 12-14 11:00 ?1255次閱讀

    中斷優先級配置的函數

    一、中斷優先級配置的函數:1.NVIC_IRQChannelPreemptionPriority配置搶占優先級2.NVIC_IRQChannelSubPriority
    發表于 08-04 08:24

    如何在VHDL中實現簡單優先級仲裁

    本文著眼于仲裁器的用例和優點,以及在VHDL中實現簡單優先級仲裁器。仲裁是任何現代計算機系統的重要組成部分。從I2C和CAN 等通信協議中的總線仲裁
    發表于 12-23 06:38

    什么是優先級位圖算法

    什么是優先級位圖算法
    發表于 12-27 07:43

    如何配置sequence仲裁算法優先級及中斷sequence的執行

    出來當前transaction產生自哪個sequence,以及是循環的第幾次。仿真結果如下,可以看得出來在沒有配置仲裁算法的情況下,即使我們為seq
    發表于 09-23 14:35

    簡單優先級仲裁器:使用VHDL和Logisim在嵌入式系統中分配資源

    本文著眼于仲裁器的用例和優點,以及在VHDL中實現簡單優先級仲裁器。仲裁是任何現代計算機系統的重要組成部分。從I2C和CAN 等通信協議中的總線仲裁
    發表于 02-13 09:45 ?1008次閱讀
    簡單<b class='flag-5'>優先級</b><b class='flag-5'>仲裁</b>器:使用VHDL和Logisim在嵌入式系統中分配資源

    STM32中斷及FreeRTOS中斷優先級配置

    STM32中斷,及FreeRTOS中斷優先級配置
    的頭像 發表于 03-04 11:45 ?8984次閱讀
    STM32中斷及FreeRTOS中斷<b class='flag-5'>優先級</b><b class='flag-5'>配置</b>

    Cortex-M中斷及FreeRTOS中斷優先級配置原理

    下面就來說說關于Cortex-M的中斷,及FreeRTOS中斷優先級配置原理。
    發表于 02-08 15:30 ?3次下載
    Cortex-M中斷及FreeRTOS中斷<b class='flag-5'>優先級</b><b class='flag-5'>配置</b>原理

    中斷優先級處理的原則及配置 搶占優先級和響應優先級的區別

    首先我們需要知道什么是中斷優先級:中斷優先級是CPU響應中斷的先后順序
    的頭像 發表于 05-18 15:10 ?2.8w次閱讀
    中斷<b class='flag-5'>優先級</b>處理的原則及<b class='flag-5'>配置</b> 搶占<b class='flag-5'>優先級</b>和響應<b class='flag-5'>優先級</b>的區別

    如何配置sequence仲裁算法優先級

    這樣一來,在驗證環境運行中就會出現競爭的問題,當多個sequence同時企圖向下游發transaction的時候,sequencer需要能夠決定處理這些transaction的順序。而給出答案的,是sequencer內建的仲裁機制。
    的頭像 發表于 09-14 15:59 ?1552次閱讀

    SysTick的優先級配置方法

    SysTick的優先級配置,常見的有兩種說法,這兩種說法完全相反,依次說一下各自特點。
    的頭像 發表于 03-01 10:49 ?5069次閱讀
    SysTick的<b class='flag-5'>優先級</b><b class='flag-5'>配置</b>方法

    什么是優先級反轉

    假設現在有三個任務TaskA(優先級高)、TaskB(優先級中)、TaskC(優先級低),一個信號量(Semaphore),此信號量用于任務之間爭奪某個資源。在某一時刻,高優先級的Ta
    的頭像 發表于 04-24 13:01 ?2350次閱讀
    什么是<b class='flag-5'>優先級</b>反轉

    為什么使用CubeMx配置NVIC時不見子優先級選項

    時,不難發現一個問題,那就是怎么沒有中斷子優先級【或稱響應優先級、副優先級等】的配置?!【當然,很多時候我們或許沒有關注子優先級】如下圖所示
    的頭像 發表于 09-09 15:32 ?1345次閱讀
    為什么使用CubeMx<b class='flag-5'>配置</b>NVIC時不見子<b class='flag-5'>優先級</b>選項

    GD32如何配置中斷優先級分組以及中斷優先級

    使用GD32 MCU的過程中,大家可能會有以下疑問:中斷優先級如何配置和使用?
    的頭像 發表于 01-10 10:30 ?3190次閱讀
    GD32如何<b class='flag-5'>配置</b>中斷<b class='flag-5'>優先級</b>分組以及中斷<b class='flag-5'>優先級</b>
    主站蜘蛛池模板: 麻豆精品传媒一二三区 | 亚洲AV精品无码国产一区 | 亚洲中文无码亚洲人在线观看- | 亚洲精品m在线观看 | 亚洲AV无码一区二区色情蜜芽 | 同时和两老师双飞 | 久久re热在线视频精69 | 欧美最猛黑人AAAAA片 | 欧美成人国产 | 欧美日韩一区不卡在线观看 | 欧美亚洲日韩欧洲不卡 | 男女肉大捧进出全过程免费 | 久久这里只有是精品23 | 亚洲精品久久YY5099 | 亚洲一区在线观看视频 | 宝贝你骚死哥了好爽 | 国产XXXXXX农村野外 | 亚洲这里只有精品 | 亚洲精品入口一区二区乱麻豆精品 | 草莓在线观看 | 国产精品视频国产永久视频 | 富婆夜店找黑人猛男BD在线 | 亚洲中文无码亚洲人在线观看- | 全部免费特黄特色大片看片 | 高H内射NP古文| 久久无码人妻AV精品一区 | 中文字幕无码亚洲视频 | 午夜向日葵视频在线观看 | 久久热国产在线视频 | 伊人久久精品午夜 | 高H黄暴NP辣H一女多男 | 久久国语露脸精品国产 | 夜里18款禁用的免费B站动漫 | 久久久久综合网久久 | 俄罗斯黄色大片 | 亚洲色欲色欲www474ee | 国产精品久久久久成人免费 | 免费人成在线观看网站视频 | 日本色女孩影院 | 999久久久国产精品蜜臀AV | 欧美日韩亚洲中字二区 |