UVM的factory機制(二)

2021-07-27 21:01:58 字數 1888 閱讀 8577

factory機制:

1、 uvm強烈推薦使用uvm_component_utils或者uvm_object_utils巨集來註冊。用法:

class a extends uvm_component

`uvm_component_utils(a);

endclass

建立乙個a的例項如下:

a a;

a=a::type_id::create(「a」,this);

通過該方式,可以使用uvm的眾多功能。

2、 override功能:

需要對某些類進行改寫時,可用override功能。先從my_driver派生出乙個類,定義為:

class new_driver extends my_driver;

………

`uvm_component_utils(new_driver)

endclass

之後在case的build_phase中呼叫override相關的函式:

class case_x extends base_test;

function void build_phase(uvm_phase phase);

……..

set_type_override_by_type(my_driver::get_type(),new_driver::get_type());

endfunction

endclass

經過上訴過程後,在跑case_x的時候,系統執行my_driver就是new_driver型別,其行為就是new_driver。有個前提是在agent例項化的時候,要使用factory機制。

class my_agent;

my_driver drv;

function void buile_phase(uvm_phase phase);

…….

drv=my_driver::type_id::create(「drv」,this);

endfunction

endclass

3、 phase及objection

在不同時間做不同的事情,這是uvm中phase的設計哲學。

uvm中常用phase:

根絕是否消耗**時間的特性,分為function phase和task phase。function phase 不消耗**時間,比如buile_phase,connect_phase等。另一類是run_phase等,通過task來消耗**時間。上圖中除了run_phase消耗時間外,其他都不消耗時間。

各個phase的執行順序:

除了build_phase是一種自上而下的執行順序,所有的不耗**時間的phase都是自下而上執行的。

uvm中所有的phase:

上圖將run_phase分割為12個小的phase,自下而上的啟動,同時執行。

reset、configure、main、shutdown四個phase是核心。

在reset_phase對dut進行復位,初始化等操作。

在configure_phase則進行dut配置

在main_phase中執行

shutdown_phase則做一些與dut斷電相關的操作。

phase.raise_objection(this);

……………….

phase.drop_objection(this);來控制驗證平台的開啟和關閉

一般是將開啟和關閉放在sequence中。

factory 實用的UVM機制

本文 uvm鼓勵工程師建立模組化 可復用的測試平台。uvm通過tlm介面,把乙個元件及其他與之相連的元件隔離開來,以此實現模組化。只要transaction型別相同,模組化的功能允許sequence 連線到任何適配的driver上。也允許多種覆蓋率收集器通過分析介面連線到monitor上。這種模組化...

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....

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

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