factory源码分析——宏定义分析
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了factory源码分析——宏定义分析相关的知识,希望对你有一定的参考价值。
factory实现的主要目标是可以按字符串创建一个class的实体,overide的功能相当于只是对内部字符串的override。
class的创建有两种方式:
1)在class可见的情况下,直接调用new函数:
class A
........
endclass
class B
A a;
function new();
a = new();
endfunction
endclass
2)使用参数化的class:
class parameterized_class #(type T)
T t;
function new();
t = new();
endfunction
endclass
class B;
parameterized_class#(A) pa;
function new();
pa =new();
endfunction
endclass
uvm_object_defines中提供的三种宏:
1)field类型的,主要实现auto_field的功能;
2)obejct类型的,主要实现factory注册和auto_field的添加;
3)component类型的,主要实现factory注册和auto_field的添加;
object_utils中,进行的操作:
1)object_registry_internal(T,T)——type_id的uvm_object_registry类型定义,get_type的static function,get_object_type的function;
2)object_create_func(T)——create function定义;
3)get_type_name_func(T)——type_name的static 类型定义,get_type_name function定义;
4)自动调用field_utils宏;
object_param_utils中,与object_utils类似,但是没有get_type_name_func的定义,因为还不知道type_name的值。
component_utils中,进行的操作:
1)component_registry_internal(T,T)——type_id的uvm_object_registry类型定义,get_type的static function,get_object_type的function;
2)get_type_name_func(T)——type_name的static 类型定义,get_type_name function定义;
3)自动调用field_utils宏;
component_param_utils中,与component_utils类似,但是没有get_type_name_func的定义,因为还不知道type_name的值。
component从uvm_report_object类型继承而来;
以上两个utils中都有相应type_id的参数class定义,可以直接调用其内部static的function;
field_utils中,主要实现对一些数据db的处理函数;这些函数定义在uvm_object中,所以object和component都可以调用。
field_utils包括两个参数,ARG和FLAG,ARG是class中的一个变量,FLAG是一些flag setting
ARG的类型,表示field_utils中的类型种类:
uvm_field_int,uvm_field_enum,uvm_field_queue_int,object,string等
FLAG的类型,表示具体的操作:
uvm_all_on,uvm_default,uvm_nocopy,nocompare,noprint
nopack,physical,abstract,reference
readonly
flag之间支持直接位逻辑运算。uvm_default目前与uvm_all_on等同;
uvm_reference表示,不进行deep_copy,直接copy handle;
uvm_readonly表示,不支持在build过程中的set操作,
physical setting和abstract setting目前不清楚
在print和record的时候,可以选择进制,直接进行或运算,UVM_BIN/DEC/OCT/HEX/STRING
component不允许使用field_object宏,如果要使用,只能使用uvm_reference,简而言之,component不支持deep copy
以上是关于factory源码分析——宏定义分析的主要内容,如果未能解决你的问题,请参考以下文章
factory源码分析——uvm_default_factory
#yyds干货盘点#自定义spring boot starter三部曲之三:源码分析spring.factories加载过程