在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

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

UVM response_handler和get_response機(jī)制

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

很多UVM用戶(hù)平時(shí)更多的使用get_response()方式去獲得uvm_driver的response,但get_response有些缺點(diǎn):由于 get_response() 是一種阻塞方法,它會(huì)阻塞直到收到來(lái)自 UVM 驅(qū)動(dòng)程序 (put_response()) 的響應(yīng)。

因此,如果我們使用 get_response() 方法實(shí)現(xiàn)并按此順序?qū)?start_item()、finish_item() 和 finally get_response() 放置在序列的 body() 方法中,這將導(dǎo)致非流水線序列實(shí)現(xiàn),因?yàn)橄乱粋€(gè)序列項(xiàng)可以只有在 get_response() 方法收到前一個(gè)請(qǐng)求序列項(xiàng)的響應(yīng)項(xiàng)后,才提供給 UVM 驅(qū)動(dòng)程序。

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

image.png

1. 如何使用response_handler

如果想要實(shí)現(xiàn)response_handler機(jī)制的話(huà),第一步需要在要使用這個(gè)機(jī)制的sequence里使能它,即調(diào)用use_response_handler(1)函數(shù)把m_use_response_handler變量設(shè)置為1就行,m_use_response_handler是uvm_sequence_base類(lèi)里的一個(gè)成員變量,默認(rèn)值為0,也就是不打開(kāi)。第二步需要override uvm_sequence_base類(lèi)里的response_handler函數(shù),實(shí)現(xiàn)自己對(duì)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對(duì)uvm_driver沒(méi)有任何影響,也就是不可見(jiàn),uvm_driver仍然用之前的put_response機(jī)制就行。

2. response_handler背后機(jī)制

sequence里的response_handler(xxx)函數(shù)在uvm_driver調(diào)用seq_item_export.put_response(rsp)的時(shí)會(huì)自動(dòng)被調(diào)用執(zhí)行,故此我們從seq_item_export.put_response(rsp)講起。

uvm_driver調(diào)用put_response(rsp)時(shí),會(huì)調(diào)用uvm_sequencer_param_base里的put_response(rsp)函數(shù),這個(gè)函數(shù)的定義為:

image.png

313行到326行就是對(duì)傳參進(jìn)來(lái)的rsp做一些檢查。328行會(huì)根據(jù)rsp里攜帶的sequence_id去調(diào)用m_find_sequence函數(shù)在reg_sequences關(guān)聯(lián)數(shù)組里找對(duì)應(yīng)sequence的句柄,如果找到了就返回sequence句柄,沒(méi)有找到的話(huà),就直接返回null,并報(bào)告沒(méi)有找到原始sequence的信息。通常我們返回的是非null的,因此會(huì)進(jìn)入330行到337行。

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

2.1 sequence_ptr.response_handler(t)

sequence里的response_handler()函數(shù)我們?cè)诘谝恍」?jié)里也提到了,原型是個(gè)空函數(shù),需要用到這個(gè)機(jī)制的用戶(hù)自己去override它來(lái)實(shí)現(xiàn)需要的功能。

2.2 sequence_ptr.put_response(t)

在uvm_sequence_base類(lèi)的put_response函數(shù)又會(huì)繼續(xù)調(diào)用put_base_response函數(shù),它們倆的代碼為:

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函數(shù)里會(huì)將uvm_driver送過(guò)的rsp放到response_queue隊(duì)列了,response_queue隊(duì)列定義為:protected uvm_sequence_item response_queue[$]。另外說(shuō)下response_queue_depth這個(gè)int類(lèi)型變量,它的默認(rèn)值為8,也就是response_queue隊(duì)列默認(rèn)只能放8個(gè)rsp,如果超過(guò)的話(huà),會(huì)被直接忽視掉(用戶(hù)可以打開(kāi)response_queue_error_report_disabled來(lái)報(bào)錯(cuò))。

但如果用戶(hù)想要讓response_queue隊(duì)列可以放更多的rsp呢?需要調(diào)用uvm_sequence_base里的set_response_queue_depth(xx)來(lái)設(shè)置新值,xx就是傳進(jìn)去的int類(lèi)型數(shù)值。也可以調(diào)用get_response_queue_depth()來(lái)返回當(dāng)前設(shè)置的值。

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

3. get_response背后機(jī)制

在sequence中調(diào)用get_response(xxx)的時(shí)候,對(duì)調(diào)用uvm_sequence_base類(lèi)里的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隊(duì)列里拿數(shù)據(jù),response_queue里的數(shù)據(jù)是put_response在沒(méi)有使能response_handler機(jī)制情況下放進(jìn)去的。因此用戶(hù)要注意一旦采用response_handler機(jī)制后,在當(dāng)前sequence里一定不能用get_response,反則它會(huì)get不到response,一直block在get_base_response方法的991行。

如果transaction_id為-1,也就是用戶(hù)沒(méi)有指定要得到特定transaction_id的response時(shí),get_base_response會(huì)默認(rèn)返回response_queue里的第一個(gè)response,類(lèi)似于FIFO。如果transaction_id不為-1,那么get_base_response會(huì)在response_queue里檢索,直到找到1個(gè)匹配對(duì)應(yīng)transaction_id的response為止。

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19446
  • FIFO存儲(chǔ)
    +關(guān)注

    關(guān)注

    0

    文章

    103

    瀏覽量

    6154
