UVM中Callback機制


Callback機制,其實是使用OOP來實現的一種程序開發者向程序使用者提供的模塊內部的接口。可以在Test_case的高度改變其他component的一些行為。

Systemverilog中已經提供的Callback函數pre_randomize,post_randomize。對於UVM和VIP來說,其他的CallBack函數都是自己程序的開發者事先

                     留下的hook。

 

Callback的實現:

1)首先直接從component擴展出新的類來實現pre_do等function不可取。因為component的改變會讓整個UVM的tree改變。

2)考慮利用OOP的composition來操作,先定義一個類A,並定義virtual pre_do等function於它的類中。后在UVM的component中加入該類,在do函數

     之前調用pre_do。這樣在未重定義時,由於pre_do中沒有任何操作,所以不會對component產生任何影響。而重定義virtual pre_do之后,自然便

     加入了相關的執行代碼。

UVM和VIP中的實現:

     首先字uvm_callback派生一個類A,並定義虛函數virtual pre_do;(或uvm_reg_cbs

     定義uvm_register_cb(driver, A);在driver類中。這樣相當於將A加入driver class中。

     定義A_pool,來存放A的實例化對象,在driver類中可以直接判斷A_pool是否為空,來執行pre_do。

     在driver類中,使用uvm_do_callbacks(driver, A, pre_do);來調用pre_do,在do函數之前。

     這樣便完成了預留的hook,

用戶使用時:

接下來只需要在需要的時候extended A,定義好pre_do函數。並且在connect_phase之前調用add函數,來添加進來。

           A_pool::add(env.i_agt.drv, cb);  cb即為A的Extended的類的對象。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM