FPGA 连续实战 · 03 综合实现与构建证据
分阶段执行综合和布局布线,关联日志、检查点、资源报告与 ILA 配置。
先修知识掌握同步 RTL、非阻塞赋值与 FIFO;按六章顺序完成前置交付。
适用环境Basys 3 / xc7a35tcpg236-1 / 100 MHz;Vivado Tcl 参考 2024.1;Python 3、Icarus Verilog。
验证状态RTL 正常与故障仿真已验证;Vivado 综合、实现、下载和 ILA 采集须在目标环境验证。
综合与实现各自回答什么问题
综合将 RTL 转换成器件逻辑,布局布线决定这些逻辑在芯片上的位置与连接。综合通过只能证明工具接受设计,不能证明物理时序满足要求。本工程将阶段分开保存,并在实现结束后生成 routed 检查点,下一章审查报告后才允许输出位流,避免把工具进度条完成误认为工程验收完成。
启用同一时钟域的 ILA
调试版本创建五个探针,分别连接事务总线、复位、完成、失败和构建编号。采样时钟直接连接主时钟,不能用受复位控制的逻辑脉冲作为采样时钟。深度设置为一千零二十四点,在一百兆赫下覆盖约十点二四微秒;ILA 会占用器件资源并影响实现结果,因此需要用最终启用调试的配置检查时序。
| 输出文件 | 用途 |
|---|---|
| synth.log | 综合状态与首条失败原因 |
| reports/synth_timing.rpt | 综合后时序估计,实际文件名见工程脚本 |
| reports/ 下实现报告 | 时序、DRC、CDC、例外与资源审查 |
| routed.dcp | 完成布线的检查点,供生成位流使用 |
由 build.tcl 在 enable_ila=1 时调用,需安装对应 Vivado IP。
# Called from build.tcl in the project. Version follows the Vivado 2024.1 IP example.
create_ip -name ila -vendor xilinx.com -library ip -version 6.2 -module_name ila_course
set_property -dict [list CONFIG.C_NUM_OF_PROBES {5} CONFIG.C_DATA_DEPTH {1024} \
CONFIG.C_PROBE0_WIDTH {64} CONFIG.C_PROBE1_WIDTH {1} CONFIG.C_PROBE2_WIDTH {1} \
CONFIG.C_PROBE3_WIDTH {1} CONFIG.C_PROBE4_WIDTH {32}] [get_ips ila_course]
generate_target all [get_ips ila_course]
执行综合与实现
按照顺序运行两个阶段,并检查脚本的阶段完成标志。原始工具日志保留完整内容,外层成功信息只代表该阶段正常退出;不能用搜索到某个 PASS 字符串替代审查。重复执行同一阶段时脚本拒绝覆盖已有日志,先调查失败原因,再明确归档日志重试,或从新构建名称重新开始。
- 执行综合
预期与判定:synth_1 完成,生成综合报告和检查点。
- 检查资源
预期与判定:顶层是 fpga_top,未意外裁剪自检器或 ILA。
- 执行实现
预期与判定:impl_1 到 route_design 完成,生成 routed.dcp。
- 保留证据
预期与判定:检查完整日志与 reports,进入时序审查而非直接下载。
在解压后的 fpga-course 目录执行;Vivado 步骤需本机安装并配置 PATH。
python3 flow.py vivado baseline synth
# 预期:FPGA_STAGE_PASS synth (not board verification)
python3 flow.py vivado baseline impl
# 预期:FPGA_STAGE_PASS impl (not board verification)
# 检查 build/baseline/synth.log 和 impl.log
# FPGA_STAGE_COMPLETE 由 Tcl 阶段成功结束时写入典型故障:IP 缺失与阶段失败
启用 ILA 后若报告找不到模块,先确认 IP 创建与输出产品生成是否成功,再检查 fileset 定义和编译顺序。工具安装路径、版本及可用器件支持也会影响工程建立。阶段失败时最末尾的失败摘要通常不是根因,应回到日志中最早与本次失败相关的错误,修复后在新构建中保留完整过程。
完成检查
- 综合与实现日志都保留且阶段完整。
- ILA 配置与最终实现一致。
- 取得 routed.dcp 与完整报告目录。
延伸阅读与来源
本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。
- Digilent Basys 3 Master XDC
板卡引脚参考;使用前核对实物版本。
- AMD UG906 · Check Timing
区分内部未约束路径与异步外部端口。
- AMD UG908 · Programming and Debugging
Hardware Manager、ILA 与采集窗口。
继续阅读
FPGA从 RTL 到板上运行的完整流程
建立约束、实现、下载与观测的最小工程闭环。
第一个工程的引脚与时钟约束
区分电气连接与时间要求,避免“能生成位流就算正确”。
如何读懂时序报告
从起点、终点、时钟和裕量找出失败路径的原因。
黄河电子