适用于 FPGA 和 SoC 的UltraFast 设计方法指南(1)-UG949

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)里提取的真实翻转率,精确汇总出各个电压轨的功耗。

未完待续~~

相关推荐
明德扬1 小时前
AD9653采集模块、PCIe采集卡和完整采集系统怎么选?
fpga开发·fpga
智塑未来1 小时前
FPGA开发板选型:研发交付能力怎么看
人工智能·fpga开发
泛联新安5 小时前
FPGA功能仿真:VShark正式亮相,换仿真器不用换习惯
fpga开发·编译·仿真·嵌入式软件·代码漏洞扫描
泛联新安9 小时前
FPGA仿真加速:AccEmu正式亮相,一周的回归,一天跑完
机器学习·fpga开发·数据挖掘·回归·自动化·嵌入式软件·代码漏洞扫描
Terasic友晶科技10 小时前
【教程】Agilex 5 SOC FPGA的HPS端如何响应FPGA端中断(四)——设计中断驱动程序
fpga开发·hps·fpga端中断·设计中断驱动程序
szxinmai主板定制专家1 天前
基于 RK3588+RK1820/28 算力卡的国产工控机,适用于机器视觉,机器人等边缘算力场景
人工智能·fpga开发·zynq·控制器·mpsoc·半导体设备
unicrom_深圳市由你创科技1 天前
硬件在环(HIL)测试在FPGA项目中为什么重要?
fpga开发
嵌入式-老费1 天前
esp32开发与应用(和高云FPGA的配合)
fpga开发
156002548401 天前
基于3U VPX总线架构的VU37P FPGA高带宽HBM缓存数据处理卡(缓存带宽480GB/s)
fpga开发·架构