时序收敛

<image>

时序收敛（Timing closure）是现场可编程逻辑门阵列、特殊应用积体电路等集成电路设计过程中，调整、修改设计等迭代性的设计流程，确保在时钟驱动的同步电路中所有电磁信号满足逻辑闸的时序要求（与系统时钟相关的时序约束、时钟频率等），保证目标时钟频率下正确的数据传输和可靠运行。为了完成上述过程，工程师常常需要在电子设计自动化工具辅助下工作。“时序收敛”一词有时也用于表达这些要求最终被满足的状态。

同步电路由两类原语元件构成：无记忆地处理逻辑函数的组合逻辑门（如非门、与门、或门、与非门、或非门、异或门等），以及能存储数据并由时钟信号触发的时序逻辑电路元件（如触发器、锁存器、寄存器）。通过时序收敛，可以通过改进布局和重构网表等手段来调整电路，以减少路径延迟并确保逻辑门的信号在所需的时钟时序之前完成有效作用。

随着集成电路设计变得日益复杂，包含数十亿个晶体管和高度互联的逻辑，确保所有关键时序路径满足约束的任务也变得愈发困难。未能满足这些时序要求可能导致功能性故障、不可预测的后果或系统级失效。

因此，时序收敛并不是一个简单的最终验证步骤，而是一项全面的迭代优化流程，包括持续改进设计的逻辑结构和物理实现，例如调整门级逻辑结构、精炼放置与互连，以便在整片芯片范围内可靠地满足所有时序约束。

## 概述

简单情况下，设计师可以手工计算元件之间的路径延迟。但当设计包含十几个或更多元件时，这种做法就不切实际了。例如，从一个D触发器的输出经由组合逻辑门到下一个D触发器输入的路径延迟，必须满足（小于）同步到两级触发器的时钟脉冲之间的时间间隔。当这些元件间的延迟大于时钟周期时，电路将无法正常工作。因此，修改电路以消除时序失败（并消除关键路径）是逻辑设计工程师的重要工作之一。关键路径是指设计中两个时序元件之间延迟最长的路径（以延迟计）；它也定义了所有寄存器到寄存器路径中的最大延迟，且该最大延迟不得大于时钟周期时间。

## 时序约束

<image>

在IC设计过程中，IC布局应满足几何约束和时序约束。几何约束指物理设计中由封装/制造工艺强加的规则，例如单元对齐的正确性和最小布线间距。时序约束指所有信号路径应满足的时序要求。通常，在触发器输出信号于时钟沿发生改变之前，该信号在元件内还应保持稳定一段时间，这称为建立时间（setup time）。在电磁信号到达下一级触发器并在时钟沿被采样之后，信号在存储元件中还应保持稳定一段时间，这称为保持时间（hold time）。时序约束分为两类：

建立时间约束（长路径约束）：

这类约束规定在触发器时钟沿之前数据输入信号应保持稳定的时间长度，以便数据有足够时间通过一条逻辑路径传播并在下一个时钟沿之前到达下一级触发器。如果路径延迟过长，可能违反建立时间约束，导致错误数据被锁存。

保持时间约束（短路径约束）：

这类约束规定在触发器时钟沿之后数据输入信号应保持稳定的时间长度。违反保持时间约束可能导致亚稳态或其他不期望的行为。

保持时间约束公式：$t_{logic}>t_h-t_{c{-}q}$

建立时间约束公式：$t_{logic}<t_{CLK}-t_{c{-}q}-t_{su}$

其中：

- $t_{logic}$：组合逻辑延迟
- $t_{CLK}$：时钟周期
- $t_{su}$：建立时间（setup time）
- $t_h$：保持时间（hold time）
- $t_{c{-}q}$：触发器的clock-to-Q延迟

## 时序收敛的迭代过程

时序收敛是确保所有信号在所需时间内到达目标，从而使电路可靠工作的关键步骤。设计者从寄存器传输级（RTL）抽象以及描述电路的Verilog或VHDL代码开始。该描述被综合为网表（netlist），网表是逻辑门和连线的集合，并用于配置FPGA硬件。

