1. 系统级设计流程(图 1:面向 FPGA 和 SoC 的系统级设计流程)
这张图展示了一个完整的工程从零到落地包含哪些环节:
系统设计输入(顶层筹划):
-
可以写传统的 RTL(Verilog/VHDL)。
-
可以用 C/C++(HLS 高层次综合) 或 MATLAB/Simulink(Model Composer) 自动生成算法模块。
-
组合各种 AMD/第三方 IP 核 和嵌入式处理器(如 MicroBlaze 或 ARM 内核)。
实现(Vivado 核心干活阶段):
-
逻辑仿真:在代码跑进芯片前,验证逻辑对不对。
-
分配约束与综合:给设计施加时钟/脚位约束,把代码转成门级网表。
-
实现(布局布线):把电路图放到具体的 FPGA 物理芯片结构里去走线。
-
时序收敛:检查能不能跑在要求的频率(如 205.88MHz/491.52MHz 等)下。
软件开发与硬件调试:
将硬件描述导出给软件开发工具(Vitis),在 ARM/Soft IP 上跑 C 开发应用,最后抓比特流(Bitstream)进行板级上电调试。

Verilog 在 Vivado(或 ModelSim/VCS)里仿真;C/C++ 在软件 IDE 或 Vitis HLS 里跑 C Simulation 验证;MATLAB 在 MATLAB/Simulink 环境下验证。验证无误后,分别通过 Vitis HLS 和 Model Composer 自动翻译成 Verilog IP。但是自动转译出来的 RTL 面积(LUT/FF)通常比手写 Verilog偏大,原因如下:
通用性开销(Overhead)与标准接口: 自动生成的 IP 为了适配 Vivado 系统的标准化(如 AXI4-Lite、AXI4-Stream 协议),必须自动包裹一层完整的握手控制逻辑、状态机和寄存器接口。而工程师手写 Verilog 时,往往会根据实际需求极度裁剪接口,省去不必要的握手信号。
保守的状态机与状态恢复: 编译器(如 HLS)为了保证 100% 的功能安全,生成的控制器(FSM)包含了非常严密的异常处理和死锁预防机制,会插入额外的逻辑门。
流水线(Pipelining)与资源换性能:
高层次转换工具为了达到设定的目标时钟频率(如 491.52MHz),会自动在组合逻辑之间大量插入打拍寄存器(Flip-Flops)或将乘法展开。它是典型的"用面积(FF/LUT)换频率(时序裕量)"。
2. 核心金字塔法则:设计变更越早,性价比越高(图 2)
-
在 HLS / C / C++ 阶段改设计 →1000x 收益:改动算法架构(比如把串行计算改成并行流水线),性能提升是数量级的。
-
在 RTL / 综合阶段改代码 → 10x 收益:改写 Verilog 逻辑、加一级 Register 打拍(Pipelining)、修改复位结构,性能提升很显著。
-
在布局布线(Place)阶段改策略 →1.2x 收益:让 Vivado 换个工具算法跑策略,提升微乎其微。
-
在布线(Route)阶段 → 1.1x 收益:基本就是死碰运气,工具尽力了。
指导思想 :如果综合后时序严重违例(WNS 是大负数),千万不要 指望靠 Vivado 布线工具跑几晚上的不同 Strategy 帮你收敛,一定要退回改 RTL 代码或重写约束。

这里的收益核心指的就是"时序收敛(Timing Closure)的收益" (同时也涵盖资源利用率/面积 optimization)。
3. 正确的"迭代与收敛"闭环(图 3:实现快速收敛的 RTL 设计方法)
写完 RTL 后:先跑综合(Synthesis),并检查基础选项与代码。
定义并优化约束:
-
用
report_clock_networks看时钟树。 -
用
create_clock定义主时钟,用create_generated_clock定义衍生时钟。 -
用
set_clock_groups/set_false_path明确异步时钟域隔离(伪路径)。 -
设置 I/O 延迟与时序例外。
检查时序(Timing Check):
-
如果综合后的时序不可接受 →绝对不要直接去跑"布局布线"!利用 Vivado 的交叉探测(Cross-Probing)功能,直接从网表视图回溯到 RTL 关键路径(Critical Path)改代码。
-
**如果时序基本满足(有 Margin 或微小违例)→**再进入布局布线阶段。

4、早期快速确认(Early Validation)
-
接口带宽确认:在写大量逻辑前,先确认芯片物理 I/O 带宽和内存总线带宽(如 AXI 总线)能否扛住数据吞吐量。
-
设计基线设定(Baselining):先用最基础的伪约束/简单约束跑一次,看看器件内部的延迟极限,验证目前的 RTL 微架构(Micro-architecture)深度是否可行。
总结给工程落地的启示
1.约束要先写且写对:Vivado 是"时序驱动"的工具,不给它正确的约束(比如漏写 create_clock 或漏设异步时钟域),工具就会盲目优化,结果全是虚假违例。
2.综合阶段定生死:综合完出来 report 发现 WNS(最差时序裕量)差得离谱时,早点回 RTL 里去加流水线打拍(Pipelining),比后面卡在布线阶段折腾强得多。
开发板和器件规划
核心讲述的是:在正式动手写代码或画 PCB 板之前,如何从系统工程的角度对开发板、芯片管脚、电源和散热进行前期规划,以保证后续的电路能跑在高频、时序容易收敛、且硬件不会烧毁。
1、PCB 布局与管脚规划(I/O Planning)
与物理组件保持一致(缩短走线):
GT 高速接口与外设(如 DDR、光口、PCIe) 在 PCB 上的物理位置,决定了 FPGA 引脚该怎么分配。
原则:高速信号要直接连接,走线越短越好,减少打过孔(Via),避免信号经过整个 BGA 阵列交叉拉线,以保障信号完整性。
利用 Vivado "I/O Planning" 视图:
利用图形化工具查看芯片的 Package 和 Device 视图,直观看到各个 Bank 的分布、内部资源以及 Pin 脚的物理位置。

