精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

談UVM之sequence/item見解 sequencer特性及應用(下)

西西 ? 2018-02-19 10:14 ? 次閱讀

本文將接著分享sequencer的相關知識,對于sequencer的仲裁特性有幾種可選,UVM_SEQ_ARB_FIFO ;UVM_SEQ_ARB_WEIGHTED;UVM_SEQ_ARB_RANDOM ;UVM_SEQ_ARB_STRICT_FIFO等。出其中三種需要特別區分外其它的模式可以滿足絕大多數的仲裁需求。

sequencer的仲裁特性及應用

在之前我們就談到了,uvm_sequencer類自建了仲裁機制用來保證多個sequence同時掛載到sequencer時,可以按照規則允許特定的sequence中的item優先通過。在實際使用中,我們可以通過uvm_sequencer::set_arbitration(UVM_SEQ_ARB_TYPE val)來設置仲裁模式。這里的仲裁模式UVM_SEQ_ARB_TYPE有下面幾種值可以選擇:

UVM_SEQ_ARB_FIFO :默認模式。來自于sequences的發送請求,按照FIFO先進先出的方式被依次授權,和優先級沒有關系。

UVM_SEQ_ARB_WEIGHTED:不同sequence的發送請求,將按照它們的優先級被隨機授權。

UVM_SEQ_ARB_RANDOM :不同的請求會被隨機授權,而無視它們的抵達順序和優先級。

UVM_SEQ_ARB_STRICT_FIFO:不同的請求,會按照它們的優先級以及抵達順序來依次授權,因此與優先級和抵達時間都有關。

UVM_SEQ_ARB_STRICT_RANDOM:不同的請求,會按照它們最高的優先級被隨機授權,與抵達時間無關。

UVM_SEQ_ARB_USER:用戶可以自仲裁機制方法user_priority_arbitration()來裁定哪個sequence的請求優先被授權。

在上面的仲裁模式中,與priority有關的模式有UVM_SEQ_ARB_WEIGHTED、UVM_SEQ_ARB_STRICT_FIFO和UVM_SEQ_ARB_STRICT_RANDOM。這三種模式的區別在于,UVM_SEQ_ARB_WEIGHTED的授權會落到各個優先級的請求上面,而UVM_SEQ_ARB_STRICT_RANDOM則只會將授權隨機安排到最高優先級的請求上面,UVM_SEQ_ARB_STRICT_FIFO則不會隨機授權,而是嚴格按照優先級以及抵達順序來依次授權。沒有特別要的要求,則用戶不需要再額外自定義授權算法,因此使用UVM_SEQ_ARB_USER這一模式的情況不多見,其它的模式可以滿足絕大多數的仲裁需求。

談UVM之sequence/item見解 sequencer特性及應用(下)

鑒于sequence在傳送的優先級可以影響sequencer的仲裁授權,我們有必要結合sequencer的仲裁模式選擇和sequence發送的優先級參數設置給出一段例碼。通過這段例碼,希望讀者可以掌握如何設置仲裁模式和優先級的傳遞。

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

輸出結果:

談UVM之sequence/item見解 sequencer特性及應用(下)

