码迷,mamicode.com
首页 > 其他好文 > 详细

factory源码分析——宏定义分析

时间:2017-10-26 21:01:52      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:images   over   width   err   参数化   intern   compare   only   分享   

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源码分析——宏定义分析

标签:images   over   width   err   参数化   intern   compare   only   分享   

原文地址:http://www.cnblogs.com/-9-8/p/7561473.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!