2、电源系统(PDS)与功耗预算
FPGA 和普通单片机不同,它的功耗根据你跑的算法逻辑量和时钟频率剧烈变化,且有严格的上电时序要求。
功耗估算(XPE / PDM) :在项目初期(甚至还没写 RTL 时),必须使用 Xilinx Power Estimator (XPE) 或 PDM 工具估算设计的功耗,用于指导电源芯片选型。
功耗的四种形态:
-
上电功耗(Inrush):芯片刚上电瞬态的峰值电流。
-
启动功耗(Startup):配置/加载 Bitstream 期间的功耗。
-
静态功耗(Static/Giga):芯片配置完成但无时钟翻转时的待机功耗(与结温成正比)。
-
动态功耗(Dynamic):逻辑门高速翻转(High/Low 切换)消耗的功耗,是系统运行时的功耗大头。
PDN 仿真:
强调使用 SIMPLIS 等工具对电源去耦网络(PDN)做仿真,确保电源轨的纹波和噪声符合要求。
3、热处理与散热解决方案(Thermal Management)
结温(Junction Temperature, T_j)控制:
- 芯片结温越低,静态功耗就越低。如果散热不好,温度升高会导致功耗暴涨,进而形成恶性循环(热逃逸)。
热仿真与热阻计算 :
物理量含义:
-
T_j(Junction Temperature):结温,即 FPGA 内部硅芯片(Die)的最热工作温度。
-
T_a(Ambient Temperature):环境温度,即机箱内或板卡周围的空气温度。
-
Power Dissipated:芯片耗散的功耗(单位:瓦特 W)。
-
ΘJA(Thermal Resistance):有效热阻(单位:℃/W),代表每产生 1 瓦功耗,芯片内部温度会比环境温度高出多少度。
无盖封装(Lidless Package) 的优势(散热器可以直接接触裸片 Die,热阻小)。
什么是无盖封装?
结构:厂家在出厂时只在裸片周围加了一圈黑色的刚性环(Stiffener Ring)来提供机械支撑,中间的硅裸片(Die)是直接露出来的。
散热过程 :散热器加上一层导热介质(TIM1.5)后,直接贴在硅芯片裸片上。少了一层 TIM 和金属盖,热阻大幅降低,散热效率提升极高。
有盖封装(Lidded Device):
-
结构:裸片(Die)→内部导热介质(TIM1) → 金属盖子(LID)→外部导热介质(TIM2) →散热器。
-
缺点 :热量需要通过两层 TIM 介质和一层金属盖,中间热阻大。

约束闭环:
- 将估算出的结温和热阻参数,通过 XDC 约束(如
set_operating_conditions)写入 Vivado,让工具在综合和实现时考虑最坏情况下的功耗与时序表现。通常在入门或编写基础 Verilog 代码时,不写这项约束也能编译通过,因为 Vivado 会自动加载芯片型号的默认环境参数(通常默认结温为 ,热阻也是默认值)。
但在高端芯片(如 UltraScale+、Versal)或者高功耗、恶劣温度环境(如工业级 或军工级 )的项目中,显式约束结温是实现"时序闭环"的关键一步。
管脚分配(Pin Planning)设计流程
提前 DRC 检查:
- 在 Vivado 里可以在 RTL 前(Pin Planning 工程) 或 基于网表 进行 SSN(同步开关噪声)分析与 DRC(设计规则检查)。
管脚兼容性(Footprint Migration):
- 规划管脚时,要考虑未来如果算法升级要换同封装更大/更小型号的 FPGA 时,PCB 能否兼容,避免板子重新打样。
在实际开发中,功耗是怎么算出来的?(XPE →PDM→Vivado)
阶段一:原理图设计前(无代码阶段)→使用 XPE / PDM
-
使用 AMD 官方提供的 XPE(Xilinx Power Estimator) Excel 表格或全新的 PDM(Power Design Manager) 软件。
-
手动输入预估的资源使用率(如:用 60% 的 LUT、50% 的 BRAM、开 4 路 10Gbps 的 GT),软件内部的模型会帮你算出各项功耗,用于设计电源 PCB。
阶段二:编写代码并跑通版本(有代码阶段)→ Vivado Power Report
-
在 Vivado 里完成布局布线(Place & Route)后,运行 Report Power。
-
原理:Vivado 已经知道了你设计里每一个 LUT 和 FF 的真实分布、布线寄生电容,再配合你在 XDC 约束里给出的时钟频率以及仿真文件(SAIF)里提取的真实翻转率,精确汇总出各个电压轨的功耗。
未完待续~~