- 示例与验证
- 实验结果与证据
本页内容
实验结果与证据
这里汇总最小 TB 在两侧 VCS 内置库中的实际观察。按模块查看结果,再从实验链接核对运行命令、完整观察值和源码;具体修改代码与兼容范围见关联迁移条目。
实验环境:VCS W-2024.09-SP2-8,seed=1。下文 1.2 为 -ntb_opts uvm-1.2,2.0 为 -ntb_opts uvm-ieee-2020-2.0;附加开关单独注明。
53 组实验共有 156 条结果记录。PASS 表示观察符合预期,可能是成功复现缺陷。判断改法是否有效,要同时看修改后的数据、状态和适用条件。
准备运行环境 · 查找可运行示例 · 下载 TB、运行器与预期结果 · 结果归档
编译断点
代表性旧写法已验证“1.2 可编译 → 2.0 在预期符号报错 → 改写后 2.0 可编译”。 抽象类、删除成员、旧宏与虚方法签名等断点分组列在实验页;编译成功本身不证明行为等价。
查看编译场景与诊断范围
C1–C16(C10 分为 a/b/c)共 18 个最小场景、54 条结果,逐条匹配错误代码与相关符号。
| 诊断 | 对应旧写法 |
|---|---|
MFNF / UM |
调用已删除成员 / 使用旧宏 |
SV-ACCNBI |
直接构造已变为抽象类的基类 |
TMAFTC |
沿用旧参数或构造签名 |
SV-VMNI / SV-IRT |
缺少 pure virtual 实现 / 仲裁 override 返回类型不符 |
IRPC |
Port 查询仍使用旧返回容器 |
范围:C6 基线显式启用 UVM_OBJECT_DO_NOT_NEED_CONSTRUCTOR;未启用时,无参注册类在 1.2 也可能失败。此矩阵覆盖代表性断点,没有逐个编译所有被删符号。
实验:删除接口与旧宏 · Port 容器与特化资源查询。后门/socket 构造及 VCS 私有成员的补充编译记录见下方对应模块。
Object / Factory
普通 factory override 在基础实验中保持一致;自定义 factory、copy 钩子和错误报告时机需要分别核对。 实验已覆盖 delegate 转发样例,但不代表任意自定义注册算法等价。
查看对象、工厂与扩展钩子的结果
| 检查 | 1.2 | 2.0 |
|---|---|---|
copy(null) 诊断 |
NULLCP warning |
OBJ/COPY error |
| 旧 automation 钩子跟随 copy 的调用数 | 1 | 0 |
改用 do_copy 后调用数 |
1 | 1 |
TYPNTF 在 set override / find_override 时的次数 |
1 / 0 | 0 / 1 |
| 深复制叶对象后修改源,副本值 | 96 | 96 |
| parent_child link 创建后的进程随机状态 | 保持 | 保持 |
自定义 factory 样例在目标补齐四个新增方法,向同一 delegate 转发;注册查询和别名 override 均符合预期。link 行只支持本探针的观察,不能由新增源码防护推导旧版随机状态必变。
改法:M01-004、M01-005、M01-009、M01-010。初始化时机另见 VCS 集成。
实验:基础特性 · 字段与旧钩子 · 复制及策略状态 · 工厂诊断时机 · factory 转发样例 · link 随机状态。
Field Automation
目标默认只执行显式启用的字段操作,compare 可能跳过不同值并返回相等。 仅写 UVM_COPY 的探针没有 FIELDS/NO_FLAG 提示,不能用“没有 warning”判断 field 配置正确。
查看字段操作与 legacy 开关对照
此表第三列为目标默认行为,第四列为目标启用 UVM_LEGACY_FIELD_MACRO_SEMANTICS 的结果。
| 检查 | 1.2 | 2.0 | 2.0 + legacy |
|---|---|---|---|
只有 UVM_NOCOPY,字段不同,compare 返回值 |
0 | 1 | 0 |
| 同字段 print 调用数 / pack 位数 / record 调用数 | 1 / 32 / 1 | 0 / 0 / 0 | 1 / 32 / 1 |
| 同字段 copy 后目标值 | 保留 123 | 保留 123 | 保留 123 |
仅 UVM_COPY,字段不同,compare 返回值 |
0 | 1 | 0 |
显式 UVM_ALL_ON + UVM_NOCOPY |
compare 为 0,copy 保留原值 | 同左 | 同左 |
范围:负向 flag 会影响多种操作;NOCOPY 的禁复制意图仍成立。显式组合仅验证表中场景,其他 FLAG 组合仍需按操作意图验证。recorder 使用开放的 text stream 计数。
Comparer / Printer / Packer
comparer 状态、类型判断与消息数量都存在变化;compat packer 也不能保证任意 packet 位流与 1.2 一致。 比较结果与打包格式须按各自契约检查。
查看 comparer 与 printer 观察
| 检查 | 1.2 | 2.0 |
|---|---|---|
预设 check_type=0,经 obj.compare 后的值 |
0 | 1 |
| flush 后设置不检查类型,直接调用 comparer 的示例 | 相等 | 相等 |
show_max=0,一处不匹配的消息数 |
0 | 1(0 表示不限量) |
| INFO comparer verbosity 高于阈值的消息数 | 0 | 0 |
compare_field_int(size=65) |
相等,无 BAD_SIZE |
不等,1 条 BAD_SIZE |
不同类型名、同一 wrapper、字段相等,check_type=1 |
不相等 | 相等 |
| 调用处显式要求两个顶层对象类型名相同 | 不相等 | 不相等 |
连续两次 printer.emit,未 flush 的提示数 |
0 | 1 |
旧两参 uvm_print_int(value,UVM_HEX) 接收到的位宽 |
32 | 117440512 |
| 显式传 SIZE / RADIX | 32 位、HEX | 32 位、HEX |
范围:目标的 legacy field 开关不恢复 comparer 的 flush 或 show_max 行为。直接使用 comparer 时,由调用方管理独立比较之间的状态;verbosity 行仅覆盖 INFO,不适用于 WARNING。类型名探针的业务类共用已注册基类的 wrapper,显式限制只验证两个非空顶层对象,不代替嵌套对象检查。
常规 sprint 顶层会 flush。改写样例已验证两次独立 printer 输出;打印宏探针仅拦截实参,没有渲染错误的巨大位宽。
改法:M02-004、M02-005、M02-006。实验:策略状态 · 类型比较 · 宽字段与 emit · 打印宏实参 · printer 复用。
查看 packet 与 GP 打包格式
| 检查 | 1.2 | 2.0 |
|---|---|---|
| 相同 packet,宏自动化 + compat packer | 148 位 | 308 位 |
| 上述 packet 的本版本 pack/unpack 闭环 | 通过 | 通过 |
显式 do_pack/do_unpack,与同一 148 位 golden 对照 |
逐位相等,回读成功 | 逐位相等,回读成功 |
| GP 使用 compat packer | 240 位 | 241 位 |
| GP 的 DMI 状态回读值 | 0 | 1 |
范围:packet 使用相同 tag、string、int array 和 leaf,use_metadata=1;显式格式固定四位空标记与叶字段顺序,未覆盖共享或循环对象图。简单 int/string 一致不能推广到所有 packet。目标 packer 状态接口另已回读 16 位数据,这不证明跨版本协议位流一致。
改法:M02-001、M02-002、M08-003。实验:完整位流对照 · packer 状态接口。
Config DB / Resource DB
Config DB 的类型和克隆意图要显式保留;Resource DB 的入池时机、优先级选择和单侧 override 要分别核对。 连续改写样例已对跑验证 scope、资源值、优先级与查询顺序。
查看配置与资源结果
| 检查 | 1.2 | 2.0 |
|---|---|---|
| 旧全局配置改 root 组件方法,读取 64 位值 | 1234567801234567 |
1234567801234567 |
| setter 克隆后修改源;两次 getter 克隆后修改一个副本 | 存储和另一副本均保持 42 | 同左 |
| 直接用 config_db 对象 set/get | 返回原句柄 | 返回原句柄 |
非空 context 下相对 /regex/ 配置命中 |
否 | 是,值 51 |
| 注册字段自动配置 / 未注册字段的值 | 42 / 0 | 42 / 0 |
default_precedence=4321 后构造并入池 |
4321 | 4321 |
| 入池前实例 precedence=9876,默认值 1000 | 保持 9876 | 重置为 1000 |
同名同型资源 precedence=9999/4321,get_by_name |
高优先级值 11 | 低优先级值 22 |
lookup_name 后 get_highest_precedence |
高优先级 | 高优先级 |
rp.set 的 name-only 掩码,按 type 查询 |
旧值 11 | 新值 22 |
改用 set_name_override,按 type 查询 |
旧值 11 | 旧值 11 |
rp.set 的 type-only 掩码,按 name 查询 |
旧值 11 | 新值 22 |
改用 set_type_override,按 name 查询 |
旧值 11 | 旧值 11 |
| 特化资源构造后是否已入池 | 否 | 是 |
范围:64 位配置使用 uvm_bitstream_t,错误的 int 查询两版均未命中。配置实验覆盖显式组件 getter,不代表任意自动配置对象图。资源替代查询要处理 null/cast,不复制 DB 全部审计副作用;目标 get_all 两次调用追加为 4 项,队列追加与类型行为须分开核对。
改法:M04-004、M05-001、M05-004、M05-005、M05-010、M05-011。派生 FIFO 自动配置见 TLM。
实验:类型与克隆 · 配置命中 · 资源优先级选择 · 入池与单侧 override · 连续改写 · 特化资源与队列。
Phase / Objection / Event
旧 test_done 不再保持 run 存活;改为实际 run phase objection 后,任务完成标记在两版均为 1。 event reset 后的数据保留也发生变化,依赖旧数据的代码需要在 reset 前保存句柄。
查看 phase、objection 与 event 结果
| 检查 | 1.2 | 2.0 |
|---|---|---|
旧 test_done 门控,任务完成标记 |
1 | 0 |
| 实际 run phase objection 门控,任务完成标记 | 1 | 1 |
| phase default sequence 的 wrapper / instance 两式总启动数 | 2 | 2 |
| 旧字符串 default sequence 启动数 | 1 | 0 |
| event reset 后是否保留 trigger data | 是 | 否 |
| reset 前保存句柄的改写样例 | 数据保留 | 数据保留 |
| 标准 callback add/delete 改写后的调用数 | 1 | 1 |
范围:L2 基础实验还验证 phase 顺序、objection 保持、config_db 值 42、factory override、sequence parent、callback、TLM 请求完成与 RAL frontdoor。其 RAL 为 64 位寄存器经 32 位小端总线,数据及镜像为 0123456789abcdef,5 笔 bus 事务完成。
普通 type_name 无括号读取在两版可用;目标 uvm_event 名称为 uvm_pkg::uvm_event#(T)。目标 event 显式默认数据另有样例验证。基础特性通过不能代替下方各模块的差异检查。
改法:M03-001、M03-003、M03-011、M03-012、M06-002。
实验:基础特性 · 旧 objection · 改写后 · event reset · 回调与类型名称 · event 改写。
Sequence / Sequencer
动作宏迁移已检查约束、sequencer、parent、priority 和已有对象句柄;队列、kill 与 lock 的行为需要独立检查。 push 第二笔请求和 sequence library 候选集缩减的风险均有旧写法与局部替代对照。
查看激励、队列与仲裁结果
| 检查 | 1.2 | 2.0 |
|---|---|---|
| 旧/新参数宏探针的约束值、优先级 | 42、37 | 42、37 |
| 响应溢出报错禁用的默认值 / 溢出错误数 | 0 / 1 | 1 / 0 |
| 显式将 disabled 设为 0 | 溢出报错 | 溢出报错 |
| 活动 sequence 已排入 1 个响应,再 kill,剩余响应数 | 1 | 1 |
显式 clear_response_queue 后剩余响应数 |
0 | 0 |
| kill 后跨 sequencer 锁数量 | 1 | 0 |
| grant 后被杀场景,driver 完成标记 | 0 | 1 |
| 固定队列中两项前导 lock 的授予数 | 2 | 1 |
| 普通请求后的一项 lock 授予数 | 0 | 1 |
| library 的 max 从 3 缩到 0,返回值 | 0 | 3 |
| 独立边界检查派生类的返回值 | 0 | 0 |
push 两笔接收值 / SQRSNDREQGNI 次数 |
1、2 / 0 | 1、1 / 1 |
| 派生 sequencer 显式消费 FIFO 后的接收值 | 1、2 | 1、2 |
动作宏范围:15 个旧宏映射对应 16 次实际 item 传输;6 次已有对象发送保持句柄。仅覆盖串行 item 与两个受控 sequencer,不覆盖任意嵌套回调、禁用随机化或并发仲裁。deprecated 开关路径另有目标实验;旧 response_queue_error_report_disabled 接口仍返回预期值。
生命周期范围:排队响应在 kill 后、再次 start 前观察,两版状态均为 UVM_STOPPED。跨 sequencer 与 lock 结果仅覆盖固定探针,不代表在途 driver 事务全部取消。starting_phase 锁冲突在两版均报错。push 旧探针用 catcher 拦截 fatal 完成观测,替代的背压、响应及 kill 契约仍须按实际环境验证。
改法:M09-004、M06-008、M06-011、M06-012、M06-013、M06-014、M06-017、M06-019。
实验:宏与 lock · deprecated 开关 · 动作宏改写 · 生命周期 · 已排队响应 · library 旧写法 / 改写后 · push 旧写法 / 改写后。
Reporting / 命令行
消息宏的 catcher 入口、非 INFO 过滤和 summary 路由存在变化;64 位命令行整数配置在目标会被截断。 bitstream 参数和固定 catcher 注册顺序的替代已有对照实验。
查看报告过滤、路由与宽值配置
| 检查 | 1.2 | 2.0 |
|---|---|---|
NO_ACTION 消息宏进入 catcher 的次数 |
1 | 0 |
NO_ACTION 直调函数进入 catcher 的次数 |
1 | 1 |
| 高 verbosity warning;降级为 INFO 的同类 warning | 均未进入 catcher | 均进入 catcher |
| 构造后 report handler 是否存在 | 是 | 否 |
| 经 getter 后 report handler 是否存在 | 是 | 是 |
summary(0) 的 DISPLAY / LOG 路由位 |
1 / 0 | 0 / 1 |
summary(file) 后 ID 文件配置是否保留新文件 |
否 | 是 |
| verbosity=NONE 时 summary catcher 次数 | 0 | 1 |
| 先全局、后实例注册,全局调用的 catcher 次数 | 1 | 2 |
| 先实例、后全局注册的替代 | 1 次 | 1 次 |
| 命令行配置 64 位整数的读回值 | 1234567801234567 |
0000000001234567 |
| 目标改用 bitstream 参数 | — | 1234567801234567 |
范围:warning severity override 位于入口过滤之后,降级不能自动恢复旧过滤。summary 探针观察路由并拦截消息,不覆盖全部实际落盘路径;显式恢复文件配置后两版均符合预期。catcher 注册替代仅覆盖固定注册集合,不推广到动态注册。自定义 report server 样例验证格式方法,未覆盖全部 action/计数路由。
改法:M01-016、M04-001、M04-002、M04-003、M04-007、M04-010、M04-018。
实验:消息入口与过滤 · 报告路由 · catcher 注册 / 改写后 · 命令行宽值 / bitstream 参数 · server 格式方法。
TLM
FIFO 清场有残留、派生 FIFO 自动配置默认停止、GP extension 比较可能漏检。 三者的触发条件不同;socket 抽象基类构造另有编译断点与具体连接样例。
查看 FIFO、GP 与 socket 结果
| 检查 | 1.2 | 2.0 |
|---|---|---|
| FIFO 放两项后 flush,get_ap 广播数 / used | 2 / 0 | 0 / 1 |
无并发时用公开 try_get 循环排空 |
排空 | 排空 |
杀死阻塞 get 后再 put,can_get |
0 | 1 |
| 派生 FIFO 注册字段,配置 42,build 后值 | 42 | 0 |
同一 FIFO 的 apply_config_settings 调用数 |
1 | 0 |
| 目标派生类显式启用自动配置后,字段值 / 调用数 | — | 42 / 1 |
| rhs 独有 GP extension,比较是否相等 | 否 | 是 |
| 两个 extension 的比较调用数 | 2 | 1 |
| 删除后一个 extension 后,比较是否相等 | 否 | 是 |
| 旧阻塞 socket 基类直接构造 | 可编译 | SV-ACCNBI |
| 具体阻塞 socket 的连接、响应与错误地址检查 | 符合预期 | 符合预期 |
FIFO 范围:本机 mailbox::try_get 返回 2/1,目标 flush 用单 bit 接收,与两项时提前退出一致;该观察限定本机 VCS,不据此推广其他仿真器。清场替代仅在无并发参与方时验证。配置探针未启用旧全局禁自动配置选项,派生类不覆盖 build,以 UVM_DEFAULT 注册一个整数字段;目标通过 use_automatic_config 返回 1 恢复这项赋值。
GP / socket 范围:显式检查 extension 集合并逐项比较的示例能捕获缺失项;双向 GP compare 也不能证明 extension 全覆盖。socket 样例覆盖具体阻塞 IMP 的连接与响应,其他协议和并发模式仍须另验。同组补充实验的类型比较和 kill 后响应分别见 策略接口和 Sequence。
改法:M08-001、M08-002、M08-004、M08-005、M08-006。GP 位流见打包格式。
实验:FIFO 清场 · 阻塞 get 清理 · FIFO 自动配置 / 恢复后 · GP 比较 · socket 连续改写 · 基类构造 1.2 / 2.0。
RAL(寄存器模型)
大端数据为零时 status 仍可能成功;字段写可能覆盖相邻硬件值,后续拍失败也可能继续预测镜像。 核对数据、硬件、镜像、状态和事务数,不能只看 UVM_NOT_OK 或日志。
查看大端、字段访问与失败预测
| 检查 | 1.2 | 2.0 |
|---|---|---|
| 64 位 reg 经 32 位小端 bus | 数据正确 | 数据正确 |
| 同宽度大端访问,普通 adapter | 数据正确 | 写/读为零,status 仍成功 |
| 针对目标大端的整宽补偿 adapter | 数据正确 | 数据正确 |
| 支持 byte-enable 的低 8 位字段写事务数 | 1 | 2(退化为整 reg) |
| 硬件更新相邻高位后,再写低字段 | 保留 deadbeef |
被旧镜像 01234567 覆盖 |
| 显式单字节 bus 写并只预测目标字段 | 保留相邻硬件值 | 保留相邻硬件值 |
| 适用/补偿场景的失败写 status | UVM_NOT_OK |
UVM_NOT_OK |
| 同场景失败写后的镜像 | ffffffffffffffff |
保持 1111222233334444 |
| predictor 首拍失败后的镜像 | 更新 | 保持 |
| predictor 后续拍失败后的镜像 | 更新 | 更新 |
| 聚合全部拍状态、仅成功时预测 | 任一拍失败均保留旧镜像 | 任一拍失败均保留旧镜像 |
单拍也受影响:32 位寄存器、32 位大端 bus、默认 64 位 uvm_reg_data_t 的独立实验中,写入或预置 12345678 后,1.2 的硬件值/读回值正确,2.0 均为零。两版 status 均成功、合计 2 笔事务;固定映射 adapter 补偿后,两版写读均为 12345678。
范围:RAL 主矩阵为 LE、LE+response、BE、BE+response、BE+adapter 补偿、BE+补偿+显式字段写,双库共 12 条记录。合法的 32 位 memory burst 与两寄存器并发,在适用/补偿场景符合断言。早期 64 位 memory burst 夹具在两库均失败,不计为迁移缺陷。
补偿限定 64 位 reg_data / 32 位 bus、固定地址映射与响应契约;单拍补偿仅验证所列数据及状态。多级 map、桥接、不同 reg_data 宽度、多 master 或不同响应模式仍需独立验证。
改法:M07-020、M07-021、M07-022、M07-024。
实验:RAL 六场景与总线明细 · 单拍大端 / 补偿后 · predictor 失败拍 / 聚合后。
查看后门、复位遍历与访问权限
| 检查 | 1.2 | 2.0 |
|---|---|---|
| 旧 backdoor 基类直接构造 | 可编译 | SV-ACCNBI |
| 具体 backdoor 挂载、RAL 读写、硬件/镜像及回调 | 符合预期 | 符合预期 |
| Backdoor map 告警:显式伪 map / field 后门 / 无实际 map(每场景读写各一次) | 均 0 次 | 各 3 次;status 仍成功 |
| 已映射 reg 的 null/实际 map、mirror 重选 map、限定 RW 字段替代 | 无该告警,数据正确 | 无该告警,数据正确 |
| 原 codec 路径:编码硬件值 / 解码逻辑值 | 54 / 1 | 1 / 54 |
| 单 codec 改用 pre_write/post_read 直接更新后 | 54 / 1 | 54 / 1 |
| 三层模型叶块的 mirror 调用数 | 2 | 1 |
| 无 reset 字段是否暂禁比较 | 否 | 是 |
| no-reset 字段的自动 resource 是否存在 | 是 | 否 |
WO map 对 WRC/W1SRC/W0SRC/W1CRS/W0CRS/WCRS/WSRC 的访问权限返回值改变,RO 映射保持,逐项结果在接口实验中列出。
范围:Backdoor map 探针限有效自定义后门、32 位 RW 寄存器、无并发;field 传实际 map 仍告警,字段替代验证了 bit 8 处 8 位字段及相邻 RW 位保留,未覆盖 RO/WO、多 map、DPI 失败或副作用。codec 替代仅覆盖一个 codec,多 codec 顺序需另验。复位探针只观察层级遍历与字段过滤,不声称验证实际总线复位访问。
改法:M07-003、M07-004、M07-005、M07-007、M07-023。
实验:field 后门告警最小对照 · Backdoor map 告警与改写 · backdoor 挂载改写 · 基类构造 1.2 / 2.0 · codec 旧写法 / 改写后 · 复位遍历 · 访问权限。
VCS 集成与定制
自定义 coreservice 的安装时机和可选正则缓存受 VCS 集成影响。 reg-bank、数组录制、显式时间与 Resource DB 追踪的改写已有最小验证,范围不覆盖全部 Verdi 工作流。
查看集成条件与定制接口结果
| 检查 | 1.2 | 2.0 |
|---|---|---|
| 默认集成下普通 factory / 默认 printer | 正常 | 正常 |
| initial 中安装 custom service | 未测此项 | 被忽略 |
| 关闭 Verdi 记录集成后安装 custom service | — | 成功 |
| 先 regex、再同串 glob,默认不开缓存的 glob 结果 | 不匹配 | 不匹配 |
| 目标启用正则缓存 | — | 错误匹配 |
| 构造时声明 reg-bank 覆盖率能力 | 能力与使能状态符合预期 | 同左 |
显式数组 do_record 项数 |
符合预期 | 符合预期 |
| 非零 time 参数、显式 Resource DB 追踪 | 符合预期 | 符合预期 |
旧 reg-bank add_coverage / recorder getter |
可编译 | 成员删除,预期编译失败 |
范围:关闭录制集成只验证本探针的 custom service 安装,不作为无条件禁录制建议;正则缓存保持默认关闭已验证。定制改写未验证时间小数精度、bank 采样、总线访问或全部 Verdi 集成。
改法与配置条件:M01-014、M10-006、M02-016、M02-017、M05-012、M07-025。
实验:默认集成初始化 / 关闭录制的对照 · 默认匹配 / 开启缓存 · 定制改写 · bank 编译 1.2 / 2.0 · recorder 编译 1.2 / 2.0。
结果归档与使用范围
每个实验页提供精确命令、库与附加配置、观察值及最小源码。runs.json 保存运行清单,results.json 保存结果、实际命令、总线传输及源码/日志 SHA256。最小 TB 和预期文件在示例包内;完整仿真日志不随静态站点交付。
以上是最小场景证据。条目的“源码与标准依据”区分双侧源码与标准条款,例如 comparer 的 IEEE 1800.2-2020 §16.3;具体实现观察以对应实验为准。没有列出实测的功能不能据此视为已经验证,真实 SoC 仍需执行自身的命中核销与回归。
连续改写与跨模块实验
连续迁移示例:资源入池与查询、后门挂载与读写、阻塞 socket 连接与响应,分别对应 M05-001、M07-003、M08-006。
手册改写示例:同一实验覆盖动作宏、factory delegate、event、printer、packer 与 report server;结果和限定范围已归入上方对应模块。
风险替代对照:Sequence、Reporting、RAL 和 VCS 集成 分别提供原写法与替代方案的结果。配置、字段操作和单拍大端的补充观察见 Config DB、Field Automation 与 RAL。
专项实验:FIFO 与已排队响应、恢复 FIFO 自动配置、comparer 类型检查提供各自精确命令。