由于FPGA的逻辑和布线具有灵活性，信号延迟可能会变化。如果信号到达得太晚，设计可能无法满足时序。设计者首先在SDC（Synopsys设计约束）格式中定义准确且现实的时序约束，以反映系统的性能目标。这些约束可能包括时钟周期、输入/输出延迟、多周期路径以及建立/保持要求。基于设计内部的逻辑结构和路径延迟，必须认真分析这些约束是否可实现。这些约束将指导下游的全部时序分析与优化流程。

## 时序收敛与静态时序分析中的问题

在时钟驱动的同步电路中，主要考虑三类延迟：

门延迟（Gate delays）：指输入端发生变化后传播到输出端所需的时间。通常计算为输入发生变化与输出随之变化之间的时间间隔。

线延迟（Wire delays）：也称为互连延迟，指数据信号在同步电路中通过金属互连线从一个电路元件传输到另一个电路元件所需的时间。延迟主要由导线的电阻和电容引起。

时钟偏移（Clock skew）：指来自同一时钟源的时钟信号，在同步电路不同部分的到达时间差异。当时钟信号从其源（如振荡器或时钟发生器）经由电路中多条不同路径传播时，会经历不同的传播延迟，从而产生时钟偏移。在下图中，芯片上点$i$和$j$的时钟偏移定义为：$\delta( i,j)=t_i-t_{j}$，其中位置$i$和$j$可以不同。图示说明了时钟偏移的概念，即不同触发器上时钟信号到达时间的差异。理想情况下，所有时钟信号应同时到达目的地；然而由于布线路径、负载和物理布局的差异，这几乎不可能完全实现。

<image>

在逻辑综合和约束分析之后，设计会经历静态时序分析（STA），这是验证电路是否满足其定义的时序约束的基本、迭代过程（在FPGA中亦然）。在STA中，通常假设时钟偏移可以忽略，并在后续时钟树综合阶段再处理。静态时序分析工具（如Cadence Tempus、Synopsys PrimeTime、Intel Timing Analyzer等）能够在无需仿真的情况下评估设计中的所有时序路径，因此非常适合进行可扩展且全面的分析。在静态时序分析中，组合电路可表示为有向无环图（DAG），其中每个节点的权重对应于导线（或逻辑门）的延迟。

在此过程中，静态时序分析引擎会计算：

- 路径延迟（Path delays）：从一个寄存器经过组合逻辑到另一个寄存器的总延迟。
- 余量（Slack）：所需到达时间与实际到达时间之间的差值。
- 关键路径（Critical paths）：余量最小（或为零）的最长路径。
- 违例（Violations）：余量为负的路径，表示时序不满足。

<image>

<image>

特别对于余量（Slack），静态时序分析会假设最坏情景，即每个逻辑门都发生转换。此时可以为每个节点计算余量：

$$\mathrm{Slack} = \mathrm{RAT} - \mathrm{AAT}$$

其中：

- RAT = 所需到达时间（required arrival time）
- AAT = 实际到达时间（actual arrival time）

RAT指信号在时序要求下最迟可以发生转换的时间；AAT指信号实际发生转换的最迟时间（在每个节点的输出端定义）。若某一输出的余量为负，则表示电路未能满足时序；若所有输出的余量为正，则表示电路满足时序。

## 物理设计

一旦生成静态时序分析报告，工程师就可以利用时序优化技术或设计自动化工具来检查报告，以识别需要关注的关键或违例路径。同时他们也会通过调整放置与布线来优化物理布局。这个循环会反复进行，直到所有时序约束都得到满足。

通过逻辑综合和初步时序优化，芯片的物理布局应被映射出来。通过放置（placement）、时钟树综合（clock tree synthesis）和布线（routing）等关键步骤，物理设计会被修改，从而使时序行为发生显著变化，从而减少路径延迟并提升电路时序性能。

### 放置（Placement）

EDA工具为每个标准单元（逻辑门、触发器等）和金属连线在硅片上分配物理位置。将相互连通的单元放得更靠近可以减少路径延迟。

### 时钟树综合（CTS）

要构建一个平衡的时钟分配网络，将时钟信号均匀且同步地传递到所有时序元件（触发器）。CTS 可以最小化时钟偏斜（即时钟信号在不同点的到达时间差），并可以精确控制时钟延迟（提高时钟信号传递到所有时序元件的及时性），同时要满足最大转换与最大电容等约束，以确保时钟网络符合设计限制。时钟偏斜通常会影响保持时间和建立时间，并且时钟偏斜通常由局部时钟偏斜和全局时钟偏斜组成。

