• uvm设计分析——field automation


    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:

          

  • 相关阅读:
    [NOIP2015] 子串 题解
    [NOIP2011] 聪明的质检员 题解
    二进制的一些概念
    [NOIP2012] 借教室 题解
    [POJ3764] The XOR Longest Path 题解
    关于本博客
    【SC-MY限定】让填写问卷星成为自动化!
    JZOJ5833 永恒
    九校联考-DL24凉心模拟Day2总结
    【简解】SP7556 Stock Charts
  • 原文地址:https://www.cnblogs.com/-9-8/p/7698300.html
Copyright © 2020-2023  润新知