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

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

3天內不再提示

UVM手把手教程系列(一)UVM驗證平臺基礎知識介紹

傅里葉的貓 ? 來源:傅里葉的貓 ? 2024-02-27 09:08 ? 次閱讀

UVM驗證平臺介紹

先拋開UVM,回想一下我們在平時寫完程序后,是不是肯定需要灌一個激勵給DUT,然后再從DUT獲取結果,并跟一個參考模塊進行對比,檢查結果是否正確。就像下面這個圖:

c7ad4a50-d507-11ee-a297-92fbcf53809c.png

在UVM中,引入了sequence機制,這個機制的最大作用就是將test case和testbench分離開來。對一個項目而言,testbench是相對穩定的框架,而針對各個module要有不同的測試內容,所以具體的test case 的差異非常大。在UVM中, test和sequence類總是成對出現,實現了testbench和具體的test case的結合。test類中可以針對具體的測試內容對testbench做一些差異化配置,在sequence類中則是實現test case的具體細節。

因此,在UVM中,使用sequence來產生transaction,再由sequencer傳給driver,再作為激勵傳給DUT。也就是說driver只負責驅動transaction,而不負責產生transaction。

c7bcd3e4-d507-11ee-a297-92fbcf53809c.png

同時UVM中將sequencer、driver和監測激勵的monitor封裝到一個in_agent中,將監測DUT輸出的monitor封裝到out_agent中,以提高代碼的可重用性,模型如下:

c7ceb7a8-d507-11ee-a297-92fbcf53809c.png

我們再對上面這些模塊做一些更詳細的解釋,暫時看不懂沒關系,先有個概念就行,后面的東西學的多了,這些概念自然也就懂了。

driver:向sequencer申請sequence_item(數據包transaction),并將包里的信息按照總線協議規定驅動到DUT的端口上;

sequencer:負責發送數據,組織管理sequence,driver申請數據時,它就把sequence生成的sequence_item發給driver;(需要注意sequence和sequencer的區別)

scoreboard:比較reference model和monitor分別發送來的數據,根據比較結果判斷DUT是否正確工作;

monitor:從DUT接收數據,并將其轉成transaction級別的sequence_item,發送給scoreboard,供其比較;

reference model:模仿DUT,完成與DUT相同的功能,為scoreboard提供判斷標準;

agent:將sequencer、driver和monitor封裝在一起(UVM_ACTIVE/UVM_PASSIVE、兩種模式),agent模塊的使用提高了代碼的可重用性;

env:將平臺上的component組件封裝在一起,并配置各個組件間的通信端口,實現一個環境多個用例。運行不同用例時,在其中實例化env即可;

sequence:(不屬于驗證平臺的任一部分)產生激勵內容(transaction)。通過sequence中的body任務創建(隨機化)事務,并發送給sequencer。

UVM中的類

component與object是UVM中兩大最基本的概念,也是初學者最容易混淆的兩個概念。uvm_object是UVM中最基本的類,讀者能想到的幾乎所有的類都繼承自uvm_object,包括uvm_component。

uvm_component有兩大特性是uvm_object所沒有的:

通過在new的時候指定parent參數來形成一種樹形的組織結構

phase的自動執行特點

從圖中可以看出,從uvm_object派生出了兩個分支,所有的UVM樹的結點都是由uvm_component組成的,只有基于 uvm_component派生的類才可能成為UVM樹的結點;最左邊分支的類或者直接派生自uvm_object的類,是不可能以結點的形式出 現在UVM樹上的。

UVM通過uvm_component來實現樹形結構。所有的UVM樹的結點本質上都是一個uvm_component。每個uvm_component都有 一個特點:它們在new的時候,需要指定一個類型為uvm_component、名字是parent的變量:

function new(string name, uvm_component parent);

構成環境的組件都從uvm_component類繼承而來,這是因為它們都從uvm_component類繼承了phase機制,都會經歷各個phase階段,關于phase的內容,我們后面介紹。

c7dd6a0a-d507-11ee-a297-92fbcf53809c.png

uvm_driver

所有的driver都要派生自uvm_driver。driver的功能主要就是向sequencer索要sequence_item(transaction),并且將 sequence_item里的信息驅動到DUT的端口上,這相當于完成了從transaction級別到DUT能夠接受的端口級別信息的轉換。

