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