收藏 人收藏

    評(píng)論

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

    詳解Android Handler機(jī)制和原理

    在Android開(kāi)發(fā)中,Handler機(jī)制是一個(gè)很重要的知識(shí)點(diǎn),主要用于消息通信。
    的頭像 發(fā)表于 03-26 14:32 ?2693次閱讀

    TC387的lin主節(jié)點(diǎn)在沒(méi)有從節(jié)點(diǎn)連接時(shí)主response無(wú)法發(fā)出如何解決?

    前提TC387的lin為主節(jié)點(diǎn),沒(méi)有從節(jié)點(diǎn)連接,當(dāng)僅有主response時(shí),主response可以可以發(fā)出。當(dāng)同時(shí)有主response和從response時(shí),主
    發(fā)表于 02-01 08:04

    esp8266透明傳輸下發(fā)送數(shù)據(jù)模塊response是什么意思?

    現(xiàn)在ESP8266通過(guò)路由器訪問(wèn)到了云服務(wù)器,在透明傳輸模式下,我發(fā)送了一些數(shù)據(jù),然后下圖是給出的response。我設(shè)置了ESP8266為T(mén)CP客戶(hù)端,傳輸模式為T(mén)CP,這是說(shuō)明傳輸?shù)膮f(xié)議為T(mén)CP
    發(fā)表于 04-02 06:35

    怎么將完整的GCX Cal降級(jí)為Enhanced Response Cal

    Response - > Cal - > Mange Cals - > Correction Methods ...導(dǎo)航到“Select Calibration Type”頁(yè)面,然后取消
    發(fā)表于 04-19 14:42

    什么是UVM Report機(jī)制

    UVM Report機(jī)制概述
    發(fā)表于 12-21 06:55

    介紹兩種交互方法來(lái)完成Sequencer和Driver的握手機(jī)制

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

    AT報(bào)錯(cuò)Read response buffer failed的解決辦法分享

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

    談?wù)?b class='flag-5'>UVM中的uvm_info打印

    =UVM_INFO, string id=“”);  if (get_report_verbosity_level(severity, id) 《 verbosity ||  get
    發(fā)表于 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
    發(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.
    發(fā)表于 10-18 23:43 ?25次下載

    Get Fast Stable Response From Im

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

    ADuCM330WFS/ADuCM331WFS Digital Filter Frequency Response Calculator

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

    UVM sequence機(jī)制response的簡(jiǎn)單使用

    sequence作為UVM幾個(gè)核心機(jī)制之一,它有效地將transaction的產(chǎn)生從driver中剝離出來(lái),并且通過(guò)和sequencer相互配合,成功地將driver的負(fù)擔(dān)降低至僅聚焦于根據(jù)協(xié)議將
    的頭像 發(fā)表于 09-22 09:26 ?2796次閱讀

    UVM driver和sequencer的通信

    sequencer生成激勵(lì)數(shù)據(jù),并將其傳遞給driver執(zhí)行。UVM類(lèi)庫(kù)提供了uvm_sequencer基類(lèi),其參數(shù)為request和response數(shù)據(jù)類(lèi)型。
    的頭像 發(fā)表于 06-07 11:58 ?2205次閱讀
    <b class='flag-5'>UVM</b> driver和sequencer的通信

    TAST-TRANSIENT-RESPONSE 750-MA低壓差線性穩(wěn)壓器數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《TAST-TRANSIENT-RESPONSE 750-MA低壓差線性穩(wěn)壓器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 02-29 14:38 ?0次下載
    TAST-TRANSIENT-<b class='flag-5'>RESPONSE</b> 750-MA低壓差線性穩(wěn)壓器數(shù)據(jù)表
    主站蜘蛛池模板: 操女人网址| 中文字幕区 | www.操操操.com| 亚洲高清色图 | 伊人久久成人 | 成人国产精品高清在线观看 | 日本三区四区免费高清不卡 | 国产乱辈通伦影片在线播放亚洲 | 欧美8888| 新天堂在线 | 免费a级午夜绝情美女视频 免费jlzzjlzz在线播放视频 | 五月婷婷婷婷婷 | 国产高清一区二区 | 淫操| 亚洲福利秒拍一区二区 | 美女网色| 福利视频免费看 | 国模大胆一区二区三区 | 国产精品三级国语在线看 | 成人永久免费视频 | 天天夜夜操 | 在线观看成人网 | 91大神精品 | 朱元璋传奇1998王耿豪版 | 性在线视频 | 夜夜爽天天爽 | caoporn97人人做人人爱最新 | 色干干| 性欧美视频videos6一9 | 丁香六月纪婷婷激情综合 | 国产一区二卡三区四区 | 亚洲第九页 | 欧美18videosex性欧美69 | 国产美女视频黄a视频免费全过程 | 久久精品亚瑟全部免费观看 | 色在线播放 | 亚洲成a人一区二区三区 | vip免费观看 | 欧美一区二区视频 | 亚洲精品香蕉婷婷在线观看 | 色综合天天综合网看在线影院 |