FPGA/数字IC设计的时序优化

FPGA 和数字 IC 的时序优化,可以沿着一条主线理解:先确认约束正确,再分析关键路径,最后选择 RTL、架构或物理实现层面的优化方法。 优化时还要同时考虑面积、功耗、吞吐量和延迟。

下面将"数字 IC"主要按标准单元 ASIC 设计讨论。

1.先理解 Setup 和 Hold 分别在限制什么

典型同步路径是:

发送寄存器 → 组合逻辑 → 布线 → 接收寄存器

检查项 检查的本质 常见修复方向
Setup,建立时间 数据是否在捕获边沿前足够早地到达 减少逻辑或布线延迟、增加流水线
Hold,保持时间 新数据是否过早到达,破坏当前采样 增加最小数据延迟、改善时钟偏斜
Recovery / Removal 异步复位等控制信号的释放是否满足要求 规范复位释放、检查同步与时钟关系
最小脉宽 时钟或控制脉冲是否足够宽 检查时钟波形、门控和时钟生成方式

对同一时钟、同沿、单周期寄存器路径 ,令时钟偏斜

\(S=t_{\text{capture clock}}-t_{\text{launch clock}}\),可以用以下简化模型理解:

\ Slack_{\\text{setup}} =T+S-t_{CQ,\\max}-t_{data,\\max}-t_{setup}-U_{setup} \\\ Slack_{\\text{hold}} =t_{CQ,\\min}+t_{data,\\min}-S-t_{hold}-U_{hold} \\

其中,\(t_{data}\) 包括组合逻辑和布线延迟,\(U\) 表示相应的不确定度。

由此可以直接看出:

  • 降低频率通常有助于 Setup,对上述 Hold 检查通常没有直接帮助。
  • 接收时钟晚到,即正偏斜,有利于 Setup,但会压缩 Hold 裕量。
  • 数据路径变快后,Setup 可能改善,Hold 可能恶化。

实际 STA 还会考虑时钟边沿关系、工艺变化和公共时钟路径悲观修正等因素,应以工具报告为准。AMD 时序裕量分析

2.看到违例后,先把报告读明白

不要只看一个 WNS 数字。至少检查以下内容:

报告信息 需要判断的问题
Startpoint / Endpoint 是寄存器间、输入到寄存器,还是寄存器到输出?
Launch / Capture Clock 时钟关系和捕获边沿是否符合设计意图?
Requirement 路径实际有多少时间预算?是否异常苛刻?
Cell / Logic Delay 是否存在深层逻辑、长进位链或复杂选择逻辑?
Net Delay 是否存在高扇出、长距离连接或拥塞绕线?
Clock Skew / Uncertainty 时钟路径是否消耗了过多裕量?
违例路径分布 是少数局部路径,还是整片区域、整个时钟域的问题?

Vivado 中常用指标的含义:

  • WNS:最大延迟分析中最差的 slack。
  • TNS:按每个终点的最差违例汇总的负 slack。
  • WHS / THS:最小延迟分析中对应的最差值和汇总值。
  • Failing Endpoints:违例终点数量。

WNS 反映最差程度,TNS 和违例终点数反映影响范围。 综合后的布线延迟主要是估计值,最终判断需要看实现、布线后的结果。AMD 时序收敛指南、UG906 指标定义

3.约束检查应当放在优化之前

约束定义了工具要满足的外部条件,重点检查:

  • 时钟:主时钟、生成时钟、周期、相位、波形及其相互关系。
  • I/O:依据外部器件和板级时序,完整设置最大、最小输入输出延迟。
  • 不确定度:正确描述抖动和设计裕量。
  • 例外:每条 False Path、Multicycle Path 都有明确的功能依据。
  • 覆盖范围:不存在未经解释的无时钟路径和未约束终点。

几个容易混淆的点:

不同频率不代表异步;相同频率也不代表同步。 关键在于时钟之间是否存在可保证的相位关系。

False Path 只改变分析范围。 CDC 仍需要同步器、握手或异步 FIFO 等正确结构;多位总线不能简单逐位接两级寄存器后就认为数据一致。

Multicycle Path 必须符合真实采样行为。 "数据变化很慢"本身不足以证明它是多周期路径。同波形、同相位时钟下,常见配置是 Setup 为 \(N\)、Hold 为 \(N-1\);跨频率或相移时钟需要重新检查边沿关系。AMD UG903 多周期约束说明

4.RTL 和架构优化,核心是减少每一级实际承担的工作

方法 适用情况 主要代价或注意事项
增加流水线 单周期组合路径过长 增加周期延迟、寄存器和时钟负载
寄存器重定时 Retiming 相邻流水级工作量不均衡 受复位、使能、层次和保护属性限制
平衡运算树 多操作数加法、比较、归约 检查位宽、截断和数值语义
并行计算、预计算 串行依赖过深 增加面积和功耗
缩减位宽 不必要的宽运算、宽比较、宽 MUX 必须证明数值范围和精度
优化选择与译码 深层优先级链、大型多路选择器 保留原有优先级和非法输入行为
复制驱动、局部译码 高扇出控制或数据信号 增加资源,需要避免重新合并

例如,四个数求和时,可以比较串行结构

\(((a+b)+c)+d\) 与平衡结构 \((a+b)+(c+d)\) 的实现结果。综合器可能已经完成平衡,最终应检查综合网表,不能仅凭 RTL 写法推断电路层数。

增加流水线时,还要检查三个问题:

  1. 是否切在真正的长路径中间? 在组合逻辑两端额外加寄存器,不一定缩短原关键路径。
  2. 数据和控制是否对齐? valid、地址、模式、标签等需要对应延迟。
  3. 吞吐量是否保持? 流水线延迟增加,不代表每周期接收数据的能力下降;反馈环路则可能限制流水化。

反压接口还应检查 ready 等组合控制链,必要时使用寄存器切片或弹性缓冲。AMD 也强调,流水化必须同步处理新增延迟对其余设计的影响。AMD 流水线设计说明

5.FPGA 优化要结合器件的固定资源结构

FPGA 上除了逻辑层级,还要重点关注专用资源映射和连接距离:

  • DSP:检查乘法、乘加是否映射到合适的 DSP,以及内部寄存器是否有效使用。
  • BRAM / URAM:合理使用输出寄存器,避免存储器输出后紧接深层组合逻辑。
  • LUT / Carry Chain:检查算术和选择逻辑的实际映射,比较实现后的结果。
  • 高扇出网络:按模块或物理区域复制驱动,减少跨区域连接。
  • 布局与拥塞:检查局部密度、资源分布、跨 SLR 总线和绕线情况。
  • 控制集与复位:减少不必要的控制组合;允许时可通过复位有效标志管理数据通路状态。
  • 优化限制属性 :检查 DONT_TOUCH、KEEP、调试标记是否妨碍复制、合并或重定时。

高扇出优化并非复制越多越好:过度复制可能增加控制集、面积和功耗,应比较物理实现结果。AMD 高扇出网络优化说明

6.数字 IC 还可以从标准单元和时钟树层面优化

优化手段 作用 需要同时检查的代价
单元尺寸调整 改善关键节点驱动能力 输入电容、面积、动态功耗
阈值电压替换 在速度和漏电之间调整 漏电及其他路径的裕量
插入 Buffer、复制驱动 改善长线或高扇出网络 面积、功耗、拥塞
逻辑重构、引脚交换 改善关键时序弧或逻辑结构 等价性及实际延迟收益
布局、宏单元与布线调整 缩短距离、改善寄生参数 拥塞和其他路径变化
CTS 与 Useful Skew 调整时钟到达时间分配 相邻路径的 Setup / Hold

这些操作需要结合路径负载和物理结果判断。例如,放大一个单元虽然增强了输出驱动,但也增加了前级负载,不一定改善整条路径。OpenROAD 的时序修复流程也将尺寸调整、缓冲、复制和阈值电压替换等作为不同优化动作。OpenROAD 单元与时序优化文档

ASIC 最终还需要在规定的**多模式、多角条件(MCMM)**下检查,并纳入寄生参数、串扰和工艺变化等因素,避免一个场景改善、另一个场景恶化。Synopsys PrimeTime 时序签核说明

7.Hold 修复应单独分析

Hold 违例常见原因包括数据路径太短、时钟偏斜较大,以及不正确的时钟或例外约束。

  • FPGA:通常由实现工具通过布线和物理优化增加必要延迟,异常大的违例应先检查约束和时钟结构。
  • ASIC:常用延迟单元、Buffer 或其他物理调整增加最小数据延迟,同时检查 Setup 是否被破坏。

RTL 中随意串反相器可能被综合消除;仿真的 #delay 也不能作为硬件修复方式。流程中应持续监控 Setup 和 Hold,尤其是在时钟树和布线确定之后。OpenROAD Setup / Hold 修复说明

8.实际工程可以按这个顺序推进

  1. 固定基线:保存 RTL、约束、工具设置、利用率和时序报告。
  2. 确认分析可信:检查时钟、I/O、例外、未约束路径及 CDC。
  3. 按根因归类:区分逻辑延迟、布线延迟、时钟问题和约束问题。
  4. 选择对应手段:逻辑深就重构或流水化;布线长就改善扇出、距离和拥塞。
  5. 检查功能与接口:确认精度、复位、流水延迟、吞吐量和反压行为。
  6. 比较实现结果:同时看 WNS、TNS、Hold、面积、功耗和拥塞。
  7. 完成最终验证:以约束完整、目标条件覆盖充分的布线后 STA 结果作为时序收敛依据。

最值得养成的习惯是:每次优化前,先用报告说明"时间花在哪里";每次优化后,再验证"收益来自哪里、代价是什么"。

相关推荐
FPGA小迷弟1 小时前
FPGA 与无线电:从软件定义无线电到 5G 基带的硬件实现之路
5g·fpga开发·架构·dsp开发·fpga·无线电
yingheceping1 小时前
2026 国产 FPGA 核心板怎么选?工控/视觉/通信/科研,四场景对板指南
fpga开发·fpga
樱木花道長1 小时前
AMD Ross 深度系列 7:六组对照实验看Ross如何赋能AI完成Vivado 硬核IP配置
人工智能·fpga开发
花月mmc1 天前
FPGA数字信号处理与深度学习
嵌入式硬件·深度学习·fpga开发·信号处理
幻智星科技1 天前
UDP桥接IP产品简介
tcp/ip·fpga开发·udp·硬件架构
女神下凡1 天前
芯参谋(76):电源监控复位芯片电路设计指南
arm开发·单片机·嵌入式硬件·fpga开发·设计规范
国科安芯1 天前
LEO卫星里的IO脉冲事件通信,毛刺误触发解析及处理方案
单片机·嵌入式硬件·fpga开发·低轨卫星·商业航天·抗辐射
Riwuarua1 天前
从近似0基础开始FPGA开发——Part.25:GT 高速收发器架构与 KU5P 资源规划
fpga开发·架构
星夜离尘562 天前
FPGA 三点中值滤波:不补零、不丢背压样本的流式实现
fpga开发