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

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

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

UVM學(xué)習(xí)筆記(二)

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

第2章一個簡單的UVM驗證平臺

2.3 為驗證平臺加入各個組件

2.3.1 加入transaction

引入transaction目的:

  • 更規(guī)范地傳遞信息, 更方便地引入transaction級的隨機激勵 。(一般來說,物理協(xié)議中的數(shù)據(jù)交換都是以幀或者包為單位的,而transaction就類似于這里包的概念)

my_transaction派生自uvm_sequence_item,而uvm_sequence_item是uvm_object的派生類。

派生自uvm_object的類 vs 派生自uvm_component的類

1.jpg

主要流程如下:

  • 在main_phase中,先使用randomize將tr隨機化,之后通過drive_one_pkt任務(wù)將tr的內(nèi)容驅(qū)動到DUT的端口上。在drive_one_pkt中,先將tr中所有的數(shù)據(jù) 壓入隊列data_q中 ,之后再 將data_q中所有的數(shù)據(jù)彈出并驅(qū)動 。將tr中的數(shù)據(jù)壓入隊列data_q中的過程相當(dāng)于打包成一個byte流的過程。

2.3.2 加入env

引入uvm_env的原因:

  • 解決多個并列關(guān)系模塊(driver、 monitor、 reference model和scoreboard等)實例化問題 。

問題:

  1. 在top_tb中例化這幾個模塊不行:run_test在top_tb結(jié)構(gòu)層次之外建立一個新的結(jié)構(gòu)層次,模塊間傳值需要通過config_db機制
  2. 在run_test中例化這幾個模塊不行:run_test函數(shù)本身限制,只能實例化一個模塊。
  3. 在driver中例化其他模塊不行:會讓這些模塊具備父子關(guān)系,打破了他們之間的并列關(guān)系。

解決:

  • 引入env機制,提供一個容器類,該容器類中包含了多個并列關(guān)系的模塊,然后用run_test來實例化這個容器類 。

在UVM的樹形結(jié)構(gòu)中, build_phase的執(zhí)行遵照從樹根到樹葉的順序。

2.3.3 加入monitor

引入monitor原因:

  • 監(jiān)測DUT的行為(可以檢測輸出,也可以檢測輸入)

monitor與driver的比較

1.jpg

關(guān)于monitor使用的4點注意:

  1. 所有的monitor類應(yīng)該派生自uvm_monitor
  2. 與driver類似,在my_monitor中也需要有一個virtual my_if
  3. 使用uvm_component_utils宏注冊
  4. monitor需要時刻收集數(shù)據(jù),所以在main_phase中要使用**while(1)**循環(huán)

2.3.4 封裝成agent

引入agent的原因:

  • driver和monitor二者 處理的是同一種協(xié)議 ,代碼高度相似,所以將兩者封裝在一起。 不同的agent就代表了不同的協(xié)議

圖片

is_active是uvm_agent內(nèi)置的一個成員變量,通過頂層傳值,控制driver是否進行例化,且is_active的值默認為UVM_ACTIVE 。

  • UVM_PASSIVE:例化monitor而不需要例化driver(輸出端口無需驅(qū)動)
  • UVM_ACTIVE:例化monitor,也需要例化driver(輸入端口需要驅(qū)動)

例化動作可以在build_phase函數(shù)中完成,也可以在new函數(shù)中完成,但強烈建議僅在build_phase中完成實例化。

1.jpg

2.3.5 加入reference model

引入原因:

  • 完成和DUT相同的功能,作為DUT的參考模型

這里reference model對應(yīng)的模塊名為 my_model。my_model從i_agt得到my_transaction,并把my_transaction傳遞給my_scoreboard。在UVM中,通常使用 TLM( Transaction Level Modeling) 實現(xiàn)component之間transaction級別通信。my_transaction在my_model中的傳遞方式大致分為三部分:

  1. 在my_monitor中使用uvm_analysis_port類例化一個用于發(fā)送transaction級數(shù)據(jù)的端口,并通過my_agent中uvm_analysis_port的引用變量往my_env傳遞端口
  2. 在my_model中使用uvm_blocking_get_port類例化一個用于接收transaction級數(shù)據(jù)的端口
  3. 在my_env中使用uvm_tlm_analysis_fifo類例化一個fifo。引入 connect_phase ,將fifo的analysis_export端口連接到i_agt.ap,fifo的blocking_get_export端口連接到mdl.port。(mdl為my_model類的例化對象)
  4. 使用fifo的原因: analysis_port是非阻塞性質(zhì)的 , ap.write函數(shù)調(diào)用完成后馬上返回,不會等待數(shù)據(jù)被接收。

2.3.6 加入scoreboard

引入scoreboard作用:

  • 比較reference model和o_agt的monitor的結(jié)果。

多進程的使用:

  • 在my_scoreboard中使用uvm_blocking_get_port新建兩個port:exp_port、act_port,并在main_phase中,通過fork建立起兩個進程,一個進程處理exp_port的數(shù)據(jù)(ref),當(dāng)收到數(shù)據(jù)后,把數(shù)據(jù)放入expect_queue中;另外一個進程處理act_port的數(shù)據(jù)(dut),當(dāng)收集到這些數(shù)據(jù)后,從expect_queue中彈出之前從exp_port收到的數(shù)據(jù),并調(diào)用my_transaction的my_compare函數(shù)。
  • 由于DUT處理數(shù)據(jù)需要延時,而reference model是基于高級語言的處理,一般 不需要延時 ,因此 可以保證exp_port的數(shù)據(jù)在act_port的數(shù)據(jù)之前到來 。

