跳转至

输入查询内容

    本页内容

    uvm_resource_pool 内部表结构改用 uvm_shared 队列,rtab/ttab 类型变化

    内部实现:文件组织、内部数据结构与实现钩子的变化。直接依赖内部接口时查阅,普通 API 的使用不需要重审这些源码。

    影响范围

    直接遍历 resource_pool 的 rtab/ttab 内部队列。

    具体差异

    公开查找接口(lookup_name/lookup_type/lookup_scope 等)返回类型 uvm_resource_types::rsrc_q_t 不变;但 rtab/ttab 为 public 成员,直接遍历它们的调试/统计代码需按新容器类型改写(q.value[i] 替代 q.get(i))。

    修改方案

    仅直接访问 rp.rtab/ttab 的代码需要调整;正常使用查找接口者无改动。

    兼容措施与范围:正常查找接口可保留;兼容主库成员、deprecated/legacy field 开关和 compat 包不恢复旧内部表类型,直接访问须按容器配置核对。

    迁移后验证

    编译改用共享包装或公开查询接口的代码,检查同名/同类型资源集合与顺序;优先级选择按 M05-010 单独验证。

    记录核销:在无规则及补充检查中记录实际依赖与证据。

    补充查阅

    扫描定位与记录结果

    有扫描规则,覆盖部分可识别写法。脚本检查名称、参数和部分 FLAG 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。

    • D17 · 启发式:直接依赖 UVM 内部表、执行入口或状态字段。
    uv run tools/uvm_migration_scan.py <SoC代码目录> --rules D17
    

    核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。

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

    源码与标准依据

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

    VCS 内置 UVM-1.2uvm_resource.svh:661–662uvm_resource_types::rsrc_q_t rtab[string] / ttab[uvm_resource_base],即 uvm_queue)

    VCS 内置 uvm-ieee-2020-2.0uvm_resource_pool.svh:124–139(默认 uvm_shared#(uvm_resource_base[$]),可 +define+UVM_DISABLE_RESOURCE_POOL_SHARED_QUEUE 退回 uvm_queue);uvm_resource_base.svh:116–117(uvm_resource_types 新增 rsrc_sv_q_t/rsrc_shared_q_t typedef)

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

    src/vcs-uvm-1.2/base/uvm_resource.svh
      static local uvm_resource_pool rp = get();
    
      uvm_resource_types::rsrc_q_t rtab [string];
      uvm_resource_types::rsrc_q_t ttab [uvm_resource_base];
    
      get_t get_record [$];  // history of gets
    
      local function new();
      endfunction
    
    
      // Function: get
      //
      // Returns the singleton handle to the resource pool
    
      static function uvm_resource_pool get();
        if(rp == null)
          rp = new();
    

    完整源码 · SHA256:6dd457f7586da01b713fb94bdb5472e7fdb3e741219398f87f341c21f5a0f8af

    src/vcs-uvm-ieee-2020-2.0/base/uvm_resource_pool.svh
    // @uvm-ieee 1800.2-2020 auto C.2.4.1
    class uvm_resource_pool;
    
    `ifndef UVM_DISABLE_RESOURCE_POOL_SHARED_QUEUE
      typedef uvm_resource_types::rsrc_shared_q_t table_q_t;
     `define M__TABLE_Q(QUEUE_NAME) QUEUE_NAME``.value
     `define M__TABLE_GET(QUEUE_NAME, ITER) QUEUE_NAME``.value[ITER]
     `define M__TABLE_NAME "uvm_shared#(uvm_resource_base[$])"
    
    `else
      typedef uvm_resource_types::rsrc_q_t table_q_t;
     `define M__TABLE_Q(QUEUE_NAME) QUEUE_NAME
     `define M__TABLE_GET(QUEUE_NAME, ITER) QUEUE_NAME``.get(ITER)
     `define M__TABLE_NAME "uvm_queue#(uvm_resource_base)"
    
    `endif // !`ifdef UVM_DISABLE_RESOURCE_POOL_SHARED_QUEUE
    
      table_q_t rtab [string];
      table_q_t ttab [uvm_resource_base];
    

    完整源码 · SHA256:e617ba32a3b09e84913a841080b708ccbb69943976d2e48f3a92c72bf5c99806

    src/vcs-uvm-ieee-2020-2.0/base/uvm_resource_base.svh
      typedef uvm_queue#(uvm_resource_base) rsrc_q_t;
    
      // SV queue of resources
      typedef uvm_resource_base rsrc_sv_q_t[$];
      typedef uvm_shared#(rsrc_sv_q_t) rsrc_shared_q_t;
    
      // enum for setting resource search priority
      typedef enum { PRI_HIGH, PRI_LOW } priority_e;
    
      // access record for resources.  A set of these is stored for each
      // resource by accessing object.  It's updated for each read/write.
      typedef struct
      {
        time read_time;
        time write_time;
        int unsigned read_count;
        int unsigned write_count;
      } access_t;
    

    完整源码 · SHA256:1c28e6cc95c0ae5c636a1a6c81b65d5d9feab621c22d71b932791147f1c69e85

    术语解释 · 兼容配置

    resource_db::get_by_name 在 2.0 可能选中较低优先级资源(M05-010)

    返回Config DB / Resource DB · 迁移清单

    版本适用范围