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

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

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

3天內不再提示

在UVM中component之間如何通信呢?

冬至子 ? 來源:多讀點書 ? 作者:夕文x ? 2023-05-26 15:07 ? 次閱讀

在簡單的測試平臺里,component之間通過變量或者config_db機制通信是可行的,但是如果在復雜測試平臺中依然使用這種耦合性很強的方式通信的話,就不太行了。

因此,UVM提供了TLM這樣的概念。接下來將會從需求出發(fā),逐步引入port、export、imp、analysis端口、uvm_analysis_imp_decl宏以及FIFO等。

1 典型UVM驗證平臺

圖片

2 一對一如何通信(一般方法)

說明:這里以monitor和scoreboard之間的通信為例

  • 方法一 使用全局變量 :在monitor里對此全局變量進行賦值, 在scoreboard里監(jiān)測此全局變量值的改變
    • 問題:所有模塊都可以修改全局變量,合作中他人誤修改可能導致致命bug
  • 方法二 A中pulic變量+B對模塊A的引用 :scoreboard中使用public類型的變量,然后monitor中使用指向scoreboard的指針對該變量進行賦值
    • 問題:monitor可以修改scoreboard中所有public類型變量
  • 方法三 config機制(類似于在指定模塊作用域構建了全局變量) :在base_test中實例化一個config_object,并將其指針通過config_db傳遞給scoreboard和monitor,然后兩個模塊就可以對該config_object中變量進行操作
    • 問題1:需要引入一個專門的config_object類
    • 問題2:一定要有base_test(父模塊)這個第三方的參與,這樣就不能保證某一個從base_test派生而來的類會不會改變這個config_object類中某些變量的值

現(xiàn)有機制更多通信問題

  • 通信需要考慮阻塞和非阻塞的處理方式
  • 如果scoreboard主動要求向monitor請求數(shù)據(jù), 這樣的行為方式使用systemverilog搭建會非常復雜

3 一對一如何通信(引入TLM)

3.1 新概念

  • TLM:是Transaction Level Modeling( 事務級建模) 的縮寫,是將某一特定功能的一組信息封裝在一起成為一個類,通過這個類(即事務)進行通信。
  • 三個端口:PORT(發(fā)起者)、EXPORT(接收者)、IMP(執(zhí)行者)
  • 端口方法:put/get/transport/peek/get_peek

3.2 使用舉例

說明:以blocking_put系列端口,PORT>EXPORT>IMP的連接舉例說明

圖片

  • A|PORT發(fā)起端口操作put :task A::main_phase中A_port.put(tr);
  • 建立A|PORT和B|EXPORT的連接 :AB的頂層模塊my_env::connect_phase中:A_inst.A_port.connect(B_inst.B_export);
  • 建立B|EXPORT和B|IMP的連接 :B::connect_phase中:B_export.connect(B_imp);
  • 建立B|IMP和B中操作put的連接 :B模塊定義中:uvm_blocking_put_imp#(my_transaction, B) B_imp;
  • B中操作put的實現(xiàn) :function void B::put(my_transaction tr);

注意:EXPORT可以省略,即 PORT直接連接到IMP

4 一對多如何通信(引入analysis端口)

4.1 使用舉例

圖片

  1. A|analysis_port發(fā)起端口操作write :task A::main_phase中A_ap.write(tr);

  2. 建立A|analysis_port和(B或C)|analysis_imp,的連接 :A(B或C)的頂層模塊my_env::connect_phase中

    A_inst.A_ap.connect(B_inst.B_imp);

    A_inst.A_ap.connect(C_inst.C_imp);

  3. 建立(B或C)|analysis_imp和(B或C)中操作write的連接 :(B或C)模塊定義中:

    uvm_analysis_imp#(my_transaction, B) B_imp;或

    uvm_analysis_imp#(my_transaction, C) C_imp;

  4. (B或C)中操作write的實現(xiàn)

    function void B::write

    function void C::write

5 多IMP的模塊的通信問題

5.1 問題描述

一個component(my_scoreboard)內有多個IMP時,依據(jù)前面知識,component(my_scoreboard)中只能有一個write方法,這如何處理兩個imp(來自輸出監(jiān)視monitor 和 來自參考模型model)

5.2 解決方法

方法一:使用宏uvm_analysis_imp_decl

