uvm設計分析 field automation

2021-09-07 15:20:06 字數 3206 閱讀 3872

uvm中的field_automation主要實現了class中的基礎元素的copy,compare等函式,

實現方式分為兩種:1)使用者註冊,field系列巨集;uvm內部呼叫static status container中的function;

2)使用者自己實現do_copy,do_print等函式,呼叫static printer內的函式;

uvm_object中實現了print,sprint等函式,實現排程介面,排程status_container和do_function;

status_container中的function在進行filed註冊的時候,被實現出來;

do_print等函式,留下對使用者的hook;

不呼叫filed macros的class,需要在自己內部實現;

這樣所有的extend的class,都包含這些general的一些function;

comparer等class中具體實現了針對不同型別的filed的操作;int,string,object,time等;

status_container,在object內部是乙個static變數,內部包含comparer,printer等class的變數,所以可以在prj 任何class呼叫;

從而可以在使用者進行filed macros register的時候,實現filed function;

總之,print等函式,實現都在相應的printer實現,但是呼叫分為了兩種,使用者自己實現do_function,或者呼叫field macros;

printer的實現:

內部實現了cfg與function的顆粒度分解,knobs中定義了很多列印選型,mcd表示列印輸出stdout等;

object depths,是否列印所有的children,預設都是開啟的;

object callback,列印object之前對header或者footer呼叫自定義函式;

type_name,prefix,field_size,決定是否列印這些附加資訊;

function中,定義了各個型別的print實現;      

knobs並沒有被extend,printer被extend了三個,基本的print function不變,只是更新了omit函式,規定了自己的格式;

預設的printer,為table_printer,在uvm內部被顯示的new之後,typedef為default printer;

三種printer,之間可以相互過載,單獨封裝,相互替代,這種在設計模式中,也被稱為strategy,或policy;

乙個最重要的變數:

1)uvm_printer_row_info  m_rows[$],結構體型別,內部包含:level,name,type_name,size,value資訊;

每次呼叫各個print_int等函式,都會將資訊,push_back到該queue中;

乙個最重要的function:

2)emit函式,返回值string,首先列印格式,其次遍歷m_row,更新自己的返回值

被uvm_object的print函式呼叫;

comparer的實現:

comparer更加簡單一些,config的變數更少,所以直接做在乙個class中,比較之後,主要需要選擇性列印資訊;

config:policy,預設都是default的,reference,表示只比較指標;

uvm_deep,表示uvm的deep_copy的方式進行比較;

uvm_shallow,表示sv預設的copy方式進行比較,class內的class直接copy指標;

show_max,verbosity,severity,表示report時的配置;預設使用uvm_root的report呼叫;

check_type,在compare object的時候,來表示是否要比較object的型別,還是只需要值相同,預設開啟;

record和pack不在描述;

copy更加簡單,沒有相應的控制器來實現,直接呼叫field_automation和do_copy函式;

field_automation實現時,會區分uvm_copy和uvm_reference,reference,直接指標賦值;

no_reference,進行clone操作;

其中的clone函式,呼叫的是create函式,做建立;所有的object都必須過載該函式;

還有set_xx_local的操作,可以直接呼叫相應函式,set local var的值;函式定義在uvm_object,呼叫在field_automation;

相應的macros:

uvm_field_utils_begin(t):function __m_uvm_field_automation的定義;

uvm_field_utils_end:endfunction __m_uvm_field_automation的結束定義;

uvm_field_xx_xx(arg,flag):根據uvm_action,定義case...endcase來實現copy,print,compare等函式,呼叫相應comparer等;

uvm automation的action包括:

應用:在class中不做field的巨集呼叫,顯示定義自己的do_function:

uvm設計分析 callback

uvm callback,設計者在進行class的function設計時,有意留下的一些hook,總是遍歷某個pool中的物件 使用者在使用時,將實現新增到某個pool中 callback中,最重要的三個class 1 pool類,uvm callbacks,實現pool的register和add ...

uvm設計分析 factory

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

系統設計分析

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