跳转至

输入查询内容

    本页内容

    uvm_printer 新增标准配置/查询 API(accessor、set_default/get_default、element 栈)

    新增功能:目标库新增的 API 和可选替代接口;已有用法的迁移要求列在用户接口与行为中。

    影响范围

    需要新增 printer 配置访问器、默认 printer 替换或 element 栈接口。

    具体差异

    新增全套标准化接口:set/get_name_enabled、type_name_enabled、size_enabled、id_enabled、radix_enabled、radix_string、default_radix、root_enabled、recursion_policy、max_depth、file、line_prefix、begin/end_elements;uvm_printer::set_default/get_default 及各子类同名静态方法(经 uvm_coreservice_t 管理默认实例);新类 uvm_printer_element/uvm_printer_element_proxy:366/:410)与 element 栈 API 供自定义 printer 使用;object_printed() 提供递归状态查询。print_generic_element(name,type_name,size,value) 替代了 1.2 用 size=-2 打 "..." 的技巧(print_array_range 内部改用它)。

    修改方案

    保留且行为符合需要的 knobs 字段可继续使用,无需仅为改名替换;需要标准配置接口时采用访问器并验证输出。删除成员按 M02-003 处理。

    兼容措施与范围:主库提供旧字段及对应访问器,无需启用开关;采用访问器后仍需核对策略配置与操作结果。

    迁移后验证

    设置配置并读回,在独立 sprint 中检查实际布局;替换默认实例后断言使用的是预期对象。

    补充查阅

    扫描定位与记录结果

    无对应规则。当前脚本没有针对本条的直接检测规则。

    本条处理级别为“可选采用”,按修改方案评估;缺少扫描规则本身不增加迁移改造要求。

    扫描器下载、输入范围与报告说明

    源码与标准依据

    核查方式:源码核对。未单独进行 VCS 行为实测。

    VCS 内置 UVM-1.2:无(1.2 对应能力靠 knobs 字段直写)

    VCS 内置 uvm-ieee-2020-2.0uvm_printer.svh:198–263(set_name_enabled ~ set_end_elements)、uvm_printer.svh:277–288(push_element/pop_element/get_top_element/get_bottom_element)、uvm_printer.svh:795(static set_default)

    标准依据:IEEE 1800.2-2020 §16.2.5/§16.2.7/§16.2.8;recursion policy 默认 UVM_DEFAULT_POLICY≡UVM_DEEP(§16.2.5.9)

    标为“源码标注”或未注明原文核对的条款仅作定位;具体库行为以源码和实测为准。

    引用代码(高亮为引用行);上方行号链接可直接定位。

    src/vcs-uvm-ieee-2020-2.0/base/uvm_printer.svh
      extern virtual function void flush ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.1
      extern virtual function void set_name_enabled (bit enabled);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.1
      extern virtual function bit get_name_enabled ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.2
      extern virtual function void set_type_name_enabled (bit enabled);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.2
      extern virtual function bit get_type_name_enabled ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.3
      extern virtual function void set_size_enabled (bit enabled);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.3
      extern virtual function bit get_size_enabled ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.4
      extern virtual function void set_id_enabled (bit enabled);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.4
      extern virtual function bit get_id_enabled ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.5
      extern virtual function void set_radix_enabled (bit enabled);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.5
      extern virtual function bit get_radix_enabled ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.6
      extern virtual function void set_radix_string (uvm_radix_enum radix, string prefix);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.6
      extern virtual function string get_radix_string (uvm_radix_enum radix);
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.7
      extern virtual function void set_default_radix (uvm_radix_enum radix);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.7
      extern virtual function uvm_radix_enum get_default_radix ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.8
      extern virtual function void set_root_enabled (bit enabled);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.8
      extern virtual function bit get_root_enabled ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.9
      extern virtual function void set_recursion_policy (uvm_recursion_policy_enum policy);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.9
      extern virtual function uvm_recursion_policy_enum get_recursion_policy ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.10
      extern virtual function void set_max_depth (int depth);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.10
      extern virtual function int get_max_depth ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.11
      extern virtual function void set_file (UVM_FILE fl);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.11
      extern virtual function UVM_FILE get_file ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.5.12
      extern virtual function void set_line_prefix (string prefix);
      // @uvm-ieee 1800.2-2020 auto 16.2.5.12
      extern virtual function string get_line_prefix ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.6
      extern virtual function void set_begin_elements (int elements = 5);
      // @uvm-ieee 1800.2-2020 auto 16.2.6
      extern virtual function int get_begin_elements ();
      // @uvm-ieee 1800.2-2020 auto 16.2.6
      extern virtual function void set_end_elements (int elements = 5);
      // @uvm-ieee 1800.2-2020 auto 16.2.6
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_printer.svh
      extern protected virtual function uvm_printer_element get_top_element ();
    
      // @uvm-ieee 1800.2-2020 auto 16.2.7.3
      extern virtual function void push_element ( string name,
                                                  string type_name,
                                                  string size,
                                                  string value=""
      );
    
      // @uvm-ieee 1800.2-2020 auto 16.2.7.4
      extern virtual function void pop_element ();
    
      // return an element from the recycled stack if available or a new one otherwise
      extern function uvm_printer_element get_unused_element() ;
    
      // store element instances that have been created but are not currently on the stack
      uvm_printer_element m_recycled_elements[$];
    
      // Function -- NODOCS -- print_array_header
    

    src/vcs-uvm-ieee-2020-2.0/base/uvm_printer.svh
       flush();
    endfunction
    
    function void uvm_printer::set_default(uvm_printer printer) ;
       uvm_coreservice_t coreservice ;
       coreservice = uvm_coreservice_t::get() ;
       coreservice.set_default_printer(printer) ;
    endfunction
    
    function uvm_printer uvm_printer::get_default() ;
       uvm_coreservice_t coreservice ;
       coreservice = uvm_coreservice_t::get() ;
       return coreservice.get_default_printer() ;
    endfunction
    
    // print_field
    // ---------
    
    function void uvm_printer::print_field (string name,
    

    完整源码 · SHA256:960f0c18aee9036a3261b2108183dc85b3cf572d1912605325c6b595f4b9aaef

    术语解释 · 兼容配置

    删除无效的打印宽度配置(M02-003)

    返回Comparer / Printer / Packer / Recorder · 迁移清单

    版本适用范围