常见的三种CTS类型包括：

#### 单点时钟树（Single-point CTS）

<image>

单点时钟树由单一时钟源出发，以树状结构将时钟信号分发到所有时序元件。该方法易于实现，适用于低频或多时钟的设计。但对于高频或大规模设计不太适合，因为路径不对称会导致较大的时钟偏移。

#### 时钟网格（Clock mesh）

<image>

时钟网格通过类似网格的结构分发时钟信号，可提供更好的时钟平衡和更小的偏斜，适合高频设计。然而，构建时钟网格会带来更高的功耗和面积开销，并增加设计复杂度。

#### 多源时钟树（Multi-source CTS）

<image>

多源时钟树结合了单点时钟树和时钟网格的优点。将设计划分为多个子模块，每个子模块拥有自己的局部时钟源。该结构在降低偏斜的同时减少功耗与面积消耗，因而非常适合大规模设计。

### 布线（Routing）

<image>

放置完成后，设计自动化工具会生成连线，将单元在物理上连接起来。实际布线会引入真实的寄生电阻—电容（RC）效应，这些寄生会影响信号延迟。此外，最终布线给出了导线长度与拥塞信息，从而使时序分析更加精确。

## 时序优化技术

一种常见的提升电路性能的方法是采用时序优化技术，例如在关键路径的组合逻辑之间插入寄存器（流水化）。这可能提高最大工作频率，但会增加电路的总体延迟（即从输入到输出路径上寄存器的最大数量）。

实际的时序优化技术通常包括物理综合（physical synthesis），通过一系列时序优化来消除负余量（negative slack）。物理综合包括制定时序预算（timing budgets）并实施时序修正（timing corrections）。通常，时序预算包含在放置、布线阶段以及时序修正操作中沿路径或网线分配目标延迟。时序修正包括以下几类方法：

<image>

### 门尺寸调整（Gate sizing）

门尺寸调整是用不同驱动能力的等效逻辑门替换现有逻辑门。较大的门可以更快地驱动较大的负载，从而降低关键路径的延迟。此技术是在速度与占用面积/功耗之间进行权衡。

举例：有三种尺寸的逻辑门，满足$Size(Vc) > Size(Vb) > Size(Va)$。尺寸越大的门，其输出电阻越小，因此有$R_{out}(V_c) < R_{out}(V_b) < R_{out}(V_a)$。根据RC延迟公式$t = R_{out} \times C_{load}$，其中$t$表示传播延迟，$R_{out}$表示输出阻抗，$C_{load}$表示负载电容。

因此当负载电容较大时，较大的逻辑门更容易驱动较大的负载：$t(V_c) < t(V_b) < t(V_a)$

而当负载电容较小时，较小的逻辑门驱动较小负载时可能更高效：$t(V_c) > t(V_b) > t(V_a)$。

<image>

### 缓冲器插入（Buffer insertion）

用于分断长线并减少RC电路（电阻-电容）延迟，尤其适用于高扇出或物理距离较远的连接。缓冲器也可以用于调整路径时序以修正保持时间违例。图中所示的缓冲器通常由两个串联的反相器组成；在电路图中，三角形通常表示逻辑门，三角形后面的圆圈表示逻辑反相。

改进方向包括：

- 提速或作为延迟元件：缓冲器能通过更好地驱动长线与大负载电容来降低路径延迟。在关键路径中插入缓冲器可以减小等效电阻，从而改善信号传播性能。另一方面，缓冲器也可以有意放置以引入固定延迟，用于时序对齐。
- 改善转换陡峭度（改变上/下沿时间）：上/下沿缓慢的信号会引起不稳定开关和时序违例。缓冲器可以“锐化”信号边缘，改善跃变斜率，从而使数字行为更稳定，减少毛刺、直通电流和误触发。
- 屏蔽电容性负载（缓解大负载）：若某逻辑门驱动大量下游门或长导线，总负载电容会很大，导致该门输出响应变慢。在该门与其重负载之间插入缓冲器，可以将负担转移到缓冲器上，使原门仅需驱动缓冲器，而不必直接驱动全部负载。但可能以增大使用面积，提高功耗为代价。

### 网表重构（Netlist restructuring）

