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、硬件执行统计和站点资源记录判定。不要把模拟器成功跑完误报为硬件验证成功。

首次 SA 运行顺序软件初始化0–40 ns 复位swap-inSA Run64 笔事务交错读写双重检查TB + CSV工具成功、硬件执行、功能通过分别留证据
首次 SA 运行顺序(原创示意,非器件引脚图;窄屏可横向滑动)

启动脚本逐行解释

run_sa.tcl 先推进 40 ns,让软件模拟器执行四个有效时钟边沿并初始化 DUT 状态。Testbench 在 41 ns 解除复位,避免与下降沿驱动器发生竞争。xc on -run 请求把 DUT 切换到硬件,后续 run 推进并完成用例。时钟仍来自软件 Testbench,这是一条信号交互基线;不能直接把 -run 改成 -tbrun 或 -autorun 并期望语义不变。

xrun 的 SA 命令解释器;软件阶段初始化后切换硬件。此脚本尚待商业工具与设备验证。

Tcl
# 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 内加锁,禁止两个运行互相覆盖日志和结果。运行编号必须唯一,失败也应保留,不能通过复用成功目录隐藏失败。

  1. 执行 sim01

    预期与判定:商业软件结果应与本地黄金一致;不一致时先停在软件语义层排查。

  2. 执行 sa01

    预期与判定:从 build/sa 中启动 xrun -R;审查 swap-in 和硬件执行证据。

  3. 逐笔比较 CSV

    预期与判定:64 笔顺序和值全部一致;若长度不同,先检查结束条件而非忽略多余行。

  4. 归档结果与平台证据

    预期与判定:保存 run.json、result.json、run.log、CSV 及资源记录,再进入波形章节。

在解压后的 palladium-course 工程根目录执行。标为硬件步骤的命令需在已配置的授权 Linux 环境验证。

Bash
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,但核心验收仍包含完整事务序列与零差异。

业务输出为同工程的预期值,硬件侧尚未实测。不会把模拟器输出冒充厂商运行记录。

Text
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.jsonstatus、事务数、mismatches、cycles不证明许可证或硬件身份
transactions.csv逐笔顺序与数据不覆盖未测试协议场景
run.json命令、输入摘要、工具路径、墙钟时间run_wall_s 不是硬件 MHz
资源释放会话结束与站点资源状态xc off 单独不等于释放硬件

常见运行错误:定位第一处异常

将错误按启动、swap、复位、业务和退出分层处理。COURSE_* 由本包产生,厂商错误应保留原文,不要用网络上的另一版本编号替代解释。遇到卡住,先确认是否有时钟推进和合法会话,不要随意切换运行模式或关闭检查器;保留失败输入后才做单项修改。

运行故障处理表
现象 / 本包标识优先证据处理与复测
swap-in 因 X/Z 或初始化失败复位窗口、未驱动输入、存储状态确认 40 ns 软件初始化与 DUT 清零;不用 xt0 隐藏未知值
COURSE_TIMEOUTsent/received 与时钟是否推进检查驱动与 full/empty,不只扩大超时
COURSE_NO_RESULT是否执行到 COURSE_DONE检查错误 snapshot、提前 exit 或时间窗口过短
COURSE_RESULT / COURSE_RECORDS首个错误事务 ID对照 golden,转到第五章故障定位
COURSE_BUSY该 build 中是否仍有活动运行等待或按站点流程结束;确认无活动进程后处理残留锁

典型故障:工具退出为零但测试没有完成

某些运行脚本到固定时刻就 exit,工具可以正常退出,但业务序列尚未排空。如果仅根据进程退出码判断,短测试会被错误记录为通过。本站调度器额外要求 result.json、足够数量的事务以及正确内容;这三个条件任何一个缺失都会失败。

完成检查

  • 软件商业基线与黄金序列一致
  • SA 日志有真实硬件执行证据并且 64 笔结果通过
  • 运行目录完整,失败与成功证据均未覆盖

延伸阅读与来源

本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。

继续阅读

硬件仿真

首次使用前的工程检查清单

准备版本、输入和模型,减少第一次编译的无效往返。

10 分钟
硬件仿真

如何选择 SA/ICE 及交互方式

根据测试环境所在位置与目标接口要求选择运行流程。

11 分钟
硬件仿真

完成最小设计的编译运行

把第一次平台运行拆为有检查点的五个阶段。

10 分钟