本页内容
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 表达式,并对少数直接声明关联使用点;未做完整类型解析或预处理,行为结果仍需验证。
uv run tools/uvm_migration_scan.py <SoC代码目录> --rules D17
核对命中对象及生效分支后,在条目清单记录修改与验证证据;扫描规则记录用于整理命中位置。
扫描器下载、输入范围与报告说明
源码与标准依据
核查方式:源码核对 。未单独进行 VCS 行为实测。
VCS 内置 UVM-1.2 :uvm_resource.svh:661–662 (uvm_resource_types::rsrc_q_t rtab[string] / ttab[uvm_resource_base],即 uvm_queue)
VCS 内置 uvm-ieee-2020-2.0 :uvm_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 · 迁移清单
版本适用范围