网表重构是指在不改变逻辑功能的前提下修改已有门级电路结构的过程，旨在通过重组或转换现有门的连接或表示来优化时序、面积或功耗。常见变换包括：

<image>

- 克隆（Cloning）：复制门以减少负载电容或在多条路径间平衡负载。
- 重构输入/输出树（Redesigning the I/O tree）：改变信号分配或接收方式以改善时序或减轻拥塞。
- 交换可交换端口（Swapping commutative pins）：对可交换输入（如AND、OR）的输入重新排序，以优化关键路径并改变连接关系。
- 门分解（Gate decomposition）：将复杂门拆解为更简单的门，例如用NAND-NAND代替 AND-OR，并利用CMOS反相器简化实现以缩短路径延迟。
- 布尔重构（Boolean restructuring）：应用布尔代数规则简化或重表达逻辑式，常能最小化路径延迟或得到更小的实现。

### 逆向变换

若对总体设计指标（例如面积或功耗）有利，也可以执行逆向操作，例如门尺寸缩小（downsizing）、合并或简化先前扩展的逻辑结构。

这些技术通常由物理综合和放置与布线工具（如 Synopsys IC Compiler、Cadence Innovus、Intel Quartus等）自动应用，但设计者也可以通过约束和优化指令手动引导这些优化。

## 设计流程

<image>

### 在迭代验证与确认中使用静态时序分析

在布线步骤完成后，设计的物理细节（包括导线长度、电容和电阻）将被检查并确定。需要对设计进行全面的功能验证与确认，例如使用静态时序分析（STA），以保证时序优化后的功能完整性，帮助识别时序违例和延迟，并验证最近一次时序收敛和优化的有效性。设计者还可以使用仿真、形式验证和硬件测试来验证设计的功能与性能。如果电路未能满足时序要求，则需要将整个电路从头重新送入STA流程，进行迭代改进与验证。

### 后时序分析（Post-implementation timing analysis）：

当设计在FPGA上实现完成后，需进行实现后时序分析以验证所有时序目标是否已满足。该分析作为时序收敛的最终检查，确认时序收敛过程是否成功，并考虑任何与实现相关的特定因素。

## 工具与技术使用建议

许多时候，逻辑电路的改动（例如时序优化手段）由用户的电子设计自动化（EDA）工具在设计者准备的时序约束指令引导下自动完成。术语“时序收敛”也常用于表示已实现的目标：当设计流程走到尽头且其时序要求得到满足时，称该设计已达成时序收敛。

在现有技术条件下，所有设计步骤都需要具备“时序感知”（timing-aware），才能使设计正确满足时序要求；而在微米级工艺时代，只有逻辑综合类的 EDA 工具有这种先决条件。

尽管从逻辑综合沿用的一些成熟原则已将“时序感知”扩展到整个流程，时序收敛过程的逻辑阶段与物理阶段仍由不同的设计团队和不同的 EDA 工具分别处理。举例来说，Synopsys的Design Compiler、Cadence的Encounter RTL Compiler、Magma的BlastCreate是逻辑综合工具的例子；而Synopsys的IC Compiler、Cadence的SoC Encounter、Magma的Blast Fusion则是能执行时序感知放置、时钟树综合与布线、用于物理时序收敛的工具示例。

当用户要求电路满足极其苛刻的时序约束时，可能需要利用机器学习程序（例如Plunify的InTime）来搜索一组最优的FPGA综合、映射、放置与布线工具配置参数，从而确保电路能闭合时序。要让EDA工具处理一个时序要求，必须将该要求翻译为工具能识别的静态时序约束。

近年来，时序收敛流程逐步将逻辑综合与物理实现整合到统一平台以便更好地进行优化。比如Synopsys Fusion Compiler、Cadence的Genus-Innovus流程提供端到端的解决方案，在单一环境中结合了逻辑综合、放置、时钟树综合和布线。此外，像OpenROAD和OpenSTA这样的开源工具链在学术界与创业原型开发中也日益受到重视，因为它们支持时序感知的设计闭合工作流。这些现代工具旨在通过对性能、面积与功耗（PPA）之间的折衷进行自动化处理，应对纳米级电路日益增长的复杂性，并在RTL→GDSII的设计流中更早地发现与解决时序违例。

## 相关

- 设计收敛
- 电子设计自动化
- 设计流程
- 集成电路设计
- 静态时序分析
- 异步电路