uvm_monitor

所有的monitor都要派生自uvm_monitor。monitor做的事情與driver相反,driver向DUT的pin上發送數據,而 monitor則是從DUT的pin上接收數據,并且把接收到的數據轉換成transaction級別的sequence_item,再把轉換后的數據發送給 scoreboard,供其比較。與uvm_component相比,uvm_monitor幾乎沒有做任何擴充。

uvm_sequencer

所有的sequencer都要派生自uvm_sequencer。sequencer的功能就是組織管理sequence,當driver要求數據時, 它就把sequence生成的sequence_item轉發給driver。

uvm_scoreboard

一般的scoreboard都要派生自uvm_scoreboard。scoreboard的功能就是比較reference model和monitor分別發送 來的數據,根據比較結果判斷DUT是否正確工作。

reference model

UVM中并沒有針對reference model定義一個類。所以通常來說,reference model都是直接派生自 uvm_component。reference model的作用就是模仿DUT,完成與DUT相同的功能。DUT是用Verilog寫成的時序電路,而reference model則可以直接使用SystemVerilog高級語言的特性,同時還可以通過DPI等接口調用其他語言來完成與DUT相同的功能。

uvm_agent

所有的agent要派生自uvm_agent。與前面幾個比起來,uvm_agent的作用并不是那么明顯。它只是把driver和 monitor封裝在一起,根據參數值來決定是只實例化monitor還是要同時實例化driver和monitor。agent的使用主要是從可重用性的角 度來考慮的。如果在做驗證平臺時不考慮可重用性,那么agent其實是可有可無的。

uvm_env

所有的env(environment的縮寫)要派生自uvm_env。env將驗證平臺上用到的固定不變的component都封裝在一 起。這樣,當要運行不同的測試用例時,只要在測試用例中實例化此env即可。

uvm_test

所有的測試用例要派生自uvm_test或其派生類,不同的測試用例之間差異很大,所以從uvm_test派生出來的類各不 相同。任何一個派生出的測試用例中,都要實例化env,只有這樣,當測試用例在運行的時候,才能把數據正常地發給DUT,并正常地接收DUT的數據。

c7f5e1b6-d507-11ee-a297-92fbcf53809c.png?c815c71a-d507-11ee-a297-92fbcf53809c.png

UVM的樹形結構

上一節我們講了UVM中的類,也可以看到UVM中各個類的繼承關系。了解了這些,再來看UVM中的樹形結構。UVM中的sequencer、driver、monitor、agent、model、 scoreboard、env等都是樹的一個結點。為什么要用樹的形式來組織呢?因為作為一個驗證平臺,樹形結構是一種非常合適的管理方式。

UVM的完整樹結構如下圖所示:

c82e6f5e-d507-11ee-a297-92fbcf53809c.png

uvm_top是一個全局變量,它是uvm_root的一個實例,而且也是唯一的一個實例 ,它的實現方式非常巧妙。而uvm_root 派生自uvm_component,所以uvm_top本質上是一個uvm_component,它是樹的根。uvm_test_top的parent是uvm_top,而uvm_top的 parent則是null。

uvm_top提供一系列的方法來控制仿真,例如phase機制、objection防止仿真退出機制等。

層次結構相關的函數

UVM提供了一系列的接口函數用于訪問UVM樹中的結點。這其中最主要的是以下幾個:

get_parent 用于得到當前實例的parent,其函數原型為:

externvirtualfunctionuvm_componentget_parent();

get_child函數,與get_parent不同的是,get_child需要一個string類型的參數name,表示此child實例在實例化時指定的名字。因為一個component只有一個parent,所以get_parent不需要指定參數;而可能有多個child,所以必須指定name參數。

externfunctionuvm_componentget_child(stringname);

get_children函數,為了得到所有的child

externfunctionvoidget_children(refuvm_componentchildren[$]);

uvm_componentarray[$];
my_comp.get_children(array);
foreach(array[i])
do_something(array[i]);

get_num_children函數,用于返回當前component所擁有的child的數量

externfunctionintget_num_children();

除了一次性得到所有的child外,還可以使用get_first_child和get_next_child的組合依次得到所有的child