上面的例碼中,seq1、seq2、seq3在同一時刻發起傳送請求,通過`uvm_do_prio_with的宏,在發送sequence時可以傳遞優先級參數。由于將seq1與seq2設置為同樣的高優先級,而seq3設置為較低的優先級,這樣在隨后的UVM_SEQ_ARB_STRICT_FIFO仲裁模式下,可以從輸出結果看到,按照優先級高低和傳送請求時間順序,先將seq1和seq2中的item發送完畢,隨后將seq3發送完。

除了在上面的sequence遵循仲裁機制,將自身的item發送完才結束自身的正常模式以外,在一些特殊情形下,有一些sequence需要有更高的權限取得sequencer的授權來訪問driver。 例如需要響應中斷的情形下,用于處理中斷的sequence應該有更高的權限來獲得sequencer的授權。為此,uvm_sequencer提供了兩種鎖定機制,分別可以通過lock()和grab()方法實現。這兩種方法的區別在于:

lock()與unlock()這一對方法可以為sequence提供排外的訪問權限,但前提條件是,該sequence首先需要按照sequencer的仲裁機制獲得授權。而一旦sequence獲得授權,則無需擔心權限被收回,只有該sequence主動unlock它的sequencer主動解鎖,才可以釋放這一鎖定的權限。lock()是一種阻塞的任務,只有獲得了權限,它才會返回。

grab()與ungrab()也可以為sequence提供排外的訪問權限,而且它只需要在sequencer下一次授權周期時就可以無條件地獲得授權。與lock方法相比,grab方法無視同一時刻內發起傳送請求的其它sequence,而唯一可以阻止它的只有已經預先獲得授權的其它lock或者grab的sequence。

這里需要注意的是,由于“解鈴還須系鈴人”,如果sequence使用了lock()或者grab()方法,必須在sequence結束前調用unlock()或者ungrab()方法來釋放權限,否則sequencer會進入死鎖狀態而無法繼續為其余sequence授權。下面的給出一段例碼,用來展示如何使用上述的方法實現鎖定的sequence傳送方式。

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

談UVM之sequence/item見解 sequencer特性及應用(下)

輸出結果:

談UVM之sequence/item見解 sequencer特性及應用(下)

結合例碼和輸出結果,我們從中可以發現如下幾點:

對于locks,在10ns時,它跟其它幾個sequence一同向sequencer發起請求,按照仲裁模式,sequencer先后授權給seq1、seq2、seq3,最后才授權的locks。而locks在獲得授權之后,就可以一直享有權限,而無需擔心權限被sequencer收回。直到在locks結束前,用戶需要通過unlock()方法返還權限。

對于grabs,盡管他在20ns時就發起了請求權限(實際上seq1、seq2、seq3也在同一時刻發起了權限請求),而由于權限已經被locks占用,所以它也無權收回權限。因此只有當locks在40ns結束時,grabs才可以在sequencer沒有被鎖定權限的狀態下獲得權限,而grabs獲得權限是無視同一時刻發起請求的其它sequence的。同樣地,在grabs結束前,也應當通過ungrab()方法釋放權限,防止sequencer的死鎖行為。

至此,我們就將sequence/item發送的方法和宏,以及sequence與sequencer之間的仲裁和授權請求方式為讀者介紹完畢。

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

    關注

    0

    文章

    8

    瀏覽量

    8177
收藏 人收藏

    評論

    相關推薦

    數字IC驗證“構成uvm測試平臺的主要組件”(4)連載中...

    設備之間的產品了,事物是組件的操作對象,uvm也對事物建模提供了基類進行擴展,對事物級的建模需要從uvm sequence item擴展。而產生事物對象的事物發生器
    發表于 01-22 15:33

    UVM sequence分層有哪幾種方式呢

    種請求可以使用第一種分層方式,在high-layer sequence中依然使用low-layer sequencer進行驅動,同時對low-layer sequence進行更加精細
    發表于 04-11 16:37

    請問一UVM中的UVMsequences是什么意思啊

    uvm_sequencer_base類派生出來的,其 被參數化為用于與driver 通信的sequence item類型。因此要訪問正在運行sequence 的真實
    發表于 04-11 16:43

    UVM sequence分層的幾種體現

    種請求可以使用第一種分層方式,在high-layer sequence中依然使用low-layer sequencer進行驅動,同時對low-layer sequence進行更加精細
    發表于 04-14 11:08

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

    01 Arbitrary在UVM中,多個sequence可以同時被綁定到相同的sequencer并啟動。這種測試場景在實際中是存在的,比如在模擬同一個總線master口上的不同類型的數據流時,可以將
    發表于 09-23 14:35

    介紹兩種交互方法來完成Sequencer和Driver的握手機制

    指定請求和響應sequence_item的具體類型,在默認情況,請求和響應sequence_item的類型為uvm_sequence_itemu
    發表于 09-23 14:39

    sequence item實際應用中應該包含哪些東西

    展開。Sequence item是游走在Sequence-Sequencer-Driver這一基本結構中的數據結構類型,在有些地方也直接叫transaction,可以說是UVM的必用品
    發表于 09-23 14:42

    UVM中seq.start()和default_sequence執行順序

    seqr.start_phase_sequence(phase)解析  start_phase_sequence(xxx)是定義在uvm_sequencer_base類里的,具體看src/seq
    發表于 04-04 17:15

    淺談UVMsequence/item見解(上)

    item指的是uvm_sequence_itemSequence Item具備UVM核心基類所必要的數據操作方法,對于激勵的生成和場景控
    的頭像 發表于 02-19 15:52 ?5004次閱讀
    淺談<b class='flag-5'>UVM</b><b class='flag-5'>之</b><b class='flag-5'>sequence</b>/<b class='flag-5'>item</b><b class='flag-5'>見解</b>(上)

    UVM sequence機制中response的簡單使用

    sequence作為UVM幾個核心機制之一,它有效地將transaction的產生從driver中剝離出來,并且通過和sequencer相互配合,成功地將driver的負擔降低至僅聚焦于根據協議將
    的頭像 發表于 09-22 09:26 ?2348次閱讀

    start()如何執行uvm_sequence

    要使用start()啟動一個sequence,就必須要指定相應的sequencer句柄, **另外的幾個選項一般用不上** 。其中
    的頭像 發表于 03-21 11:37 ?690次閱讀
    start()如何執行<b class='flag-5'>uvm_sequence</b>

    UVMsequence的那些事兒

    將 生成測試case的語句 從 main_phase 中獨立出來,使得使用不同測試用例時,只需要修改sequence部分即可,而不用關注 UVM剩余部分。
    的頭像 發表于 05-26 15:17 ?1026次閱讀
    <b class='flag-5'>UVM</b>中<b class='flag-5'>sequence</b>的那些事兒

    UVM driver和sequencer的通信

    sequencer生成激勵數據,并將其傳遞給driver執行。UVM類庫提供了uvm_sequencer基類,其參數為request和response數據類型。
    的頭像 發表于 06-07 11:58 ?1607次閱讀
    <b class='flag-5'>UVM</b> driver和<b class='flag-5'>sequencer</b>的通信

    Sequencer上啟動一個Sequence

    Sequencer默認不執行任何Sequence。驗證工程師可以通過調用start()啟動一個Sequence,也可以通過uvm_config_db指定一個自動啟動的
    的頭像 發表于 06-10 09:10 ?779次閱讀
    在<b class='flag-5'>Sequencer</b>上啟動一個<b class='flag-5'>Sequence</b>

    UVM設計中的sequence啟動方式有哪幾種呢?

    本篇介紹UVM中的sequence,這是UVM中最基礎的部分。對于前面介紹的uvm_callback, uvm_visitor等,很少被使用
    的頭像 發表于 08-17 10:07 ?3987次閱讀
    <b class='flag-5'>UVM</b>設計中的<b class='flag-5'>sequence</b>啟動方式有哪幾種呢?