一、时序收敛概述

1.1 什么是时序收敛

时序收敛,说白了就是你的FPGA设计能在目标频率下稳定工作。

我打个比方。你设计了一个计数器,时钟是100MHz。理论上每个时钟周期是10ns。如果信号从寄存器A传到寄存器B,花了12ns,那下一个时钟沿来的时候,数据还没准备好。结果是什么?采样错误,功能紊乱。

时序收敛,就是保证所有路径的延迟都小于时钟周期。一个都不能超。

核心判断标准:

  • 建立时间(Setup Time)满足:数据在时钟沿之前稳定到达
  • 保持时间(Hold Time)满足:数据在时钟沿之后保持稳定
  • 所有路径的Slack(时序裕量)≥ 0

我在项目中遇到过很多次,综合实现后时序报告一片红。刚开始做FPGA时,我总觉得差个几百皮秒无所谓。后来有一次,板子跑起来偶尔死机,查了三天,最后发现就是一条路径时序违例了0.3ns。从那以后,我再也不敢对时序问题掉以轻心。

1.2 为什么时序收敛是FPGA设计的核心

这个问题我问过很多刚入行的工程师。有人说是为了跑得快,有人说是为了不出错。都对,但不够全面。

我总结了几点:

  1. 功能正确性的基石——时序不收敛,功能就是空中楼阁。你仿真跑得再好,上板子就是另一回事。
  2. 性能的瓶颈——系统能跑多快,取决于最差的那条路径。时序收敛决定了你的Fmax。
  3. 可靠性的保障——时序裕量不够的设计,温度一变、电压一波动,立马出问题。
  4. 开发效率的关键——时序问题拖得越久,改起来越痛苦。我见过一个项目,前前后后改了六版,就是因为时序一直没收敛。

避坑指南:我曾经接手过一个项目,前工程师把所有路径的时序裕量都压在0.1ns以内。看着是收敛了,但板子一上电,温度升到60度就开始报错。为什么?因为温度升高,延迟变大,那0.1ns的裕量根本不够用。所以我的习惯是,至少留10%的时序裕量。

1.3 Vivado时序收敛的整体流程概览

Vivado的时序收敛流程,我把它分成五个阶段。你想想看,就像盖房子,得一层一层来。

下面这张图是我自己画的,把整个流程串起来了:

Vivado时序收敛五阶段流程 阶段一 约束输入 阶段二 综合与实现 阶段三 时序分析 阶段四 违例修复 阶段五 迭代收敛 不满足则返回 各阶段核心任务: 阶段一:创建时钟约束、输入输出延迟约束、时序例外 阶段二:运行综合(Synthesis)和实现(Implementation) 阶段三:查看时序报告,分析违例路径的根因 阶段四:修改RTL代码、调整约束、优化策略 阶段五:重复阶段二到四,直到所有路径满足时序要求

嗯,这里要注意。这个流程不是线性的。很多时候你得来回跑好几轮。我做过最夸张的一个项目,迭代了12轮才完全收敛。

1.4 每个阶段我的一些经验

阶段一:约束输入

很多人觉得约束就是写个create_clock。其实远不止这些。我建议你从一开始就把所有时钟、生成时钟、异步时钟组都定义清楚。越早做,后面越省事。

小技巧:写约束的时候,多用report_clock_interaction看看时钟域之间有没有不该存在的路径。我曾经因为这个吃过亏,两个异步时钟域之间没设false_path,结果时序报告里一堆莫名其妙的违例。

阶段二:综合与实现

Vivado的综合策略和实现策略有很多种。我的习惯是,第一轮用默认策略跑,看看大概的时序情况。然后根据违例类型,针对性调整策略。

阶段三:时序分析

打开时序报告,别只看红色的违例。绿色的路径也要看,特别是那些裕量很小的。我一般会关注WNS(最差负裕量)和TNS(总负裕量)这两个指标。

指标 含义 我的经验值
WNS 最差负裕量,所有路径中最差的那条 建议 ≥ 0.2ns
TNS 总负裕量,所有违例路径的裕量之和 建议 ≤ -1.0ns(越小越好)
WHS 最差保持时间裕量 建议 ≥ 0.1ns

阶段四:违例修复

修复违例没有银弹。你得根据违例类型来:

  • 建立时间违例:加流水线、优化逻辑深度、换更快的器件
  • 保持时间违例:加延迟、调整时钟偏斜
  • 跨时钟域问题:用同步器、设false_path

阶段五:迭代收敛

这个阶段最考验耐心。我见过有人改了一版就跑一次实现,跑一次要两三个小时。一天下来跑不了几轮。我的建议是,先快速迭代,用较少的实现策略跑,等时序差不多了,再用最优策略跑最终版。

注意:迭代过程中,每次只改一个变量。不要同时改代码和约束,否则你根本不知道哪个改动起了作用。这是我吃过亏之后总结出来的教训。

1.5 写在前面的话

时序收敛这件事,说难不难,说简单也不简单。它需要你对FPGA的内部结构有深入理解,也需要你积累大量的实战经验。

我个人觉得,最好的学习方式就是动手。找一个设计,故意把时钟频率设高,然后看着时序报告,一条一条路径去分析、去修复。等你把那些红色的违例全部变成绿色的时候,那种成就感,嗯,很爽。

后面的章节,我会把每个阶段拆开来讲。包括怎么写约束、怎么分析时序报告、怎么用Vivado的各种优化策略。咱们一步一步来。

可可精品资料库