跳转至

HDL、仿真与 FPGA

HDL 描述的是并发硬件结构,不是按顺序运行的软件。FPGA 工具只是实现载体;先在与厂商无关的仿真中证明功能,再用综合、约束和时序分析证明实现满足目标。

目的与学习成果

  • 区分组合逻辑、时序逻辑和仿真专用结构;
  • 编写自检查测试平台,而不是只查看波形;
  • 处理复位、时钟域交叉、亚稳态和参数边界;
  • 阅读综合资源、锁存器警告和静态时序报告;
  • 保存无需真实板卡也能复现的验证证据。

最小环境

  • 一个 HDL 编译/仿真器与波形查看器;
  • 可脚本执行的测试入口;
  • 一个支持的 HDL 子集和明确的时钟目标;
  • 可选 FPGA 板与厂商实现工具,核心练习不依赖板卡。

记录语言标准、仿真器、综合器和器件目标的实际版本。不要把某个厂商界面步骤当作设计规范。

学习顺序

  1. 组合逻辑:实现编码器或 ALU,给所有路径赋值,避免意外锁存。
  2. 时序逻辑:用单一时钟边沿更新状态,明确同步或异步复位语义。
  3. 自检查测试:以输入序列、参考模型和断言自动判定通过/失败。
  4. 状态机:分离状态转移与输出逻辑,测试非法状态和复位恢复。
  5. 时序接口:学习握手、流水线和跨时钟域的结构化方案。
  6. 实现:添加引脚与时钟约束,综合、布局布线并阅读最差路径。

验证任务:带握手的参数化 FIFO

实现一个小型同步 FIFO:

  1. 写出深度、数据宽度、满/空语义和同时读写规则;
  2. 用参数覆盖最小深度、非二次幂边界或明确限制;
  3. 建立参考队列并随机生成合法操作;
  4. 加入断言,检查溢出、下溢、顺序和复位;
  5. 故意制造指针错误,确认测试必须失败;
  6. 综合两个参数配置,比较资源并检查时序约束。

验收要求自动测试在固定种子下可重放,零意外锁存/未驱动信号,并保存最差时序裕量或未约束路径为零的证据。

常见失败与排查

  • 仿真正确、综合不同:检查不可综合结构、未完整赋值、初始化和竞争。
  • 波形有未知值:追踪未复位寄存器、多驱动、越界索引和未连接输入。
  • 板上偶发错误:检查亚稳态、时钟域交叉、约束与外部信号同步。
  • 时序“通过”但有未约束路径:补齐时钟、输入输出延迟和例外理由。
  • 复位释放后异常:分析复位跨域与解除同步,不只延长复位时间。
  • 随机测试每次不同:记录种子,并保留最小化后的失败序列。

可复现证据

  • RTL 源码、参数和接口时序说明;
  • 测试平台、参考模型、断言与固定种子;
  • 批处理仿真命令和通过/失败摘要;
  • 关键波形仅作为诊断补充;
  • 综合资源、警告处置和时序摘要;
  • 约束文件、器件/板卡目标与工具版本;
  • 已知跨域、复位和硬件依赖。

成本、许可与无障碍

功能验证可完全用自由仿真工具和通用 RTL 完成。厂商工具与板卡仅在实现阶段需要;检查免费额度、器件支持、下载体积和许可证。不要公开受限 IP 核或加密网表。

测试结果应提供文本摘要,状态不能只靠波形颜色。波形信号使用清晰分组和语义名称,并以文字描述失败周期。没有板卡的学习者可用仿真和实现报告完成同一功能目标。

安全边界

  • 上板前核对 I/O 电压、引脚、方向、上拉和时钟来源;
  • 不把未验证逻辑直接连接电机、功率级、激光或射频发射器;
  • 输出在复位、配置和失锁状态下应有安全默认值;
  • 时序通过不证明外部电气接口安全;
  • 涉及高速接口时遵守板卡额定值并使用合适测量方法。

完成清单

  • 组合与时序逻辑边界明确。
  • 测试平台自动判定结果并可固定种子重放。
  • 边界、复位、满空和故障路径均被测试。
  • 没有未解释锁存、多驱动或未驱动警告。
  • 约束完整且不存在未解释的未约束路径。
  • 资源与时序报告随目标配置保存。
  • 工具、目标器件、许可与限制已记录。
  • 板级输出具备安全默认状态。

下一步可进入嵌入式工具链学习软硬协同,或用可复现工程自动化 HDL 回归。