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

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

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

3天內不再提示

UVM response_handler和get_response機制

冬至子 ? 來源:CSDN ? 作者:谷公子 ? 2023-05-23 16:56 ? 次閱讀

很多UVM用戶平時更多的使用get_response()方式去獲得uvm_driver的response,但get_response有些缺點:由于 get_response() 是一種阻塞方法,它會阻塞直到收到來自 UVM 驅動程序 (put_response()) 的響應。

因此,如果我們使用 get_response() 方法實現并按此順序將 start_item()、finish_item() 和 finally get_response() 放置在序列的 body() 方法中,這將導致非流水線序列實現,因為下一個序列項可以只有在 get_response() 方法收到前一個請求序列項的響應項后,才提供給 UVM 驅動程序。

為了實現背靠背的傳輸,我們可以使用response_handler()機制,它可以將sequence中發送request和處理response兩個操作分開處理,盡量減少耦合。例子如下流程圖。

image.png

1. 如何使用response_handler

如果想要實現response_handler機制的話,第一步需要在要使用這個機制的sequence里使能它,即調用use_response_handler(1)函數把m_use_response_handler變量設置為1就行,m_use_response_handler是uvm_sequence_base類里的一個成員變量,默認值為0,也就是不打開。第二步需要override uvm_sequence_base類里的response_handler函數,實現自己對response任意處理的需求。它的原型為:

// Function: response_handler
  // When the use_reponse_handler bit is set to 1, this virtual method is called
  // by the sequencer for each response that arrives for this sequence.
  virtual function void response_handler(uvm_sequence_item response);
    return;
  endfunction

response_handler對uvm_driver沒有任何影響,也就是不可見,uvm_driver仍然用之前的put_response機制就行。

2. response_handler背后機制

sequence里的response_handler(xxx)函數在uvm_driver調用seq_item_export.put_response(rsp)的時會自動被調用執行,故此我們從seq_item_export.put_response(rsp)講起。

uvm_driver調用put_response(rsp)時,會調用uvm_sequencer_param_base里的put_response(rsp)函數,這個函數的定義為:

image.png

313行到326行就是對傳參進來的rsp做一些檢查。328行會根據rsp里攜帶的sequence_id去調用m_find_sequence函數在reg_sequences關聯數組里找對應sequence的句柄,如果找到了就返回sequence句柄,沒有找到的話,就直接返回null,并報告沒有找到原始sequence的信息。通常我們返回的是非null的,因此會進入330行到337行。

如何避免返回null,在我的另一篇博客中說了,有興趣讀者可以瞄一眼(UVM中使用put_response的一個注意點)。在332行,會判斷m_use_response_handler變量的值,如果為1就執行333行sequence里的response_handler函數,如果為0就執行337行response_handler的put_response。可想而知,這是1個關鍵分叉點。我們分別介紹這兩個方法。

2.1 sequence_ptr.response_handler(t)

sequence里的response_handler()函數我們在第一小節里也提到了,原型是個空函數,需要用到這個機制的用戶自己去override它來實現需要的功能。

2.2 sequence_ptr.put_response(t)

在uvm_sequence_base類的put_response函數又會繼續調用put_base_response函數,它們倆的代碼為:

virtual function void put_response (uvm_sequence_item response_item);
    put_base_response(response_item); // no error-checking
  endfunction
virtual function void put_base_response(input uvm_sequence_item response);
    if ((response_queue_depth == -1) ||
        (response_queue.size() < response_queue_depth)) begin
      response_queue.push_back(response);
      return;
    end
    if (response_queue_error_report_disabled == 0) begin
      uvm_report_error(get_full_name(), "Response queue overflow, response was dropped", UVM_NONE);
    end
  endfunction

可以看出,在put_base_response函數里會將uvm_driver送過的rsp放到response_queue隊列了,response_queue隊列定義為:protected uvm_sequence_item response_queue[$]。另外說下response_queue_depth這個int類型變量,它的默認值為8,也就是response_queue隊列默認只能放8個rsp,如果超過的話,會被直接忽視掉(用戶可以打開response_queue_error_report_disabled來報錯)。

但如果用戶想要讓response_queue隊列可以放更多的rsp呢?需要調用uvm_sequence_base里的set_response_queue_depth(xx)來設置新值,xx就是傳進去的int類型數值。也可以調用get_response_queue_depth()來返回當前設置的值。

response_queue隊列里的值會給get_reponse(xxx)使用。

3. get_response背后機制

在sequence中調用get_response(xxx)的時候,對調用uvm_sequence_base類里的get_base_response(xxx)方法。

virtual task get_response(output RSP response, input int transaction_id = -1);
    uvm_sequence_item rsp;
    get_base_response( rsp, transaction_id);
    $cast(response,rsp);
  endtask

get_base_response(xxx)方法的代碼如下:

image.png

從以上代碼可以看出,get_reponse(xxx)就是從response_queue隊列里拿數據,response_queue里的數據是put_response在沒有使能response_handler機制情況下放進去的。因此用戶要注意一旦采用response_handler機制后,在當前sequence里一定不能用get_response,反則它會get不到response,一直block在get_base_response方法的991行。

