- 示例与验证
- 运行环境
运行第一个迁移示例
用一个最小 test 观察旧 objection 如何导致 run 提前结束,再验证修改后的行为。
示例独立于真实 SoC 环境,已归档结果基于 VCS W-2024.09-SP2-8。
工具包里该用哪个脚本
扫描自己的代码用扫描器;复现手册里的差异用示例运行器。 这四个 Python 脚本按任务选择,无需依次运行。
脚本(均在 tools/ 下) |
何时运行 | 输入与结果 |
|---|---|---|
uvm_migration_scan.py |
检查实际 SoC 代码中的迁移线索 | 接收代码目录或文件;默认保存 JSON、CSV 和范围摘要;自动读取同目录 YAML 的团队配置,统一输出目录;只读扫描 |
run_uvm_review.py |
复现某个行为差异或验证示例改法 | 用 --case 选择包内 TB、--variants 选择库;编译、仿真并核对观察值 |
run_compile_review.py |
复现旧 API 编译断点和改写后的编译结果 | 用 --cases 选择内置编译用例;检查旧写法在 1.2 通过、在 2.0 出现预期错误,以及改写后在 2.0 通过 |
run_reg_review.py |
复现寄存器访问矩阵 | 用 --scenarios 选择大小端、响应或补偿场景;在两库编译仿真并检查数据和镜像 |
扫描脚本和配套 YAML放在同一目录,运行时自动读取团队配置;需要 PyYAML,无需 VCS 或 license。三个示例运行器需要 Linux、本机 VCS 和 license,运行的是包内 tests/uvm_review/ 下的最小 TB。实际 SoC 的编译和回归继续使用项目原有入口。
运行示例时保留完整目录:run_compile_review.py 和 run_reg_review.py 会导入同目录的 run_uvm_review.py;*.sv 是 TB 源码,*.expected.json 是预期观察值。environment.example.sh 是按本机配置填写后加载的环境模板。
配置下节环境后,按任务选择命令,例如:
--case 是 TB 名称,不是扫描规则 ID;--cases 只接受运行器内置的编译用例,并非所有扫描规则。省略 --cases 或 --scenarios 会运行对应完整矩阵。具体实验所需的宏、plusarg 和预期文件,以条目中的“在本机复现”或实验页命令为准。下文以 objection 为例走完一次复现和修改验证。
1. 准备目录与工具
下载示例包,解压到可写目录,并在包含 tools/ 与 tests/ 的目录执行后续命令。已有本仓库时可直接在仓库根目录操作。
需要 Linux、uv、Python 3.11 或更新版本,以及可编译运行的 VCS 和 license。运行器仅使用 Python 标准库。用本机环境脚本配置工具;需要的变量如下:
| 配置 | 用途 |
|---|---|
VCS_HOME |
VCS 安装目录,内含两版 UVM 库及目标 compat 源码 |
PATH |
能找到 vcs 及 VCS 所需的编译工具 |
| license 配置 | 沿用实际环境,例如 SNPSLMD_LICENSE_FILE 或 LM_LICENSE_FILE |
包内 environment.example.sh 提供空值模板。按本机环境填写后加载;也可加载仓库内已有的本地 .env。两者任选其一,不需要创建同名文件才能运行示例。
2. 复现旧写法
completed 为 test 中初值为 0 的成员。两段代码分别放在该 test 的 run_phase 中:
运行器分别编译和运行两版,固定 seed=1,并检查预期观察值。末尾应出现 "passed": true,其中关键差异为:
| 观察内容 | UVM 1.2 | UVM 2.0 |
|---|---|---|
completed 是否置 1 |
是,工作完成 | 否,run 提前结束 |
此处断言通过表示成功复现差异。done=1 只是探针输出完成,不能代替 run_completed。
3. 验证修改后的写法
改用 run_phase(uvm_phase phase) 传入的实际 phase:
两版应均为 run_completed=1。源码通过 +MIGRATED 选择实际 phase 的 raise/drop;查看完整修改与验收条件。
4. 找到输出并迁移到环境测试
命令末尾 Results: 给出本次 results.json 的实际路径。构建和日志位于 .scratch/review/,每次运行及每个库使用独立目录。编译失败先读该变体的 compile.log,仿真或断言失败读 sim.log 和结果中的 mismatches。
将完成标志、事务计数和检查器排空检查移到真实 test,并在迁移清单中记录 S2 的结果与证据位置。
随后可阅读字段比较漏检案例和单 codec backdoor 案例,或从全部示例选择实际命中的模块。