2.3.7 加入field_automation機制

引入field_automation機制的原因:

  • 自動實現(xiàn)my_transaction中print、copy、compare這樣的比較常見的結(jié)構(gòu)體操作,簡化my_transaction的實現(xiàn)。同時默認的pack_bytes(tr中的各個字段轉(zhuǎn)換成byte流)和unpack_bytes(byte流轉(zhuǎn)換成tr中的各個字段)也簡化了driver、monitor的實現(xiàn)。

使用uvm_object_utils_beginuvm_object_utils_end來實現(xiàn)my_transaction的factory注冊,在這兩個宏中間,使用uvm_field宏注冊所有字段。

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

    關(guān)注

    0

    文章

    182

    瀏覽量

    19197
  • TLM
    TLM
    +關(guān)注

    關(guān)注

    1

    文章

    32

    瀏覽量

    24766
  • DUT
    DUT
    +關(guān)注

    關(guān)注

    0

    文章

    189

    瀏覽量

    12437
  • sequence
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    2853
收藏 人收藏

    評論

    相關(guān)推薦

    LabVIEW學(xué)習(xí)筆記 【第卷】

    之前在論壇上看見有人分享一本書——《LabVIEW學(xué)習(xí)筆記 》,覺得挺好,而且熱度也很高。只不過第卷的附件丟失了,我試著下載,也下載不了?,F(xiàn)找來第卷,與各位一起
    發(fā)表于 10-17 21:58

    新手學(xué)習(xí)System Verilog & UVM指南

    新手學(xué)習(xí)SystemVerilog & UVM指南 從剛接觸System Verilog以及后來的VMM,OVM,UVM已經(jīng)有很多年了,隨著電子工業(yè)的逐步發(fā)展,國內(nèi)對驗證人才的需求也會急劇
    發(fā)表于 03-11 16:24

    我的EMC學(xué)習(xí)筆記

    本帖最后由 林雪涼 于 2015-12-1 20:31 編輯 好久沒有學(xué)習(xí)了,都快忘記了。這是整理的第部分學(xué)習(xí)筆記。 另外,這個是第一部分的:https://bbs.elecf
    發(fā)表于 12-01 20:23

    IC驗證"為什么要學(xué)習(xí)UVM呢"

    推出了RGM,補上了這一短板。只是很遺憾的是,RGM并沒有成為OVM的一部分,要想使用RGM,需要額外下載?,F(xiàn)在OVM已經(jīng)停止更新,完全被UVM代替。UVM(Universal
    發(fā)表于 12-01 15:09

    IC驗證之UVM常用宏匯總分析(四)

    宏,它有兩種定義方式,一是直接在源文件中中使用define進行定義:`define MACRO 或者: `define MACRO 100是在編譯時的命令行中使用如下的方式
    發(fā)表于 12-02 15:24

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

    ?uvm的特點以及uvm為用戶提供了哪些資源?什么是uvm呢?uvm是通用驗證方法學(xué)的縮寫,是為驗證服務(wù)的,uvm是基于systemveri
    發(fā)表于 01-21 16:00

    什么是uvmuvm的特點有哪些呢

    大家好,我是一哥,上章內(nèi)容我們介紹什么是uvm?uvm的特點以及uvm為用戶提供了哪些資源?本章內(nèi)容我們來看一看一個典型的uvm驗證平臺應(yīng)該是什么樣子的,來看一個典型的
    發(fā)表于 02-14 06:46

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

      uvm_info宏的定義如下:  `define uvm_info(ID,MSG,VERBOSITY) \  begin \  if (uvm_report_enabled(VERBOSITY
    發(fā)表于 03-17 16:41

    Modelsim uvm庫編譯及執(zhí)行

    第一句話是設(shè)置uvm環(huán)境變量,指定uvm的dpi位置。 第句話是創(chuàng)建work工作目錄。 第三句話是編譯源文件,并且通過-L指定幾個編譯庫。 第三句是執(zhí)行仿真,調(diào)用uvm
    的頭像 發(fā)表于 12-01 11:25 ?3908次閱讀
    Modelsim <b class='flag-5'>uvm</b>庫編譯及執(zhí)行

    UCOSIII學(xué)習(xí)筆記)任務(wù)管理、Hook函數(shù)、中斷

    UCOSIII學(xué)習(xí)筆記)文章目錄UCOSIII學(xué)習(xí)筆記)一、UCOSIII任務(wù)管理1、任
    發(fā)表于 12-23 19:58 ?4次下載
    UCOSIII<b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>(<b class='flag-5'>二</b>)任務(wù)管理、Hook函數(shù)、中斷

    UVM學(xué)習(xí)筆記(一)

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

    UVM學(xué)習(xí)筆記(三)

    sequence機制作用:用于產(chǎn)生激勵。其分為兩部分,一是sequence,是sequencer。
    的頭像 發(fā)表于 05-26 14:46 ?1229次閱讀
    <b class='flag-5'>UVM</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>(三)

    UVMuvm_config_db機制背后的大功臣

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

    UVMuvm_config_db機制背后的大功臣

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

    一文詳解UVM設(shè)計模式

    本篇是對UVM設(shè)計模式 ( ) 參數(shù)化類、靜態(tài)變量/方法/類、單例模式、UVM_ROOT、工廠模式、UVM_FACTORY[1]中單例模式的補充,分析靜態(tài)類的使用,
    的頭像 發(fā)表于 08-06 10:38 ?2009次閱讀
    一文詳解<b class='flag-5'>UVM</b>設(shè)計模式