编译失败时先收集哪些证据
从第一条错误判断问题属于输入、展开、综合还是资源阶段。
先修知识能获取完整构建日志。
适用环境通用 RTL 方法;具体工具与器件选项以项目版本为准
验证状态官方资料对照与原创教学示例 · 板卡 / Palladium 步骤待设备验证
保留第一条有效错误
后续错误可能只是前一项失败的连锁反应。记录完整命令、退出码、版本、顶层和首条错误前后的上下文。确认当前查看的是本次日志,而不是前一次构建留下的文件。
按阶段缩小范围
找不到文件先检查工作目录与 filelist;未定义模块检查库和宏条件;参数或端口不匹配检查展开配置;综合不支持检查行为结构;资源或分区失败查看容量报告。许可证或主机资源问题不应通过修改 RTL 来回避。
验证修复
每次只改变与证据相关的输入,用同一用例重跑。成功后从干净目录再构建一次。提交工单时附最小复现、已尝试方法和失败阶段,避免只上传一张最后几行日志的截图。
原理与信号关系
编译日志往往包含级联错误。最先出现的缺失文件、语法或展开错误可能导致后续大量端口和层级错误;应先修第一处可解释的根因,再重编译。将编译分为预处理、解析、展开和硬件映射阶段,可以判断问题是输入配置、语言使用、参数连接还是目标平台支持范围。不要通过批量屏蔽告警来“清理”日志。
动手步骤与预期结果
按下面的顺序执行,每一步都留下可复核的证据。若当前步骤的预期条件未满足,先停在该阶段定位原因;不要继续累积后续错误。涉及工具、板卡或专用硬件的步骤,需要使用本工程实际版本和配置,示例数值不能直接替代设备规格。
- 保留完整命令和退出码
预期与判定:不要只截取最后一行;若经过 tee 管道,需要确保真实工具退出码没有被覆盖。
- 定位首条相关错误
预期与判定:连同前后上下文阅读,确认错误属于哪个阶段;先处理文件缺失与顶层选择。
- 缩小到最小复现
预期与判定:保留触发问题的模块、参数与宏,移除无关业务逻辑;先在软件编译器复核语言问题。
- 单项修改后干净重建
预期与判定:使用新的构建目录确认不是缓存;检查原失败消失且没有引入新的宽度或映射问题。
Bash 运行骨架;将实际编译命令作为参数传入,不适用于不支持 pipefail 的 sh。
#!/usr/bin/env bash
set -euo pipefail
if [ "$#" -eq 0 ]; then
echo "usage: bash compile-log.sh <compiler> <args...>" >&2
exit 2
fi
"$@" 2>&1 | tee compile.log典型故障:从现象到复测
下面的案例是为说明定位方法而构造的教学场景,不代表真实客户事故或本平台设备实测。实践时先确认现象与证据相符,再采用相应修复;若证据不同,应回到前一步缩小范围,避免把同一种表象都归因于同一个问题。
完成检查
- 明确首个失败阶段
- 输入版本可追溯
- 干净构建确认修复
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
继续阅读
排障复位释放后设计不运行
按时钟、复位、使能、输入握手的顺序定位停滞。
仿真通过但硬件结果不一致
从输入、初始化、语义和跨域行为建立差异清单。
为什么没有捕获到需要的波形
检查窗口、触发、可见性和数据完整性。
黄河电子