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:

