本页内容
Backdoor 编解码未写回的数据对照
环境:VCS W-2024.09-SP2-8。1.2 使用 uvm-1.2,2.0 使用 uvm-ieee-2020-2.0。
实验检查观察值是否符合预期;成功复现问题不代表问题已修复。
修改前后对比
| 观察内容 |
1.2 旧写法 |
2.0 旧写法 |
1.2 改写后 |
2.0 改写后 |
| 编码写入后的硬件数据(十六进制) encoded_hardware |
54 |
1 |
54 |
54 |
| 后门读取并解码后的数据(十六进制) decoded_value |
1 |
54 |
1 |
1 |
运行命令
目录与环境准备;从解包根目录执行:
| uv run tools/run_uvm_review.py --case backdoor_probe --variants 12,20
|
改写后运行命令
| uv run tools/run_uvm_review.py --case backdoor_probe --variants 12,20 --plusarg +MIGRATED --check tests/uvm_review/backdoor_migrated.expected.json
|
最小源码
backdoor_probe.sv
backdoor_probe.sv
| `timescale 1ns/1ps
`include "uvm_macros.svh"
import uvm_pkg::*;
class value_codec extends uvm_reg_cbs;
function new(); super.new("codec"); endfunction
virtual function void encode(ref uvm_reg_data_t data[]);
if (!$test$plusargs("MIGRATED")) foreach(data[i]) data[i] ^= 'h55;
endfunction
virtual function void decode(ref uvm_reg_data_t data[]);
if (!$test$plusargs("MIGRATED")) foreach(data[i]) data[i] ^= 'h55;
endfunction
virtual task pre_write(uvm_reg_item rw);
if ($test$plusargs("MIGRATED")) foreach(rw.value[i]) rw.value[i] ^= 'h55;
endtask
virtual task post_read(uvm_reg_item rw);
if ($test$plusargs("MIGRATED")) foreach(rw.value[i]) rw.value[i] ^= 'h55;
endtask
endclass
class observed_backdoor extends uvm_reg_backdoor;
uvm_reg_data_t hardware;
function new(); super.new("backdoor"); endfunction
virtual task write(uvm_reg_item rw);
do_pre_write(rw);
hardware = rw.value[0];
rw.status = UVM_IS_OK;
do_post_write(rw);
endtask
virtual function void read_func(uvm_reg_item rw);
rw.value[0] = hardware;
rw.status = UVM_IS_OK;
endfunction
endclass
module backdoor_probe;
initial begin
observed_backdoor bd = new();
value_codec codec = new();
uvm_reg_item rw = new("rw");
uvm_callbacks#(uvm_reg_backdoor,uvm_reg_cbs)::add(bd,codec);
rw.value[0] = 1;
bd.write(rw);
$display("REVIEW|encoded_hardware|%0h", bd.hardware);
bd.hardware = 'h54;
bd.read(rw);
$display("REVIEW|decoded_value|%0h", rw.value[0]);
$display("REVIEW|done|1");
$finish;
end
endmodule
|
全部用例 · 证据摘要
版本适用范围