externfunctionintget_first_child(refstringname);
externfunctionintget_next_child(refstringname);

stringname;
uvm_componentchild;
if(comp.get_first_child(name))
dobegin
child=comp.get_child(name);
child.print();
endwhile(comp.get_next_child(name));




審核編輯:劉清

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

    關注

    0

    文章

    181

    瀏覽量

    19007
  • DUT
    DUT
    +關注

    關注

    0

    文章

    184

    瀏覽量

    12020

原文標題:UVM手把手教程系列(一)UVM基礎

文章出處:【微信號:傅里葉的貓,微信公眾號:傅里葉的貓】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    UVM手把手教程系列(二)Phase機制簡單介紹

    UVM中的phase,按照其是否消耗仿真時間($time打印出的時間)的特性,可以分成兩大類
    的頭像 發表于 02-29 09:26 ?575次閱讀
    <b class='flag-5'>UVM</b><b class='flag-5'>手把手</b>教程<b class='flag-5'>系列</b>(二)Phase機制簡單<b class='flag-5'>介紹</b>

    IC驗證"為什么要學習UVM呢"

    不要抱著“只搭平臺只建測試用例,調試都交給設計人員”的想法。同樣,設計工程師也有必要學習一點驗證知識。點不懂
    發表于 12-01 15:09

    IC驗證"UVM驗證平臺"組成(三)

    model)。個簡單的驗證平臺框圖:在UVM中,引入了agent和sequence的概念,因此UVM
    發表于 12-02 15:21

    IC驗證"個簡單的UVM驗證平臺"是如何搭建的(六)

    連載....小編考慮到個好的連續劇不能沒有結尾,所以后期會持續更新ic驗證UVM相關內容.......今天更新個最簡單的驗證
    發表于 12-04 15:48

    IC驗證"UVM驗證平臺加入factory機制"(六)

      加入factory機制 上節《IC驗證"個簡單的UVM驗證平臺"是如何搭建的(五)》給出
    發表于 12-08 12:07

    IC驗證UVM驗證平臺加入objection機制和virtual interface機制“(七)

    在上節中,**《IC驗證"UVM驗證平臺加入factory機制"(六)》**雖然輸出了“main_phase is called”,但是“
    發表于 12-09 18:28

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

    工程師只需要將代碼寫入適當的phase當中,平臺運行時,會按照phase的執行流程來自動執行驗證工程師的代碼。uvm提供了一系列的基類,驗證
    發表于 01-21 16:00

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

      大家好,我是哥,上章內容我們介紹什么是uvm?uvm的特點以及uvm為用戶提供了哪些資源?  本章內容我們來看
    發表于 01-22 15:32

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

      大家好,我是哥,上章個典型的uvm驗證平臺應該是什么樣子的?從本章開始就正式進入uvm
    發表于 01-22 15:33

    數字IC驗證之“搭建個可以運行的uvm測試平臺”(5)連載中...

      大家好,我是哥,上章介紹了構成uvm測試平臺的主要組件?最后,我們將個典型的uvm
    發表于 01-26 10:05

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

    大家好,我是哥,上章內容我們介紹什么是uvm?uvm的特點以及uvm為用戶提供了哪些資源?本章內容我們來看
    發表于 02-14 06:46

    基于UVM的CPU卡芯片驗證平臺

    基于UVM的CPU卡芯片驗證平臺_錢一文
    發表于 01-07 19:00 ?4次下載

    基于UVM驗證平臺設計研究

    基于UVM驗證平臺設計研究_王國軍
    發表于 01-07 19:00 ?4次下載

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

    大家好,我是一哥,上章內容我們介紹什么是uvm?uvm的特點以及uvm為用戶提供了哪些資源?本章內容我們來看一看一個典型的uvm
    發表于 12-09 13:36 ?7次下載
    數字IC<b class='flag-5'>驗證</b>之“典型的<b class='flag-5'>UVM</b><b class='flag-5'>平臺</b>結構”(3)連載中...

    ASIC芯片設計之UVM驗證

    百度百科對UVM的釋義如下:通用驗證方法學(Universal Verification Methodology, UVM)是一個以SystemVerilog類庫為主體的驗證
    發表于 11-30 12:47 ?1177次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>