本页内容
资源构造、入池和单侧 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
|
全部用例 · 证据摘要
版本适用范围