通過宏uvm_analysis_imp_decl,在component(my_scoreboard)中添加不同的后綴以區(qū)分兩個imp的處理邏輯。具體實現(xiàn)如下:

  1. 通過宏uvm_analysis_imp_decl聲明兩個后綴_monitor和_model

    uvm_analysis_imp_decl(**_monitor**)
    uvm_analysis_imp_decl( _model )

  2. 使用帶后綴的analysis_imp端口類聲明兩個analysis_imp端口

    uvm_analysis_imp**_monitor**#(my_transaction, my_scoreboard) monitor_imp;

    uvm_analysis_imp**_model**#(my_transaction, my_scoreboard) model_imp;

  3. 使用帶后綴的write方法實現(xiàn)analysis_imp對信號的處理邏輯

    extern function void write**_monitor**(my_transaction tr);

    extern function void write**_model**(my_transaction tr);

  4. 宏uvm_analysis_imp_decl的特性會讓 相同后綴的 analysis_imp端口 和 write函數(shù) 對應上

    function void my_scoreboard ::write_model(my_transaction tr);

    function void my_scoreboard ::write_monitor(my_transaction tr);

方法二:使用FIFO通信

將imp的實現(xiàn)邏輯放在FIFO中,而component(my_scoreboard)作為PORT端,主動請求get到FIFO中的數(shù)據(jù),關鍵代碼如下:

// my_scoreboard類中
uvm_blocking_get_port #(my_transaction) exp_port;
uvm_blocking_get_port #(my_transaction) act_port;
// task my_scoreboard::main_phase中
exp_port.get(get_expect); // 獲取的數(shù)據(jù)存到get_expect中
act_port.get(get_actual); // 獲取的數(shù)據(jù)存到get_actual中

// my_env類中
uvm_tlm_analysis_fifo #(my_transaction) agt_scb_fifo;
uvm_tlm_analysis_fifo #(my_transaction) agt_mdl_fifo;
uvm_tlm_analysis_fifo #(my_transaction) mdl_scb_fifo;
// function void my_env::connect_phase中
i_agt.ap.connect(agt_mdl_fifo.analysis_export);
mdl.port.connect(agt_mdl_fifo.blocking_get_export);
mdl.ap.connect(mdl_scb_fifo.analysis_export);
scb.exp_port.connect(mdl_scb_fifo.blocking_get_export);
o_agt.ap.connect(agt_scb_fifo.analysis_export);
scb.act_port.connect(agt_scb_fifo.blocking_get_export);

注意:FIFO中的analysis_export和blocking_get_export雖然名字中有關鍵字export, 但是其類型卻是IMP

5.3 用FIFO還是用IMP

個人推薦使用FIFO,尤其是對于使用端口數(shù)組的情況。因為ap與imp直接相連不能使用for循環(huán)(write函數(shù)需要一個一個寫,沒法用數(shù)組),會導致代碼量增加,理解困難。

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

    關注

    0

    文章

    182

    瀏覽量

    19167
  • TLM
    TLM
    +關注

    關注

    1

    文章

    32

    瀏覽量

    24749
  • IMP
    IMP
    +關注

    關注

    0

    文章

    11

    瀏覽量

    8402
  • FIFO存儲
    +關注

    關注

    0

    文章

    103

    瀏覽量

    5969
