HDL、仿真与 FPGA¶
HDL 描述的是并发硬件结构,不是按顺序运行的软件。FPGA 工具只是实现载体;先在与厂商无关的仿真中证明功能,再用综合、约束和时序分析证明实现满足目标。
目的与学习成果¶
- 区分组合逻辑、时序逻辑和仿真专用结构;
- 编写自检查测试平台,而不是只查看波形;
- 处理复位、时钟域交叉、亚稳态和参数边界;
- 阅读综合资源、锁存器警告和静态时序报告;
- 保存无需真实板卡也能复现的验证证据。
最小环境¶
- 一个 HDL 编译/仿真器与波形查看器;
- 可脚本执行的测试入口;
- 一个支持的 HDL 子集和明确的时钟目标;
- 可选 FPGA 板与厂商实现工具,核心练习不依赖板卡。
记录语言标准、仿真器、综合器和器件目标的实际版本。不要把某个厂商界面步骤当作设计规范。
学习顺序¶
- 组合逻辑:实现编码器或 ALU,给所有路径赋值,避免意外锁存。
- 时序逻辑:用单一时钟边沿更新状态,明确同步或异步复位语义。
- 自检查测试:以输入序列、参考模型和断言自动判定通过/失败。
- 状态机:分离状态转移与输出逻辑,测试非法状态和复位恢复。
- 时序接口:学习握手、流水线和跨时钟域的结构化方案。
- 实现:添加引脚与时钟约束,综合、布局布线并阅读最差路径。
验证任务:带握手的参数化 FIFO¶
实现一个小型同步 FIFO:
- 写出深度、数据宽度、满/空语义和同时读写规则;
- 用参数覆盖最小深度、非二次幂边界或明确限制;
- 建立参考队列并随机生成合法操作;
- 加入断言,检查溢出、下溢、顺序和复位;
- 故意制造指针错误,确认测试必须失败;
- 综合两个参数配置,比较资源并检查时序约束。
验收要求自动测试在固定种子下可重放,零意外锁存/未驱动信号,并保存最差时序裕量或未约束路径为零的证据。
常见失败与排查¶
- 仿真正确、综合不同:检查不可综合结构、未完整赋值、初始化和竞争。
- 波形有未知值:追踪未复位寄存器、多驱动、越界索引和未连接输入。
- 板上偶发错误:检查亚稳态、时钟域交叉、约束与外部信号同步。
- 时序“通过”但有未约束路径:补齐时钟、输入输出延迟和例外理由。
- 复位释放后异常:分析复位跨域与解除同步,不只延长复位时间。
- 随机测试每次不同:记录种子,并保留最小化后的失败序列。
可复现证据¶
- RTL 源码、参数和接口时序说明;
- 测试平台、参考模型、断言与固定种子;
- 批处理仿真命令和通过/失败摘要;
- 关键波形仅作为诊断补充;
- 综合资源、警告处置和时序摘要;
- 约束文件、器件/板卡目标与工具版本;
- 已知跨域、复位和硬件依赖。
成本、许可与无障碍¶
功能验证可完全用自由仿真工具和通用 RTL 完成。厂商工具与板卡仅在实现阶段需要;检查免费额度、器件支持、下载体积和许可证。不要公开受限 IP 核或加密网表。
测试结果应提供文本摘要,状态不能只靠波形颜色。波形信号使用清晰分组和语义名称,并以文字描述失败周期。没有板卡的学习者可用仿真和实现报告完成同一功能目标。
安全边界¶
- 上板前核对 I/O 电压、引脚、方向、上拉和时钟来源;
- 不把未验证逻辑直接连接电机、功率级、激光或射频发射器;
- 输出在复位、配置和失锁状态下应有安全默认值;
- 时序通过不证明外部电气接口安全;
- 涉及高速接口时遵守板卡额定值并使用合适测量方法。
完成清单¶
- 组合与时序逻辑边界明确。
- 测试平台自动判定结果并可固定种子重放。
- 边界、复位、满空和故障路径均被测试。
- 没有未解释锁存、多驱动或未驱动警告。
- 约束完整且不存在未解释的未约束路径。
- 资源与时序报告随目标配置保存。
- 工具、目标器件、许可与限制已记录。
- 板级输出具备安全默认状态。