如果transaction_id為-1,也就是用戶沒有指定要得到特定transaction_id的response時,get_base_response會默認返回response_queue里的第一個response,類似于FIFO。如果transaction_id不為-1,那么get_base_response會在response_queue里檢索,直到找到1個匹配對應transaction_id的response為止。

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

    關注

    0

    文章

    182

    瀏覽量

    19189
  • FIFO存儲
    +關注

    關注

    0

    文章

    103

    瀏覽量

    6018
收藏 人收藏

    評論

    相關推薦

    詳解Android Handler機制和原理

    在Android開發中,Handler機制是一個很重要的知識點,主要用于消息通信。
    的頭像 發表于 03-26 14:32 ?2487次閱讀

    TC387的lin主節點在沒有從節點連接時主response無法發出如何解決?

    前提TC387的lin為主節點,沒有從節點連接,當僅有主response時,主response可以可以發出。當同時有主response和從response時,主
    發表于 02-01 08:04

    esp8266透明傳輸下發送數據模塊response是什么意思?

    現在ESP8266通過路由器訪問到了云服務器,在透明傳輸模式下,我發送了一些數據,然后下圖是給出的response。我設置了ESP8266為TCP客戶端,傳輸模式為TCP,這是說明傳輸的協議為TCP
    發表于 04-02 06:35

    怎么將完整的GCX Cal降級為Enhanced Response Cal

    Response - > Cal - > Mange Cals - > Correction Methods ...導航到“Select Calibration Type”頁面,然后取消
    發表于 04-19 14:42

    什么是UVM Report機制?

    UVM Report機制概述
    發表于 12-21 06:55

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

    get_response()去等待響應item,driver中也不需要set_id_info()和put()返回響應item。壞處是,如果裁掉響應部分的握手,sequence也就不知道driver什么時候完成
    發表于 09-23 14:39

    AT報錯Read response buffer failed的解決辦法分享

    “read response buffer failed. the response buffer size is out of buffer size(64)!”的錯誤且無法正常運行后續功能,將
    發表于 11-24 14:31

    談談UVM中的uvm_info打印

    =UVM_INFO, string id=“”);  if (get_report_verbosity_level(severity, id) 《 verbosity ||  get
    發表于 03-17 16:41

    TPS76850,pdf(Fast-Transient-Response 1-A Low-Dropout Voltage

    This device is designed to have a fast transient response and be stable with 10 µF
    發表于 10-18 23:00 ?70次下載

    TPS76801,pdf(fast transient response and be stable)

    This device is designed to have a fast transient response and be stable with 10 μF capacitors.
    發表于 10-18 23:43 ?25次下載

    Get Fast Stable Response From Im

    Get Fast Stable Response From Improved Unity-Gain Followers
    發表于 03-24 15:46 ?0次下載

    ADuCM330WFS/ADuCM331WFS Digital Filter Frequency Response Calculator

    ADuCM330WFS/ADuCM331WFS Digital Filter Frequency Response Calculator
    發表于 01-28 11:25 ?5次下載
    ADuCM330WFS/ADuCM331WFS Digital Filter Frequency <b class='flag-5'>Response</b> Calculator

    UVM sequence機制response的簡單使用

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

    UVM driver和sequencer的通信

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

    TAST-TRANSIENT-RESPONSE 750-MA低壓差線性穩壓器數據表

    電子發燒友網站提供《TAST-TRANSIENT-RESPONSE 750-MA低壓差線性穩壓器數據表.pdf》資料免費下載
    發表于 02-29 14:38 ?0次下載
    TAST-TRANSIENT-<b class='flag-5'>RESPONSE</b> 750-MA低壓差線性穩壓器數據表
    主站蜘蛛池模板: hd性欧美俱乐部中文| 久99视频精品免费观看福利| 一品道门在线视频| 中文字幕一区久久久久| 国产乱码伦人偷精品视频| 日日夜夜狠狠干| 抽插妇女疯狂视频| 日本工口生肉全彩大全| 亚洲中文字幕永久在线| 99在线国产视频| 嗯啊好爽视频| 99久久精品国产国产毛片| 免费播放美女一级毛片| 97在线视频网站| 饥渴的新婚女教师| 亚洲精品国产高清不卡在线| china年轻小帅脸直播飞机| 老师你狠狂| 99久久国产露脸精品竹菊传煤| 看看妇女的B免费看| 特级淫片大乳女子高清视频| 成人手机在线观看| 蜜桃TV成人网站免费打开| 2017天天拍天天拍香蕉视频| 久久综合久久鬼色| 91九色网址| 精品国产麻豆免费人成网站| 强奷漂亮女老板在线播放| 成人欧美尽粗二区三区AV| 四虎国产精品永久免费入口| 国产精品一区二区激情| 亚洲欧美日本国产在线观18| 国产传媒在线观看| 内射少妇36P九色| a视频在线免费观看| 色琪琪无码成人AV视频| 国产人妻人伦精品久久无码| 一边啪啪的一边呻吟声口述| 免费果冻传媒2021在线看| 鬼灭之刃花街篇免费樱花动漫| 亚洲粉嫩美白在线|