跳转至

输入查询内容

    本页内容

    资源构造、入池和单侧 override

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

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

    结果对比

    观察内容 UVM 1.2 UVM 2.0
    set(NAME_OVERRIDE):按名称查询的资源值 mode0_name 22 22
    set(NAME_OVERRIDE):按类型查询的资源值 mode0_type 11 22
    set_name_override:按名称查询的资源值 mode1_name 22 22
    set_name_override:按类型查询的资源值 mode1_type 11 11
    set(TYPE_OVERRIDE):按名称查询的资源值 mode2_name 11 22
    set(TYPE_OVERRIDE):按类型查询的资源值 mode2_type 22 22
    set_type_override:按名称查询的资源值 mode3_name 11 11
    set_type_override:按类型查询的资源值 mode3_type 22 22
    构造参数中的 scope 能匹配目标路径(1=是) constructor_scope_match 1 1
    资源加入资源池后的优先级 precedence_after_insert 9876 1000

    运行命令

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

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

    最小源码

    resource_probe.sv

    resource_probe.sv
    `timescale 1ns/1ps
    `include "uvm_macros.svh"
    import uvm_pkg::*;
    
    module resource_probe;
      initial begin
        uvm_resource_pool pool = uvm_resource_pool::get();
        uvm_resource#(int) first, second, selected;
        string scope;
        for (int mode = 0; mode < 4; mode++) begin
          scope = $sformatf("resource_case%0d", mode);
          first = new("value", scope);
          second = new("value", scope);
          first.write(11);
          second.write(22);
          pool.set(first);
          case (mode)
            0: pool.set(second, uvm_resource_types::NAME_OVERRIDE);
            1: pool.set_name_override(second);
            2: pool.set(second, uvm_resource_types::TYPE_OVERRIDE);
            3: pool.set_type_override(second);
          endcase
          selected = uvm_resource_db#(int)::get_by_name(scope, "value");
          $display("REVIEW|mode%0d_name|%0d", mode, selected.read());
          selected = uvm_resource_db#(int)::get_by_type(scope);
          $display("REVIEW|mode%0d_type|%0d", mode, selected.read());
        end
        first = new("before_insertion", "precedence_case");
        first.precedence = 9876;
        $display("REVIEW|constructor_scope_match|%0d", first.match_scope("precedence_case"));
        pool.set(first);
        $display("REVIEW|precedence_after_insert|%0d", first.precedence);
        $display("REVIEW|done|1");
        $finish;
      end
    endmodule
    

    全部用例 · 证据摘要

    版本适用范围