仿真通过但硬件结果不一致

从输入、初始化、语义和跨域行为建立差异清单。

先修知识有仿真通过基线和硬件失败证据。

适用环境通用 RTL 方法;具体工具与器件选项以项目版本为准

验证状态官方资料对照与原创教学示例 · 板卡 / Palladium 步骤待设备验证

本文目录把比较条件对齐寻找第一个差异以证据区分功能与实现原理与信号关系动手步骤与预期结果典型故障:从现象到复测

把比较条件对齐

核对 RTL、参数、宏定义、初始化文件和测试数据。确认仿真中被强制赋值的对象在硬件环境也有合法来源。把比较对齐到协议事件或设计周期,而非直接比较真实时间。

寻找第一个差异

从输出错误回溯到第一个内部状态差异,优先排查未初始化状态、复位释放、存储器读写语义、时序约束与 CDC。仿真中稳定的 X 处理或理想时钟关系可能隐藏硬件问题。

以证据区分功能与实现

若差异在确定输入下稳定复现,先最小化逻辑和模型;若与温度、频率或实现结果相关,检查时序和跨域。更改频率只可作为诊断实验,不能自动证明根因或修复完成。

原理与信号关系

两个环境的差异应从第一笔不一致的事务开始定位。先比较输入、参数、初始化和复位,再比较执行语义;否则可能在不同设计上寻找同一个 bug。软件仿真中的 X、未初始化存储、阻塞赋值竞争和任意延迟不能被默认解释成硬件行为。对比应明确是逐周期、逐事务还是最终摘要,不能混用判定粒度。

仿真通过但硬件结果不一致:关键关系输入对齐版本 / 参数 / seed复位对齐初始化条件事务对齐ID / 次序首个差异值 / 时刻 / 状态先证明两次运行的输入等价,再分析执行结果
仿真通过但硬件结果不一致:关键关系(原创示意,非器件引脚图;窄屏可横向滑动)

动手步骤与预期结果

按下面的顺序执行,每一步都留下可复核的证据。若当前步骤的预期条件未满足,先停在该阶段定位原因;不要继续累积后续错误。涉及工具、板卡或专用硬件的步骤,需要使用本工程实际版本和配置,示例数值不能直接替代设备规格。

  1. 核验输入身份

    预期与判定:比较源摘要、展开参数、初始化文件和测试种子,确认两次使用同一个用例。

  2. 导出轻量事务记录

    预期与判定:每笔包含序号、输入、输出和状态;允许延迟不同的环境按事务 ID 对齐。

  3. 定位第一个差异

    预期与判定:回看这一笔之前的复位、握手和存储操作;后续错误可能都是级联结果。

  4. 构建最小回归

    预期与判定:在软件与目标环境都加入触发该问题的短用例,修复后同时通过。

逐行比较两个原创事务日志,日志需提前按同一事务顺序规范化;不适用于直接比较原始波形时间戳。

Python
from pathlib import Path
from itertools import zip_longest
a = Path("golden.txt").read_text().splitlines()
b = Path("actual.txt").read_text().splitlines()
for i, (x, y) in enumerate(zip_longest(a, b), 1):
    if x != y:
        raise SystemExit(f"first mismatch at record {i}: {x!r} != {y!r}")
print("PASS: identical transaction records")

典型故障:从现象到复测

下面的案例是为说明定位方法而构造的教学场景,不代表真实客户事故或本平台设备实测。实践时先确认现象与证据相符,再采用相应修复;若证据不同,应回到前一步缩小范围,避免把同一种表象都归因于同一个问题。

完成检查

  • 输入和构建已对齐
  • 找到第一个差异点
  • 修复经过原失败条件回归

延伸阅读与来源

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

继续阅读

排障

编译失败时先收集哪些证据

从第一条错误判断问题属于输入、展开、综合还是资源阶段。

10 分钟
排障

复位释放后设计不运行

按时钟、复位、使能、输入握手的顺序定位停滞。

10 分钟
排障

为什么没有捕获到需要的波形

检查窗口、触发、可见性和数据完整性。

10 分钟