跳转至

输入查询内容

    本页内容

    实验结果与证据

    这里汇总最小 TB 在两侧 VCS 内置库中的实际观察。按模块查看结果,再从实验链接核对运行命令、完整观察值和源码;具体修改代码与兼容范围见关联迁移条目。

    实验环境:VCS W-2024.09-SP2-8,seed=1。下文 1.2-ntb_opts uvm-1.22.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-004M01-005M01-009M01-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 计数。

    改法与兼容配置M09-002实验字段策略 · 各操作调用数 · 部分正向 FLAG

    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-004M02-005M02-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-001M02-002M08-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_nameget_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-004M05-001M05-004M05-005M05-010M05-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-001M03-003M03-011M03-012M06-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-004M06-008M06-011M06-012M06-013M06-014M06-017M06-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-016M04-001M04-002M04-003M04-007M04-010M04-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-001M08-002M08-004M08-005M08-006GP 位流见打包格式

    实验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-020M07-021M07-022M07-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-003M07-004M07-005M07-007M07-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-014M10-006M02-016M02-017M05-012M07-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-001M07-003M08-006

    手册改写示例同一实验覆盖动作宏、factory delegate、event、printer、packer 与 report server;结果和限定范围已归入上方对应模块。

    风险替代对照SequenceReportingRALVCS 集成 分别提供原写法与替代方案的结果。配置、字段操作和单拍大端的补充观察见 Config DBField AutomationRAL

    专项实验FIFO 与已排队响应恢复 FIFO 自动配置comparer 类型检查提供各自精确命令。

    版本适用范围