02 · 从黄金仿真到 SA 编译
沿用第一章的 RTL 与 Testbench,建立独立商业仿真和硬件编译产物,审查映射边界。
先修知识能读 Verilog 与基本 shell 命令;按本系列前序章节完成对应验收。
适用环境统一工程 course_fifo / tb_top;SA Run 基线;命令依据 WXE 24.05,工具配对及资源配置以站点验证为准。
验证状态原创 RTL 与脚本已软件测试;Cadence 编译、硬件执行与 trace 待目标设备验证。
本文目录
本章输入与编译路线配置示例:文件清单与硬件顶层四个阶段的验收,不只看最后一行复位和初始化为何在本章就要审查预期产物与防止旧 snapshot 混入常见编译错误与处理顺序典型故障:模块名与实例路径混淆本章输入与编译路线
输入是第一章通过的源文件、黄金 CSV 和站点环境。本章固定使用 xrun 一体化编译入口:软件编译先建立商业模拟器基线,再增加硬件选项生成 SA 产物。教程不同时混用 vlan、xmvlog、ixcom 的多步链,也不手工拼接不同构建中的 worklib 或 snapshot。手册给出多种路线,并不意味着这些路线的中间文件可以随意组合。
配置示例:文件清单与硬件顶层
files.f 只有两条源路径,顺序是 DUT 在前、Testbench 在后。flow.py 会将路径转换为供对应构建目录使用的绝对路径并加引号。-top tb_top 选整个测试的顶层,+dut+course_fifo 则选进入硬件的模块名,不能将它误写为实例路径 tb_top.dut_i。所有时钟延迟、文件操作与检查器都留在软件侧,DUT 不依赖跨层 deposit 或 force。
编译选项依据 TBA Tutorial 的 xrun 路线;站点必须确认其所装配对支持这些选项。不要在项目根目录误用构建目录的命令。
# files.f
rtl/course_fifo.sv
tb/tb_top.sv
# flow.py 在各自 build 目录生成并执行的命令形态
xrun -64 -sv -top tb_top -c -f files.f
xrun -64 -sv -top tb_top -c -f files.f -hw -ua +dut+course_fifo四个阶段的验收,不只看最后一行
预处理阶段看文件和宏,展开阶段看顶层、位宽和层次,映射阶段看硬件模块及支持范围,生成产物阶段看 snapshot 与数据库归属。COMPILE_OK 是调度器确认子进程退出为零后的提示,不是映射报告已审阅的替代品。对警告逐项分类,尤其留意被裁剪逻辑、未驱动输入、存储实现以及不支持的语句。
- 编译商业软件基线
预期与判定:build/sim 内有本次命令、输入摘要和 compile.log;尚未代表功能运行通过。
- 编译 SA
预期与判定:build/sa 独立生成;日志显示进入硬件编译流程,不沿用 sim 目录。
- 检查硬件边界
预期与判定:确认 course_fifo 进入硬件,tb_top 激励与检查器留在模拟器;关注内存与计数逻辑。
- 保存 build.json 与报告
预期与判定:源摘要、工具路径与站点信息完整,之后运行由该目录启动。
在解压后的 palladium-course 工程根目录执行。标为硬件步骤的命令需在已配置的授权 Linux 环境验证。
python3 flow.py compile sim
python3 flow.py compile sa
# 查看以下文件:
# build/sim/compile.log build/sim/build.json
# build/sa/compile.log build/sa/build.json复位和初始化为何在本章就要审查
硬件 swap-in 需要状态可解释。本课程在同步复位中明确清零指针、计数、dout 和 4 个存储字;SA 运行脚本先在软件侧运行 40 ns 完成复位,随后切换到硬件。这里的小存储可作为寄存器数组教学,不能把逐字复位当作大型 SRAM 的通用实现方案。遇到未知值,先排查驱动与初始化,不通过 xt0 或 piok 默默掩盖问题。
节选自本包 course_fifo.sv。4 字固定数组的教学初始化,不适用于未经评估的大存储映射。
if (rst) begin
wp <= 0; rp <= 0; count <= 0; dout <= 0;
for (k=0; k<4; k=k+1) mem[k] <= 0;
end预期产物与防止旧 snapshot 混入
build.json 保存实际命令数组、源文件 SHA256、工具解析路径、站点说明和编译退出码。后续 run 会核对这些信息:修改源码后不允许继续使用旧产物,改变工具路径或站点记录也会拒绝运行。目录存在时调度器不覆盖它,需先明确归档再重建;失败编译的目录同样保留,以免删除最有用的诊断日志。
这是预期结构示意,不是已取得的 Cadence 输出。硬件编译尚待站点执行。
COMPILE_OK: .../build/sim (tool exit only; review mapping reports separately)
COMPILE_OK: .../build/sa (tool exit only; review mapping reports separately)
# build.json 结构节选;尖括号仅表示实际生成的值
{"target":"sa","bug":false,"inputs":{"rtl/course_fifo.sv":"<sha256>"},
"command":["<xrun-path>","-64","-sv","..."],"exit_code":0}常见编译错误与处理顺序
下表按根因类别列出处理方法,不伪造厂商报错编号。完整错误文字随工具版本不同,先读取 compile.log 中第一条与失败相关的信息,连同前后上下文确认阶段。修复后在明确的新构建中重试,避免只让增量缓存掩盖问题。失败产物禁止进入运行或性能统计。
| 现象 / 本包标识 | 证据 | 修复 |
|---|---|---|
| 找不到源文件 / include | 编译日志中的解析路径 | 检查 files.f 和生成的绝对路径,不依赖 shell 当前目录 |
| 顶层找不到或硬件模块为空 | -top 与 +dut+ 的实际参数 | 分别使用 tb_top 和 course_fifo,核对模块定义 |
| 硬件不支持延迟或文件 I/O | 错误指向 tb_top 中行为 | 检查是否误把 Testbench 作为硬件顶层 |
| COURSE_BUILD_EXISTS | 已有 build 目录 | 保留日志并明确归档,再重新 compile |
| COURSE_STALE_BUILD | 编译后源码摘要变化 | 重新编译同一份输入,不手工篡改摘要文件 |
典型故障:模块名与实例路径混淆
本工程只有一个 DUT 实例,但仍需要区分模块定义名与层次路径。配置错误可能让工具找不到硬件顶层,也可能使调试探针指向不存在的对象。先把编译日志、展开层次和命令中的三个名称放在一起检查,修复后确认软件与硬件的边界与第一章设计一致。
完成检查
- sim 与 sa 产物分目录,输入摘要一致
- -top 和 +dut+ 分别正确,映射报告已审阅
- 所有不支持行为与初始化问题有明确处理记录
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Getting Started with TBA on Palladium · WXE 24.05
第 19–22 页:xrun -hw/-ua/+dut+、多步路线与分割陷阱。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
- XE Command Reference Manual · WXE 24.05
第 1441–1443 页:swap-in、未完成初始化与未知值处理。 页码为本次查阅版本的印刷页码;公开链接通向厂商入口,受限原手册不在本站分发。
继续阅读
硬件仿真首次使用前的工程检查清单
准备版本、输入和模型,减少第一次编译的无效往返。
如何选择 SA/ICE 及交互方式
根据测试环境所在位置与目标接口要求选择运行流程。
完成最小设计的编译运行
把第一次平台运行拆为有检查点的五个阶段。
黄河电子