一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

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

冬至子 ? 來源:多讀點(diǎn)書 ? 作者:夕文x ? 2023-05-26 14:43 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

第2章一個(gè)簡單的UVM驗(yàn)證平臺(tái)

2.3 為驗(yàn)證平臺(tái)加入各個(gè)組件

2.3.1 加入transaction

引入transaction目的:

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

my_transaction派生自u(píng)vm_sequence_item,而uvm_sequence_item是uvm_object的派生類。

派生自u(píng)vm_object的類 vs 派生自u(píng)vm_component的類

1.jpg

主要流程如下:

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

2.3.2 加入env

引入uvm_env的原因:

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

問題:

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

解決:

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

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

2.3.3 加入monitor

引入monitor原因:

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

monitor與driver的比較

1.jpg

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

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

2.3.4 封裝成agent

引入agent的原因:

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

圖片

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

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

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

1.jpg

2.3.5 加入reference model

引入原因:

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

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

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

2.3.6 加入scoreboard

引入scoreboard作用:

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

多進(jìn)程的使用:

  • 在my_scoreboard中使用uvm_blocking_get_port新建兩個(gè)port:exp_port、act_port,并在main_phase中,通過fork建立起兩個(gè)進(jìn)程,一個(gè)進(jìn)程處理exp_port的數(shù)據(jù)(ref),當(dāng)收到數(shù)據(jù)后,把數(shù)據(jù)放入expect_queue中;另外一個(gè)進(jìn)程處理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ù)需要延時(shí),而reference model是基于高級(jí)語言的處理,一般 不需要延時(shí) ,因此 可以保證exp_port的數(shù)據(jù)在act_port的數(shù)據(jù)之前到來 。

2.3.7 加入field_automation機(jī)制

引入field_automation機(jī)制的原因:

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

使用uvm_object_utils_beginuvm_object_utils_end來實(shí)現(xiàn)my_transaction的factory注冊,在這兩個(gè)宏中間,使用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)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • UVM
    UVM
    +關(guān)注

    關(guān)注

    0

    文章

    182

    瀏覽量

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

    關(guān)注

    1

    文章

    33

    瀏覽量

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

    關(guān)注

    0

    文章

    191

    瀏覽量

    12954
  • sequence
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    3015
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎ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)對(duì)驗(yàn)證人才的需求也會(huì)急劇
    發(fā)表于 03-11 16:24

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

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

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

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

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

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

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

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

    什么是uvmuvm的特點(diǎn)有哪些呢

    大家好,我是一哥,上章內(nèi)容我們介紹什么是uvmuvm的特點(diǎn)以及uvm為用戶提供了哪些資源?本章內(nèi)容我們來看一看一個(gè)典型的uvm驗(yàn)證平臺(tái)應(yīng)該是什么樣子的,來看一個(gè)典型的
    發(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指定幾個(gè)編譯庫。 第三句是執(zhí)行仿真,調(diào)用uvm
    的頭像 發(fā)表于 12-01 11:25 ?4243次閱讀
    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 ?1732次閱讀
    <b class='flag-5'>UVM</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b>(一)

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

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

    UVMuvm_config_db機(jī)制背后的大功臣

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

    UVMuvm_config_db機(jī)制背后的大功臣

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

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

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