FPGA 连续实战 · 03 综合实现与构建证据

分阶段执行综合和布局布线,关联日志、检查点、资源报告与 ILA 配置。

先修知识掌握同步 RTL、非阻塞赋值与 FIFO;按六章顺序完成前置交付。

适用环境Basys 3 / xc7a35tcpg236-1 / 100 MHz;Vivado Tcl 参考 2024.1;Python 3、Icarus Verilog。

验证状态RTL 正常与故障仿真已验证;Vivado 综合、实现、下载和 ILA 采集须在目标环境验证。

本文目录综合与实现各自回答什么问题启用同一时钟域的 ILA执行综合与实现典型故障:IP 缺失与阶段失败

综合与实现各自回答什么问题

综合将 RTL 转换成器件逻辑,布局布线决定这些逻辑在芯片上的位置与连接。综合通过只能证明工具接受设计,不能证明物理时序满足要求。本工程将阶段分开保存,并在实现结束后生成 routed 检查点,下一章审查报告后才允许输出位流,避免把工具进度条完成误认为工程验收完成。

debug IP 和约束属于构建输入,改变它们需要重新构建。冻结源文件manifest / config综合post_synth.dcp布局布线routed.dcp报告审查下一章签核每阶段保留独立日志;失败从首条相关错误开始定位
debug IP 和约束属于构建输入,改变它们需要重新构建。(原创示意,非器件引脚图;窄屏可横向滑动)

启用同一时钟域的 ILA

调试版本创建五个探针,分别连接事务总线、复位、完成、失败和构建编号。采样时钟直接连接主时钟,不能用受复位控制的逻辑脉冲作为采样时钟。深度设置为一千零二十四点,在一百兆赫下覆盖约十点二四微秒;ILA 会占用器件资源并影响实现结果,因此需要用最终启用调试的配置检查时序。

工程检查与预期结果
输出文件用途
synth.log综合状态与首条失败原因
reports/synth_timing.rpt综合后时序估计,实际文件名见工程脚本
reports/ 下实现报告时序、DRC、CDC、例外与资源审查
routed.dcp完成布线的检查点,供生成位流使用

由 build.tcl 在 enable_ila=1 时调用,需安装对应 Vivado IP。

tcl
# 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 字符串替代审查。重复执行同一阶段时脚本拒绝覆盖已有日志,先调查失败原因,再明确归档日志重试,或从新构建名称重新开始。

  1. 执行综合

    预期与判定:synth_1 完成,生成综合报告和检查点。

  2. 检查资源

    预期与判定:顶层是 fpga_top,未意外裁剪自检器或 ILA。

  3. 执行实现

    预期与判定:impl_1 到 route_design 完成,生成 routed.dcp。

  4. 保留证据

    预期与判定:检查完整日志与 reports,进入时序审查而非直接下载。

在解压后的 fpga-course 目录执行;Vivado 步骤需本机安装并配置 PATH。

bash
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 与完整报告目录。

延伸阅读与来源

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

继续阅读

FPGA

从 RTL 到板上运行的完整流程

建立约束、实现、下载与观测的最小工程闭环。

10 分钟
FPGA

第一个工程的引脚与时钟约束

区分电气连接与时间要求,避免“能生成位流就算正确”。

11 分钟
FPGA

如何读懂时序报告

从起点、终点、时钟和裕量找出失败路径的原因。

10 分钟