03 · 加载运行、复位与跨环境验收
使用第二章生成的 snapshot,确认硬件执行证据,并将 SA 结果与黄金序列逐笔比较。
先修知识能读 Verilog 与基本 shell 命令;按本系列前序章节完成对应验收。
适用环境统一工程 course_fifo / tb_top;SA Run 基线;命令依据 WXE 24.05,工具配对及资源配置以站点验证为准。
验证状态原创 RTL 与脚本已软件测试;Cadence 编译、硬件执行与 trace 待目标设备验证。
本文目录
本章输入与三个独立的通过条件启动脚本逐行解释操作步骤:软件商业基线与 SA 对照预期输出:哪些可以精确比较结果目录与会话生命周期常见运行错误:定位第一处异常典型故障:工具退出为零但测试没有完成本章输入与三个独立的通过条件
输入是 build/sim、build/sa 以及 runs/golden/transactions.csv。先确认编译成功,再确认日志确实显示设计进入硬件执行,最后确认 Testbench 及外部 CSV 校验都通过。RUN_PASS 只能证明该次进程与本站检查条件通过,不能独立证明运行发生在 Palladium;必须结合 swap-in、硬件执行统计和站点资源记录判定。不要把模拟器成功跑完误报为硬件验证成功。
启动脚本逐行解释
run_sa.tcl 先推进 40 ns,让软件模拟器执行四个有效时钟边沿并初始化 DUT 状态。Testbench 在 41 ns 解除复位,避免与下降沿驱动器发生竞争。xc on -run 请求把 DUT 切换到硬件,后续 run 推进并完成用例。时钟仍来自软件 Testbench,这是一条信号交互基线;不能直接把 -run 改成 -tbrun 或 -autorun 并期望语义不变。
xrun 的 SA 命令解释器;软件阶段初始化后切换硬件。此脚本尚待商业工具与设备验证。
# xrun SA interpreter; existing site resource configuration must already be valid.
run 40ns
xc on -run
run
操作步骤:软件商业基线与 SA 对照
先用 Xcelium 运行软件 snapshot,可以把不同模拟器之间的语言或采样差异与硬件迁移差异分开。再从对应 build/sa 启动 SA;flow.py 会检查源摘要与工具路径,并在同一 build 内加锁,禁止两个运行互相覆盖日志和结果。运行编号必须唯一,失败也应保留,不能通过复用成功目录隐藏失败。
- 执行 sim01
预期与判定:商业软件结果应与本地黄金一致;不一致时先停在软件语义层排查。
- 执行 sa01
预期与判定:从 build/sa 中启动 xrun -R;审查 swap-in 和硬件执行证据。
- 逐笔比较 CSV
预期与判定:64 笔顺序和值全部一致;若长度不同,先检查结束条件而非忽略多余行。
- 归档结果与平台证据
预期与判定:保存 run.json、result.json、run.log、CSV 及资源记录,再进入波形章节。
在解压后的 palladium-course 工程根目录执行。标为硬件步骤的命令需在已配置的授权 Linux 环境验证。
python3 flow.py run sim --id sim01
python3 flow.py compare runs/golden/transactions.csv runs/sim01/transactions.csv
python3 flow.py run sa --id sa01
python3 flow.py compare runs/golden/transactions.csv runs/sa01/transactions.csv预期输出:哪些可以精确比较
COURSE_START、COURSE_TX、COURSE_DONE 来自本站 Testbench,各环境使用同一个检查器。下面给出预期的业务结果;厂商 banner、swap-in 文本、资源名称和运行秒数因站点不同而变化,所以不编造一套看似通用的完整厂商日志。若协议和时钟驱动未改变,默认用例的周期数也应保持 121,但核心验收仍包含完整事务序列与零差异。
业务输出为同工程的预期值,硬件侧尚未实测。不会把模拟器输出冒充厂商运行记录。
COURSE_START N=64 width=8 depth=4
COURSE_DONE sent=64 received=64 mismatches=0 cycles=121 full_stall=32
RUN_PASS: sa01 {...}
COMPARE_PASS: 64 ordered transactions match
# 另行在厂商日志中核查:
# 1. swap-in 实际完成;2. 硬件执行统计;3. 运行使用的资源与本次 build 对应。结果目录与会话生命周期
结果目录保留 Testbench 的功能结果和 Python 调度器的外层记录:run.json 的 run_wall_s 从子进程启动计时到退出,包含加载和退出成本;它不是 DUT 纯执行时间。Testbench 正常模式使用 $finish 结束会话,波形模式将在下一章改用 HOLD。终止前应按站点流程确认资源被释放,不能假设只切回软件就已将硬件交还其他用户。
| 文件 / 阶段 | 检查什么 | 不能证明什么 |
|---|---|---|
| run.log | 首条错误、COURSE_DONE、硬件执行信息 | 单独有 PASS 字样不证明完整正确 |
| result.json | status、事务数、mismatches、cycles | 不证明许可证或硬件身份 |
| transactions.csv | 逐笔顺序与数据 | 不覆盖未测试协议场景 |
| run.json | 命令、输入摘要、工具路径、墙钟时间 | run_wall_s 不是硬件 MHz |
| 资源释放 | 会话结束与站点资源状态 | xc off 单独不等于释放硬件 |
常见运行错误:定位第一处异常
将错误按启动、swap、复位、业务和退出分层处理。COURSE_* 由本包产生,厂商错误应保留原文,不要用网络上的另一版本编号替代解释。遇到卡住,先确认是否有时钟推进和合法会话,不要随意切换运行模式或关闭检查器;保留失败输入后才做单项修改。
| 现象 / 本包标识 | 优先证据 | 处理与复测 |
|---|---|---|
| swap-in 因 X/Z 或初始化失败 | 复位窗口、未驱动输入、存储状态 | 确认 40 ns 软件初始化与 DUT 清零;不用 xt0 隐藏未知值 |
| COURSE_TIMEOUT | sent/received 与时钟是否推进 | 检查驱动与 full/empty,不只扩大超时 |
| COURSE_NO_RESULT | 是否执行到 COURSE_DONE | 检查错误 snapshot、提前 exit 或时间窗口过短 |
| COURSE_RESULT / COURSE_RECORDS | 首个错误事务 ID | 对照 golden,转到第五章故障定位 |
| COURSE_BUSY | 该 build 中是否仍有活动运行 | 等待或按站点流程结束;确认无活动进程后处理残留锁 |
典型故障:工具退出为零但测试没有完成
某些运行脚本到固定时刻就 exit,工具可以正常退出,但业务序列尚未排空。如果仅根据进程退出码判断,短测试会被错误记录为通过。本站调度器额外要求 result.json、足够数量的事务以及正确内容;这三个条件任何一个缺失都会失败。
完成检查
- 软件商业基线与黄金序列一致
- SA 日志有真实硬件执行证据并且 64 笔结果通过
- 运行目录完整,失败与成功证据均未覆盖
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Running and Debugging Designs on Palladium · WXE 24.05
第 49–53 页:xrun 的隐式 debug/host、Run 模式与 swap。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
- XE Command Reference Manual · WXE 24.05
第 1418、1440–1443 页:xc free、xc off 与 xc on。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
继续阅读
硬件仿真首次使用前的工程检查清单
准备版本、输入和模型,减少第一次编译的无效往返。
如何选择 SA/ICE 及交互方式
根据测试环境所在位置与目标接口要求选择运行流程。
完成最小设计的编译运行
把第一次平台运行拆为有检查点的五个阶段。
黄河电子