收藏 人收藏

    評論

    相關推薦

    數(shù)字IC驗證之“什么是UVM”“UVM的特點”“UVM提供哪些資源”(2)連載...

    ??梢?b class='flag-5'>在不改變平臺代碼的基礎上改變平臺的行為,以產(chǎn)生不同類型的激勵。平臺可以不同的驗證工程之間進行移植,善于利用uvm提供的各種機制。可以使驗證平臺具有極強的可重用性。
    發(fā)表于 01-21 16:00

    數(shù)字IC驗證之“典型的UVM平臺結構”(3)連載...

    應用的過程,將uvm的組件封裝起來,可以將這些封裝的組件作為一個整體進行重用,進行芯片級或者是系統(tǒng)級驗證的時候,往往會出現(xiàn)多個模塊的驗證。  此時,測試平臺的結構會發(fā)生變化,圖中
    發(fā)表于 01-22 15:32

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

    的基類。驗證工程師搭建驗證平臺的時候,每一個組件需要從相應的基類進行擴展。  來看一下uvm提供了哪些基類,以及這些基類和平臺中的各個組件之間的關系?! ?b class='flag-5'>uvm
    發(fā)表于 01-22 15:33

    什么是uvm?uvm的特點有哪些

    直觀的印象,就是uvm驗證平臺,它是分層的結構。圖中的每一個巨型框都代表著平臺的一個構成元素。這些元素,我們稱為平臺組建,下面來簡單的分析一下。從最底層上來看,agent 包含了driver,monitor和sequence
    發(fā)表于 02-14 06:46

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

    UVM方法學,UVMsequences 是壽命有限的對象。UVM sequences從uvm_sequence_item基類擴展得到,
    發(fā)表于 04-11 16:43

    談談UVMuvm_info打印

    上有\(zhòng)`uvm_file和\`uvm_line的傳參,它們定義如下:  `define uvm_file `__FILE__  `define uvm_line `__LINE__  
    發(fā)表于 03-17 16:41

    UVMseq.start()和default_sequence執(zhí)行順序

    和seq2誰會先啟動?  // Method1: using build-in start() method of sequence  task run_phase(uvm_phase phase
    發(fā)表于 04-04 17:15

    典型的UVM Testbench架構

    UVM類庫提供了通用的代碼功能,如component hierarchy、transaction level model(TLM),configuration database等等,使用戶能夠創(chuàng)建任何類型的Testbench架構。
    的頭像 發(fā)表于 05-22 10:14 ?2117次閱讀
    典型的<b class='flag-5'>UVM</b> Testbench架構

    UVM TLM的基本概念介紹

    UVM,transaction 是一個類對象,它包含了建模兩個驗證組件之間通信所需的任何信息。
    的頭像 發(fā)表于 05-24 09:17 ?1778次閱讀
    <b class='flag-5'>UVM</b> TLM的基本概念介紹

    UVM學習筆記(一)

    driver應該派生自uvm_driver,而uvm_driver派生自uvm_component。
    的頭像 發(fā)表于 05-26 14:38 ?1388次閱讀
    <b class='flag-5'>UVM</b>學習筆記(一)

    UVMuvm_config_db機制背后的大功臣

    本次講一下UVMuvm_config_db,UVM中提供了一個內部數(shù)據(jù)庫,可以在其中存儲給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-20 17:28 ?1418次閱讀

    如何用Verdi查看UVM環(huán)境的變量?

    我們常用的debug UVM的方法是通過打印log實現(xiàn)。有沒有辦法像 debug RTL代碼一樣將 UVM 變量拉到波形上看?答案是有的,下面讓我們看看是怎么做到的。
    的頭像 發(fā)表于 06-25 16:01 ?1738次閱讀
    如何用Verdi查看<b class='flag-5'>UVM</b>環(huán)境<b class='flag-5'>中</b>的變量?

    UVMuvm_config_db機制背后的大功臣

    本次講一下UVMuvm_config_db,UVM中提供了一個內部數(shù)據(jù)庫,可以在其中存儲給定名稱下的值,之后可以由其它TB組件去檢索。
    的頭像 發(fā)表于 06-29 16:57 ?1279次閱讀

    行為型設計模式UVM的應用

    接下來介紹行為型設計模式UVM的應用。
    的頭像 發(fā)表于 08-09 14:01 ?703次閱讀
    行為型設計模式<b class='flag-5'>在</b><b class='flag-5'>UVM</b><b class='flag-5'>中</b>的應用

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

    本篇介紹UVM的sequence,這是UVM中最基礎的部分。對于前面介紹的uvm_callback, uvm_visitor等,很少被使用
    的頭像 發(fā)表于 08-17 10:07 ?4259次閱讀
    <b class='flag-5'>UVM</b>設計<b class='flag-5'>中</b>的sequence啟動方式有哪幾種<b class='flag-5'>呢</b>?
    主站蜘蛛池模板: 免费99精品国产自在现线| 精品蜜臀AV在线天堂| 国产精品-区区久久久狼| 国产国产成人人免费影院| 国产精品观看视频免费完整版 | 97免费人妻在线观看| np高h肉文| 国产精品青草久久福利不卡| 国产最猛性XXXX69交| 浪潮色诱AV久久久久久久| 欧美xxxxx九色视频免费观看| 日本午夜精品一区二区三区电影| 天天插天天舔| 亚洲一卡久久4卡5卡6卡7卡| 91精品国产色综合久久不| 苍井空小公主qvod| 国产在线精品一区二区在线看| 久久久无码精品一区二区三区 | 同时和两老师双飞| 亚洲色图在线观看视频| 99国产精品欲AV蜜桃臀麻豆| 纯肉小黄文高H| 精品网站一区二区三区网站| 男人叼女人| 邪恶肉肉全彩色无遮盖| [高清无码] 波多野结衣| 欧美性xxxx18| 小SAO货叫大声点妓女| 尤物久久99国产综合精品| se01国产短视频在线观看| 国产日韩欧美另类| 美女被打开了屁股进去的视频| 肉欲横流(NP高H)| 伊人国产在线视频| 成人无码精品1区2区3区免费看 | 国产成人免费高清视频| 久久婷婷电影网| 思思99精品国产自在现线| 在线视频 亚洲| 国产激情视频在线观看| 啦啦啦影院视频在线看高清...|