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介面,把乙個元件及其他與之相連的元件隔離開來,以此實現模組化。...