跳转至

输入查询内容

    本页内容

    不同类型名共用 wrapper 的比较漏检与显式限制

    环境:VCS W-2024.09-SP2-8。1.2 使用 uvm-1.2,2.0 使用 uvm-ieee-2020-2.0

    实验检查观察值是否符合预期;成功复现问题不代表问题已修复。

    结果对比

    观察内容 UVM 1.2 UVM 2.0
    两个对象的 get_type_name 不同(1=是) names_differ 1 1
    两个对象的 get_object_type 相同(1=是) same_wrapper 1 1
    比较后的类型检查开关值 check_type 1 1
    仅调用对象 compare 的返回值(1=相等) compare_equal 0 1
    显式要求类型名相同后的比较结果(1=相等) explicit_name_check_equal 0 0

    运行命令

    目录与环境准备;从解包根目录执行:

    uv run tools/run_uvm_review.py --case comparer_fact_probe --variants 12,20
    

    最小源码

    comparer_fact_probe.sv

    comparer_fact_probe.sv
    `timescale 1ns/1ps
    `include "uvm_macros.svh"
    import uvm_pkg::*;
    
    class fact_common_item extends uvm_object;
      int value = 42;
      `uvm_object_utils_begin(fact_common_item)
        `uvm_field_int(value, UVM_DEFAULT)
      `uvm_object_utils_end
      function new(string name="item"); super.new(name); endfunction
    endclass
    
    // These existing subclasses use the base registration and supply type names.
    class fact_type_a extends fact_common_item;
      function new(string name="a"); super.new(name); endfunction
      virtual function string get_type_name(); return "fact_type_a"; endfunction
    endclass
    
    class fact_type_b extends fact_common_item;
      function new(string name="b"); super.new(name); endfunction
      virtual function string get_type_name(); return "fact_type_b"; endfunction
    endclass
    
    module comparer_fact_probe;
      initial begin
        fact_type_a lhs = new();
        fact_type_b rhs = new();
        uvm_comparer cmp = new();
        bit equal, explicit_equal;
        $display("REVIEW|names_differ|%0d", lhs.get_type_name() != rhs.get_type_name());
        $display("REVIEW|same_wrapper|%0d", lhs.get_object_type() == rhs.get_object_type());
        cmp.check_type = 1;
        equal = lhs.compare(rhs, cmp);
        $display("REVIEW|check_type|%0d", cmp.check_type);
        $display("REVIEW|compare_equal|%0d", equal);
        explicit_equal = (lhs.get_type_name() == rhs.get_type_name()) && lhs.compare(rhs, cmp);
        $display("REVIEW|explicit_name_check_equal|%0d", explicit_equal);
        $display("REVIEW|done|1");
        $finish;
      end
    endmodule
    

    全部用例 · 证据摘要

    版本适用范围