uvm設計分析 callback

2021-09-07 15:27:34 字數 3052 閱讀 8715

uvm_callback,設計者在進行class的function設計時,有意留下的一些hook,總是遍歷某個pool中的物件;

使用者在使用時,將實現新增到某個pool中;

callback中,最重要的三個class;

1)pool類,uvm_callbacks,實現pool的register和add;

2)呼叫介面類,uvm_callback_iter,實現對pool中物件的遍歷;

3)uvm_callback,供extend的基礎類,只是定義了callback的mode;

uvm_callbacks類:其中定義了兩類pool:

1)不指定uvm_object(null型別)的,m_tw_cb_q;

2)指定具體的uvm_object的,m_pool;

uvm_callbacks_base,只是實現了add和register的小的function的原型定義;

定義了m_b_inst的static變數,以及m_pool的以uvm_object為索引的,uvm_queue,

uvm_typed_callbacks,實現了對uvm_queue中的callback進行add,delete,get,find的function;

定義了m_t_inst的static變數,以及m_tw_cb_q型別的uvm_queue,其中儲存uvm_callback;

uvm_callbacks,定義了register,add,delete,add_by_name,delete_by_name的function;

add function,會根據uvm_object是會為null,來判斷是寫入m_pool還是tw_cb_q中;

delete function,類似;add_by_name,delete_by_name,首先根據uvm_root找到

某個child的物件queue,之後再遍歷呼叫相應的函式;

m_get_q,根據uvm_object是否為null,來拿到tw_cb_q或者m_pool中的queue;

uvm_derived_callbacks,目前感覺用處不大;

之上定義的很多function都是static型別,

uvm_callback_iter,引數化uvm_object,以及uvm_callback的兩個引數,雖然pool或者queue都是static的;

但是uvm_object以及callback可以作為刪選型別,來保證拿到的queue是需要的那一組;

static函式,first,last,next,prev;

uvm_callback,只定義了enable_mode,其他的function,都供設計者,進行extend設計,

然後使用者在進行extend,繼而add到相應的pool,

所以uvm_callback會被繼承兩層。

1)由於很多引數化類的關係,所以callbacks以及callback_iter都對具體型別進行了typedef;

如對於uvm_reg,分別對pool和iter進行了typedef;uvm_reg_cbs是設計者已經extend的一級class;

2)對register函式的包裝:

macros,uvm_register_cb(t,cb),呼叫相應callbacks的m_register_pair函式;

3)do callback函式的包裝;

macros,uvm_do_callbacks,遍歷iter提供的物件;可以直接在巨集中制定function名字;

macros,uvm_do_obj_callbacks_exit_on,在函式的某個返回值,退出;

應用中,環境設計者:

1)對uvm_callbacks進行typedef;

2)從uvm_callback extend出新的class;

3)在相應的component中留下function介面;

使用者:

1)從uvm_driver_callback extend出新的實現function的class;可以不同的實現都做extend;

2)在top上進行new和add 操作;

這樣cb1和cb2 物件都被加到m_root中以driver為索引的uvm_queue中;

add函式的呼叫,可以不同bus_driver_cbs_t,也可以使用其他的pool的def,但是必須保證存在該class;

add函式,只需要uvm_object物件,以及相應實現正確型別的callback物件;

uvm設計分析 field automation

uvm中的field automation主要實現了class中的基礎元素的copy,compare等函式,實現方式分為兩種 1 使用者註冊,field系列巨集 uvm內部呼叫static status container中的function 2 使用者自己實現do copy,do print等函式...

uvm設計分析 factory

uvm的factory機制,通過例項乙個static型別default factory,並且通過巨集將所有例化extend出來的object,component register到該factory的內部變數中 所以有了可以override的條件 register通過註冊乙個proxy,該proxy是...

系統設計分析

系統設計出來的好壞很大程度取決於使用者需求是否合理,當然還有就是完成專案的技術上是否有難度。在公司我剛做完乙個專案,當然是乙個非常小的專案。雖然是乙個小專案,但它五臟俱全。還有就是寫的系統是為公司自己用。就算是這麼小的專案也經過了兩次大的需求的變動。由於需求分析不由我本人來做,我的角色是專案開發者。...