factory 實用的UVM機制

2021-08-25 17:03:43 字數 2551 閱讀 9662

本文**:

uvm鼓勵工程師建立模組化、可復用的測試平台。uvm通過tlm介面,把乙個元件及其他與之相連的元件隔離開來,以此實現模組化。只要transaction型別相同,模組化的功能允許sequence 連線到任何適配的driver上。也允許多種覆蓋率收集器通過分析介面連線到monitor上。這種模組化的功能,使得搭建環境的工程師可以把庫中的各種元件進行混合匹配,最終組合放到dut的配置環境中。這對於驗證工程師當然是非常有用的。

很多時候驗證工程師需要很多環境,這些環境大體上很相似,只在一些小的方面稍有不同。每個環境有其特定的用途,同時他們的大多數元件都是完全相同的。那麼,我們如何做到共享其通用的部分、定製其獨特的部分呢?當然,這是oop(物件導向程式設計)的基本特點,oop語言實現這種功能並不難。但是,我們要說的是uvm,因為uvm又將這種實現方法進一步簡化了。

乙個經驗淺的oop程式設計師可能會直接在環境中例項化元件,如下:

env的例項化也類似:

對於驗證工程師,當testbench能正確執行transaction時,我們可能想要改變一些東西,比如看看當在transaction流裡插入錯誤會發生什麼。為了做到這一點,可以建立乙個新的driver,派生my_driver類得到my_err_driver,並在環境中將其實例化。oop能讓我們實現這一點,派生my_env類,並如下圖一樣過載build_phase()方法。

這樣的話,兩個環境的不同之處僅僅是driver的型別。因為my_err_driver是從my_driver派生得到,所以他們有相同的介面,而且driver和squencer之間的連線也是相同的。所以我們就不用重複其他**了。類似的,我們可以派生my_test,以使用新的env:

所以這樣的話,當我們真正需要的是新的driver的時候,我們就需要從乙個test、env、driver得到了兩個test、env、driver(以及新的build_phase()方法)。但是,如果有一種方法,可以直接在env中例項化my_err_driver,而不用建立乙個新的env,對比起來,不是比之前的方法簡便多了嗎?而這些,在uvm中我們就可以使用factory機制實現。

factory是uvm中一種特殊的類,用於建立驗證工程師特定的任意uvm_object或uvm_component型別。但是注意要用factory機制註冊元件,這樣的話factory機制才能知道怎樣建立乙個例項,具體是通過巨集定義來實現的。

通過uvm_component_utils巨集設定factory機制,這樣才可以建立乙個特殊型別的例項。要注意的是,所有你建立的派生自uvm_component基類的派生類(即使是間接派生也是)都需要用這個巨集進行註冊。類似的,你也要用uvm_object_utils巨集註冊你所有的uvm_object派生類(比如uvm_sequence、uvm_sequence_item等)

現在,取代之前直接例項化my_driver的方法,我們用factory機制的creat()方法來實現例項化。

「::type_id::create()」 語句呼叫factory機制的靜態creat()方法。你不需要知道具體是怎麼實現的,你只用知道它會返回乙個my_driver型別的例項,並在env中將其賦給drv控制代碼。鑑於這種機制的靈活性,現在test top會通過factory機制的過載資訊來告訴env具體要create哪個driver,而不用在每次env的子元件有變化時都派生新的env類。

不同於之前我們派生my_test來例項化不同env的方法,這裡我們要加入過載記錄資訊,使用set_type_override函式,以此告訴env要例項化的my_driver物件的具體型別,

使用這種模式,我們可以建立乙個base test,用預設的元件例項化基本環境,然後再派生base test 就得到包含了factory過載或者其他功能的新的test。例如,除了過載driver型別,test可能會執行一些新的激勵sequence,或者換一種新的覆蓋率收集器。

總的來說,因為tlm介面的使用下,元件間的連線關係總是不變的,factory給我們提供了乙個鉤子,在建立例項的時候根據是否有過載記錄,進而決定要例項化的是原始的類,還是派生後的過載類。這樣可以讓我們在不用改變env**的情況下方便地實現一些改變。在實際驗證中,在已存在的testbench中,不用新增**就能實現新的行為功能,這是很實用的功能。所以factory機制,又是乙個體現uvm強大功能的好東西。

UVM驗證培訓 factory 實用的UVM機制

路科驗證官網 路科驗證 專注於數字晶元驗證的系統思想和前沿工程領域 eetop路科首頁 eetop 路科驗證 ic驗證培訓 csdn路科首頁 csdn 路科驗證 ic驗證培訓 uvm鼓勵工程師建立模組化 可復用的測試平台。uvm通過tlm介面,把乙個元件及其他與之相連的元件隔離開來,以此實現模組化。...

UVM的factory機制(二)

factory機制 1 uvm強烈推薦使用uvm component utils或者uvm object utils巨集來註冊。用法 class a extends uvm component uvm component utils a endclass 建立乙個a的例項如下 a a a a typ...

UVM 8 2 4 factory 機制的除錯

1.uvm提供了print override info 幫助debug。以上節new monitor 為例 2.呼叫print override info 結果 實際呼叫debug create by name。3.還提供debug create by type,原型 1 應用 輸出與上面同樣。4....