第 21 章 综合与静态时序分析基础
1. 本章要解决的问题
第 19 章写出了 RTL,第 20 章用仿真检查了功能和周期行为。芯片实现还要回答两个新问题:
- 这些 RTL 最终会变成哪些门、触发器、MUX 和存储器?
- 在规定时钟和外部接口条件下,数据能否按时到达每个采样端?
逻辑综合(logic synthesis)把可综合 RTL 和设计约束转换为门级网表。静态时序分析(static timing analysis, STA)把网表看成带延迟的时序图,在不枚举功能激励的情况下检查数据路径的最早和最晚到达时间。
本章回答十个问题:
- 综合为什么不是简单的“代码逐行翻译”?
if、case、算术、数组和always_ff会推断什么硬件?- 综合优化为什么能改写结构却保持逻辑功能?
- 标准单元库和约束怎样影响技术映射?
- STA 怎样把网表变成起点、终点和时序弧?
- 到达时间、要求时间和裕量分别表示什么?
- 建立与保持报告怎样对应第 14、15 章公式?
- 输入延迟和输出延迟怎样把芯片放进外部系统?
- 未约束路径、错误例外和 CDC 为什么危险?
- 面对违例,应改 RTL、约束、单元还是物理结构?
本章使用通用概念和简化报告。命令片段采用常见 SDC 风格,仅用来说明约束含义;具体工具的选项、单位和报告格式应以项目脚本与工具文档为准。
2. 与前面章节的联系
第 14、15 章从电路时间关系得到:
\[ S_{setup}=T_{clk}+t_{skew}-U_{setup}-t_{setup}-t_{cq,max}-t_{comb,max}, \]
\[ S_{hold}=t_{cq,min}+t_{comb,min}-t_{skew}-t_{hold}-U_{hold}. \]
本章不会换掉这些物理关系,而是把它们拆成工具报告常见的两栏:
\[ S_{setup}=T_{required}-T_{arrival}, \]
\[ S_{hold}=T_{arrival}-T_{required}. \]
第 19 章的 RTL 决定候选结构,第 20 章的测试平台决定功能证据;综合和 STA 则引入标准单元延迟、时钟、接口预算和路径覆盖。四者必须一致。
3. 前置知识快速检查
always_ff @(posedge clk)通常推断什么状态元件?if (en) q<=d;中en=0时,寄存器怎样保持?- 建立检查关注最长路径还是最短路径?
- 保持违例能否单纯通过降低时钟频率修复?
- RTL 功能仿真通过是否已经包含真实标准单元和布线延迟?
答案是:边沿触发寄存器;通过 D 端选择旧 q
或单元使能保持;最长路径;通常不能;没有。若第 1、2 题不熟,回看第 19
章;若第 3、4 题不熟,回看第 14、15 章。
4. 学习目标
完成本章后,你应能够:
- 说明综合的展开、推断、优化和技术映射阶段;
- 从基础 RTL 画出可能的门、MUX 和寄存器结构;
- 区分通用逻辑网表与标准单元门级网表;
- 解释约束为何会改变综合优化目标;
- 识别组合环、锁存器、多驱动和未使用逻辑警告;
- 区分寄存器到寄存器、输入到寄存器、寄存器到输出和输入到输出路径;
- 使用到达时间、要求时间和裕量读取简化 STA 报告;
- 独立计算含时钟延迟、偏斜和不确定性的建立/保持裕量;
- 为同步输入输出分配基础时间预算;
- 解释 WNS、TNS、违例路径数和未约束路径数;
- 判断建立与保持违例的基础修复方向;
- 识别虚假路径、多周期路径和 CDC 约束的误用风险。
5. 综合的输入与输出
综合至少需要三类输入:
- RTL:功能、状态和层次结构;
- 目标库:可用标准单元的逻辑功能、面积、功耗和时序模型;
- 约束:时钟周期、接口延迟、负载、驱动和设计规则。
输出通常包括:
- 门级网表;
- 端口、时钟和约束检查报告;
- 面积或单元统计;
- 建立/保持时序摘要;
- 锁存器、多驱动、组合环、未连接和未约束对象等警告。
观察图 21-1:RTL 先被理解成寄存器、运算和选择关系,再经过逻辑优化,最后映射到库中真实可用的单元。约束从一开始就影响选择,而不是结束后才附加的一张表。
图 21-1 综合依次完成展开、硬件推断、逻辑优化和技术映射,并用约束在速度、面积与功耗之间选择实现
6. 展开:先确定到底有多少硬件
设计展开(elaboration)处理:
- 顶层模块与实例层次;
- 参数覆盖与派生位宽;
generate条件和循环;- 端口连接和数组规模;
- 常量传播可以提前确定的结构分支。
例如:
mux2 #(.W(32)) u_mux (...);展开后是 32 bit 宽的选择结构。参数不是运行时输入,芯片制造后不会动态变成 8 bit MUX。
立即检查
两个不同参数的同一模块实例会共用一份硬件吗?
不会。展开后每个实例具有自己的结构和连接,参数值还可能让两份结构宽度不同。
7. 硬件推断:从行为识别结构
综合器把 RTL 模式识别为硬件:
| RTL 结构 | 常见推断 |
|---|---|
assign y=a&b |
按位与门或等效组合网络 |
条件运算符、if/else |
MUX 或带优先级选择网络 |
完整 case |
多路选择或译码网络 |
always_ff @(posedge clk) |
正边沿触发器/寄存器 |
| 寄存器分支缺少赋值 | 寄存器保持或使能 |
不完整 always_comb |
意外锁存器 |
+、-、比较 |
加法器、减法器、比较器或优化结构 |
| 规则数组读写模板 | 寄存器阵列或存储器宏候选 |
图 21-2 将同一段带复位、使能的寄存器 RTL 映射为 D 触发器和前级选择。具体库可能提供复位触发器或集成使能单元,也可能用普通 DFF 加 MUX 实现。
图 21-2 时序 if
的分支形成寄存器输入选择或专用控制;代码优先级对应硬件选择优先级
例题 1:从 RTL 画推断结构
always_ff @(posedge clk) begin
if (rst)
q <= 8'h00;
else if (en)
q <= a + b;
end可先画出:
- 一个 8 bit 加法器产生
a+b; - 一个选择网络在常量 0、加法结果与旧
q之间选择; - 八个状态位在上升沿更新;
rst优先于en。
映射后,复位可能使用带同步清零的库触发器,也可能仍由 D 端 MUX 选择 0。不能只凭 RTL 行数断言最终单元数,必须查看综合网表与报告。
变式:若 a+b 的结果只在
en=1
时使用,综合器仍需要完整加法功能;是否能通过操作数隔离降低无效翻转属于后续功耗优化问题。
8. 逻辑优化:结构可以改变,功能必须保持
综合器会执行常量传播、布尔化简、冗余删除、公共逻辑共享、缓冲与门尺寸选择等优化。
例题 2:等价式被化简
\[ y=a b+a\overline b=a(b+\overline b)=a. \]
对应 RTL:
assign y = (a & b) | (a & ~b);综合后可以直接连接 a 到
y,不需要两个与门、一个反相器和一个或门。仿真器按原表达式求值,综合器则可以用任何逻辑等价结构实现。
四状态仿真中的 x
行为与二状态硬件优化之间可能存在差异。例如 b=x 时原 RTL
的四状态结果未必与简化后的 a
表达完全一致。设计的正常功能规格应建立在确定的 0/1
输入上,并通过复位和完整赋值控制未知传播。
9. 技术映射:把通用逻辑换成库单元
技术映射(technology mapping)把通用门、MUX、加法和寄存结构实现为目标库中存在的标准单元。例如同一个反相逻辑可能选择不同驱动强度的反相器;复杂函数可能使用 AOI/OAI 复合门减少级数。
工具选择受以下条件共同影响:
- 路径时序目标;
- 输出负载与扇出;
- 单元面积;
- 动态与漏电功耗;
- 最大转换时间、最大电容和最大扇出规则;
- 是否允许使用某类单元。
因此,同一 RTL 在不同库、不同周期和不同负载下可能得到不同网表。
10. 约束不是“优化提示”,而是分析契约
约束告诉工具外部世界怎样使用设计。最基础的时钟示意为:
create_clock -name core_clk -period 2.000 [get_ports clk]它表达名义周期 2 ns。若没有时钟,寄存器间路径可能无法形成正确的建立/保持检查。
同步接口还需说明外部数据何时到达、外部接收器需要多少时间:
set_input_delay -clock core_clk -max 0.35 [get_ports data_in*]
set_output_delay -clock core_clk -max 0.45 [get_ports data_out*]这些数字是例题条件,不是通用默认值。真实值来自板级/上级模块时序、外部器件规格和系统预算。
错误约束会得到精确但错误的结论:周期设得过宽可能掩盖慢路径;输入延迟写成 0 会把全部周期留给芯片内部;漏掉端口会形成未约束路径。
11. 综合结果要先看警告,再看面积
优先检查:
- 是否存在未解析引用或端口位宽不匹配;
- 是否推断了意外锁存器;
- 是否有多个驱动或组合环;
- 是否有常量输出、未使用寄存器或整块逻辑被删除;
- 存储器是否按预期推断;
- 时钟是否识别,路径是否被约束;
- 再看面积、单元数和时序摘要。
逻辑被删除不一定是工具错误。输出未连接、状态永远不可达、使能恒定或参数关闭功能,都可能让逻辑合法消失。要从规格和连接证明删除是否合理。
12. 网表是一张带方向的时序图
STA 将设计表示为节点与时序弧:
- 触发器时钟端、Q 端和 D 端是关键节点;
- 单元输入到输出具有组合延迟弧;
- 互连具有网络延迟;
- 时钟从源传播到各寄存器时钟端;
- 建立/保持检查是数据端相对时钟端的约束弧。
STA 不需要枚举 a=0,b=1
等功能向量。它沿时序图传播最早和最晚时间,寻找在约束模型下最不利的路径。
13. 四类基础路径
观察图 21-3:
- 输入到寄存器:芯片端口 → 组合逻辑 → D;
- 寄存器到寄存器:发射 Q → 组合逻辑 → 捕获 D;
- 寄存器到输出:Q → 组合逻辑 → 芯片端口;
- 输入到输出:输入端口 → 纯组合逻辑 → 输出端口。
图 21-3 时钟约束寄存器边界,输入/输出延迟把芯片内部路径连接到外部发射与捕获环境
没有输入/输出延迟时,内部寄存器路径可能已约束,接口路径却仍缺少真实要求。
14. 到达时间、要求时间和裕量
数据到达时间(arrival time)回答“数据实际最早或最晚什么时候到”。数据要求时间(required time)回答“为了满足采样,它最早不能早于或最晚不能晚于什么时候”。
建立检查:
\[ S_{setup}=T_{required,setup}-T_{arrival,max}. \]
保持检查:
\[ S_{hold}=T_{arrival,min}-T_{required,hold}. \]
两者都以正裕量通过。符号写法不同,是因为建立怕“太晚”,保持怕“太早”。
15. 建立路径报告怎样拆账
对同一时钟域寄存器路径,设:
- 发射时钟到达时间 \(L\);
- 下一捕获时钟到达时间 \(C+T_{clk}\);
- 最大时钟到 Q 为 \(t_{cq,max}\);
- 最大数据路径为 \(t_{data,max}\);
- 建立时间为 \(t_{setup}\);
- 建立不确定性为 \(U_{setup}\)。
则:
\[ T_{arrival,max}=L+t_{cq,max}+t_{data,max}, \]
\[ T_{required,setup}=C+T_{clk}-t_{setup}-U_{setup}, \]
\[ S_{setup}=T_{required,setup}-T_{arrival,max}. \]
令 \(t_{skew}=C-L\),展开后就回到第 15 章公式。
图 21-4 把报告分成数据到达路径和数据要求路径,最后相减得到裕量。
图 21-4 建立分析沿最大数据路径累加到达时间,并从下一捕获边沿扣除建立与不确定性得到要求时间
例题 3:含时钟到达时间的建立检查
已知:
\[ T_{clk}=1000\ \text{ps},\ L=80\ \text{ps},\ C=110\ \text{ps}, \]
\[ t_{cq,max}=70\ \text{ps},\ t_{data,max}=690\ \text{ps},\ t_{setup}=80\ \text{ps},\ U_{setup}=50\ \text{ps}. \]
数据到达时间:
\[ T_{arrival,max}=80+70+690=840\ \text{ps}. \]
要求时间:
\[ T_{required,setup}=110+1000-80-50=980\ \text{ps}. \]
建立裕量:
\[ S_{setup}=980-840=140\ \text{ps}. \]
路径通过。这里 \(C-L=30\) ps,代入偏斜公式也得到 140 ps。
变式:若数据路径增加 180 ps,裕量变为 \(-40\) ps。
16. 保持路径报告怎样拆账
保持检查使用同一名义边沿:
\[ T_{arrival,min}=L+t_{cq,min}+t_{data,min}, \]
\[ T_{required,hold}=C+t_{hold}+U_{hold}, \]
\[ S_{hold}=T_{arrival,min}-T_{required,hold}. \]
图 21-5 中,新数据必须晚于捕获端保持保护边界。增加时钟周期不会移动同一边沿附近的这两个时间点。
图 21-5 保持分析沿最小数据路径计算最早到达,并与同一捕获边沿后的保持要求比较
例题 4:保持违例与延迟修复量
已知:
\[ L=80\ \text{ps},\ C=110\ \text{ps},\ t_{cq,min}=30\ \text{ps}, \]
\[ t_{data,min}=20\ \text{ps},\ t_{hold}=35\ \text{ps},\ U_{hold}=15\ \text{ps}. \]
\[ T_{arrival,min}=80+30+20=130\ \text{ps}, \]
\[ T_{required,hold}=110+35+15=160\ \text{ps}, \]
\[ S_{hold}=130-160=-30\ \text{ps}. \]
至少增加 30 ps 最小数据延迟只能到零裕量。若增加 35 ps,则保持裕量为 5 ps。修复还要重新检查建立,因为增加数据延迟会消耗建立裕量。
17. 最大路径与最小路径来自不同分析条件
建立分析寻找可能最晚的数据到达,保持分析寻找可能最早的数据到达。标准单元延迟受输入转换、输出负载、PVT 和互连影响,因此工具通常在多种分析角下分别检查最大和最小延迟。
第 22 章会解释工艺库、PVT 角和寄生提取。本章先记住:一个“门延迟”不是永远固定的单一数字;STA 使用库表和当前负载条件选择相应延迟。
18. 输入路径必须包含外部发射预算
例题 5:输入到寄存器建立检查
某同步输入相对 clk 发出,时钟周期 2.00
ns。外部器件时钟到输出与板级传播合计最大输入延迟 0.55 ns;芯片端口到捕获
D 的内部最大延迟 0.75 ns;捕获建立时间 0.12 ns,不确定性 0.08
ns。暂按零时钟偏斜。
到达时间:
\[ T_{arrival}=0.55+0.75=1.30\ \text{ns}. \]
要求时间:
\[ T_{required}=2.00-0.12-0.08=1.80\ \text{ns}. \]
\[ S_{setup}=1.80-1.30=0.50\ \text{ns}. \]
若错误地把输入延迟设为 0,报告会多出 0.55 ns 假裕量。
输入保持还需要最小输入延迟,不能用最大值代替。外部最早到达和内部最短路径共同决定是否过早改变捕获 D。
19. 输出路径必须给外部接收器留时间
若外部接收器需要在下一边沿前预留 0.45 ns(含板级和外部建立预算),芯片输出端口的最大要求时间可简化为:
\[ T_{required,out}=T_{clk}-t_{output\_delay,max}. \]
周期 2.00 ns 时,输出必须在 1.55 ns 前稳定。内部寄存器时钟到 Q 与输出组合/互连延迟应小于这个预算。
输出延迟不是芯片内部输出缓冲器延迟;它描述芯片之外为接收端保留的时间。
20. WNS、TNS 与违例路径数
- WNS(worst negative slack):最差的负裕量;若所有路径通过,工具可能报告 0 或最小正裕量,格式依工具而异;
- TNS(total negative slack):所有负裕量按端点或路径统计规则求和;
- 违例端点/路径数:有多少检查未通过;
- 未约束路径数:没有有效要求时间、因而无法作出完整判断的路径数量。
WNS 告诉你最严重缺口,TNS 反映整体违例规模。不能只修最差一条后就停止;路径共享逻辑和物理资源,修复会改变其他路径。
21. 时序摘要与修复顺序
例题 6:读时序摘要并排修复顺序
某设计摘要:
| 检查组 | WNS | TNS | 违例端点 | 未约束 |
|---|---|---|---|---|
| 建立 | -80 ps | -310 ps | 6 | 0 |
| 保持 | -30 ps | -45 ps | 2 | 0 |
| 输入到寄存器 | +120 ps | 0 | 0 | 3 条输入未约束 |
结论:
- 建立和保持都未通过,必须分别处理;
- 输入组虽然有正裕量,仍存在 3 条未约束输入,报告不完整;
- 先补齐约束并确认时钟/路径分类,再优化违例;
- 保持修复增加延迟后重新检查建立;建立优化换快单元或减少逻辑后重新检查保持。
未约束不是“自动通过”。它表示工具缺少判断标准。
22. 建立违例的基础修复方向
建立路径太慢,可考虑:
- 减少组合逻辑级数,化简条件或重构算术;
- 在允许改变延迟的架构中加入流水寄存器;
- 减少大扇出,复制驱动或加入缓冲;
- 选择更快/更强的单元;
- 改善布局布线,缩短长互连;
- 减小负载;
- 修正过度悲观但确实错误的约束;
- 若系统允许,放宽时钟周期。
不能通过随意声明 false path 消除真实功能路径。那只是停止检查,并没有让数据变快。
23. 保持违例的基础修复方向
保持路径太快,可考虑:
- 在最短数据路径加入延迟缓冲;
- 调整单元尺寸或路径结构;
- 改善时钟树偏斜;
- 修正错误的时钟关系和不确定性;
- 使用实现工具的保持修复流程。
降低频率通常无效。保持修复必须定位到具体捕获端,且不能破坏同一路径或相关路径的建立裕量。
24. 时序例外必须来自功能协议
虚假路径
虚假路径(false path)在时序图上连通,但功能上不会被目标寄存器在相关边沿采样。只有设计协议或结构证明它永远无需满足该检查时,才能排除。
多周期路径
多周期路径(multicycle path)明确允许数据跨多个周期到达。它必须与寄存器使能、控制协议和验证结果一致,并同时正确处理建立与保持关系。
禁止做法
看到负裕量就加例外,会把真实错误变成不可见。例外需要记录起点、终点、功能理由、允许周期和验证证据。
25. CDC 不是普通单周期路径
无固定相位关系的时钟域交叉不能用一个任意周期直接完成常规同步 STA。单 bit 控制通常使用同步器,多 bit 数据使用握手、异步 FIFO 或受控协议。
STA 仍会检查同步器内部目标时钟路径、复位和最大延迟等约束,但它不能用普通建立裕量证明异步采样不会亚稳。CDC 结构检查、协议验证和第 15 章的亚稳态设计共同负责。
26. 时序覆盖:每条路径是否有判断标准
观察图 21-6:时钟、输入延迟、输出延迟和例外共同形成约束网。缺少其中一项,某些路径就没有完整 required time。
图 21-6 约束质量首先看覆盖:所有真实时序路径都应被正确时钟、I/O 环境或有证据的例外解释
检查清单:
- 所有顺序单元是否归属于预期时钟;
- 所有时钟是否有周期和波形;
- 同步输入是否有最大/最小输入延迟;
- 同步输出是否有最大/最小输出延迟;
- 生成时钟和时钟关系是否完整;
- 异步域是否按 CDC 策略处理;
- 例外是否有功能证据;
- 是否存在未约束端点或无时钟寄存器。
27. STA 与动态仿真的分工
| 问题 | 功能仿真 | STA |
|---|---|---|
| 状态机功能是否正确 | 擅长 | 不判断功能序列 |
| 选定向量输出是否正确 | 擅长 | 不计算逻辑期望值 |
| 所有寄存器路径是否满足建立/保持 | 门级时序仿真覆盖有限 | 擅长系统遍历 |
| 异步协议功能 | 需专门测试 | 普通 STA 不足 |
| 未约束路径 | 不一定暴露 | 约束检查可发现 |
| 毛刺是否被某场景激活 | 可观察 | 通常不做逻辑激励判断 |
二者相互补充。STA 证明的是在模型和约束下的时间边界,不证明逻辑算法正确。
28. 常见误区
误区 1:RTL 行数少,综合网表一定小
一行乘法或宽比较可能生成大量逻辑;参数和位宽比行数更能决定规模。
误区 2:综合网表必须长得像手画框图
综合可以化简、共享、重编码和使用复合单元。应比较功能、寄存器边界和约束,而不是逐门外观。
误区 3:时序报告有正裕量就结束
还要检查路径是否全部约束、分析角是否完整、例外是否正确。
误区 4:未约束路径等于不重要路径
未约束只表示没有判断标准,可能正是严重遗漏。
误区 5:提高周期可以修复所有时序问题
它可改善建立,却通常不能修复保持。
误区 6:输入延迟和输出延迟都是芯片内部延迟
它们描述外部发射与接收环境,为芯片内部路径分配剩余预算。
误区 7:false path 是解决负裕量的快捷方式
例外只改变分析范围,不改变硬件。真实数据路径仍会在硅上工作或失败。
误区 8:STA 能证明 CDC 安全
异步关系需要专用结构、CDC 检查和协议验证,普通单周期 STA 不能替代。
29. 从 RTL 到时序关闭的基础工作顺序
- 清除语法、展开和连接错误;
- 查看推断结构,确认寄存器、锁存器和存储器;
- 检查时钟和 I/O 约束覆盖;
- 阅读综合警告与删除逻辑;
- 检查建立与保持摘要;
- 读取最差路径的起点、终点和逐级延迟;
- 判断问题来自 RTL 结构、约束、单元还是互连;
- 采用针对性修复;
- 重新综合/分析全部路径和分析角;
- 回归功能验证,防止结构修改改变行为。
30. 工程中的实际意义
综合和 STA 是 RTL 与物理实现之间的桥梁。综合把行为选择成可制造单元,STA 把时钟目标转成每条路径的时间预算。后续布局布线会改变时钟延迟、互连延迟、负载和转换时间,因此时序分析会贯穿实现流程,而不是只运行一次。
早期综合时延迟包含估计;布局后有真实单元位置,布线后可提取寄生参数。模型逐步变精确,设计仍必须保持同一功能规格和约束意图。
31. 本章知识链
RTL + 参数 + 层次
↓ 展开
寄存器 / MUX / 算术 / 存储推断
↓ 逻辑优化
通用逻辑网络
↓ 目标库 + 时钟/I/O/设计规则约束
标准单元门级网表
↓
时序图:起点 → 单元/互连弧 → 终点
↓
最大路径做建立;最小路径做保持
↓
arrival 与 required → slack
↓
约束覆盖 + WNS/TNS + 逐路径报告
↓
针对性修复并重新全量分析
↓
第 22 章:布局、时钟树、布线和寄生参数
32. 本章小结
- 综合把 RTL、目标库和约束转换为门级网表与报告。
- 展开先确定实例、参数、位宽和生成结构。
- 推断识别 MUX、寄存器、算术和存储器,优化允许改变等价逻辑结构。
- 技术映射从目标库选择具体单元,约束影响速度、面积和功耗权衡。
- 警告、推断结构和约束覆盖优先于面积数字。
- STA 沿带延迟的时序图传播最早与最晚时间,不依赖功能向量。
- 建立裕量等于要求时间减最晚到达时间。
- 保持裕量等于最早到达时间减要求时间。
- 输入/输出延迟描述外部环境,不是内部门延迟。
- WNS 描述最差缺口,TNS 描述整体负裕量规模。
- 建立与保持必须分别修复,并在每次修改后交叉复查。
- 未约束路径不是通过;时序例外必须有功能证据。
- CDC 需要专门同步结构、协议和检查。
- 综合、STA、功能仿真和物理实现共同构成闭环。
33. 练习
基础题
- 综合的三类主要输入和两类主要输出是什么?
- 展开、推断、优化、技术映射分别做什么?
if/else、always_ff和不完整always_comb常分别推断什么?- 为什么同一 RTL 在不同目标库或时钟周期下可能得到不同网表?
- STA 为什么不需要遍历全部功能输入向量?
- 列出四类基础数据路径。
- 建立与保持裕量的 arrival/required 形式分别是什么?
- WNS、TNS 和未约束路径数分别说明什么?
- 为什么 false path 不能作为一般建立违例修复方法?
分析与计算题
- 画出
if(rst) q<=0; else if(en) q<=d;的 D 输入选择和寄存器结构,并写出优先级。 - 化简 \(y=ab+a\overline b\),说明综合前后功能关系。
- 某建立路径:\(L=60\) ps、\(C=90\) ps、\(T=800\) ps、\(t_{cq,max}=70\) ps、\(t_{data,max}=610\) ps、\(t_{setup}=80\) ps、\(U=40\) ps。计算 arrival、required 和 slack。
- 在题 12 中把数据路径增加 120 ps,结果怎样?最少需要把周期增加多少才能回到零裕量?
- 某保持路径:\(L=60\) ps、\(C=90\) ps、\(t_{cq,min}=25\) ps、\(t_{data,min}=30\) ps、\(t_{hold}=35\) ps、\(U=10\) ps。计算裕量。
- 题 14 至少增加多少数据延迟到零裕量?增加 25 ps 后裕量是多少?
- 周期 1.5 ns,最大输入延迟 0.4 ns,内部最大数据延迟 0.72 ns,建立时间 0.1 ns,不确定性 0.08 ns。求输入建立裕量。
- 周期 2 ns,最大输出延迟预算 0.55 ns。若内部寄存器到输出最大到达时间为 1.32 ns,求输出建立裕量。
- 建立裕量为 -90、-40、+20、-10 ps。求 WNS、负裕量简单求和以及负裕量端点数。
- 报告显示所有已分析路径裕量为正,但有 12 个未约束端点。能否宣布时序通过?说明下一步。
- 一条路径在 RTL 上是控制条件互斥的,但综合时序图仍连通。列出声明 false path 前需要的证据。
综合题
- 给出一个含加法器、使能寄存器和零比较器的小模块,画出综合推断框图,并列出应检查的综合警告。
- 为一个 500 MHz 单时钟模块写基础约束意图:时钟周期、同步输入最大/最小延迟、同步输出最大/最小延迟和时钟不确定性;数值可自定并说明预算来源。
- 阅读一条简化建立报告,要求列出发射时钟、起点、\(t_{cq}\)、每级单元/互连、终点、捕获时钟、建立时间、不确定性和裕量,并说明哪个部分最值得优化。
- 为同一寄存器对同时建立最大路径和保持最小路径表,说明为何两条路径可能经过不同逻辑弧或分析角。
- 某优化把建立裕量从 -60 ps 改为 +25 ps,却把保持裕量从 +15 ps 改为 -12 ps。分析原因并提出修复与复查顺序。
- 为一条协议上允许三周期完成的路径制定多周期约束审查清单,包含功能使能、发射/捕获边沿、保持关系、验证证据和文档。
- 为一个双时钟模块列出普通 STA、CDC 检查和功能仿真各自要完成的任务,说明单 bit 同步器与多 bit 数据通道的不同处理。
- 制定第 19~21 章模块的综合与 STA 验收方案:包括 RTL 规则、综合网表检查、约束覆盖、时序组、WNS/TNS、例外审查、CDC、功能回归和报告归档。
34. 练习答案
展开第 21 章练习答案
题 1
主要输入是 RTL、目标标准单元库和设计/时序约束。主要输出是门级网表与综合/时序/面积等报告;还应保存警告和约束检查结果。
题 2
展开确定层次、参数、位宽和生成结构;推断把 RTL 模式识别为寄存器、MUX、算术和存储;优化在保持功能的前提下化简和重构逻辑;技术映射用目标库的具体单元实现优化后的网络。
题 3
完整 if/else 常形成 MUX;always_ff
形成边沿触发寄存器;不完整 always_comb
若需保留旧值会推断锁存器。
题 4
库中的单元功能、驱动、延迟、面积与功耗不同;周期和负载约束也会改变优化目标,因此工具可能选择不同逻辑分解、单元类型和驱动强度。
题 5
STA 把网表表示为时序图,沿所有相关弧传播最大/最小到达时间,并与端点约束比较。它检查结构上的时序边界,不需要用功能向量激活每条路径。
题 6
输入到寄存器、寄存器到寄存器、寄存器到输出、输入到输出。
题 7
\[S_{setup}=T_{required,setup}-T_{arrival,max}\]
\[S_{hold}=T_{arrival,min}-T_{required,hold}\]
正值通过,负值违例。
题 8
WNS 表示最差负裕量,TNS 表示负裕量的总体累计规模,未约束路径数表示缺少有效判断标准的路径或端点数量。
题 9
false path 只让工具停止检查,并不改变数据传播。只有功能上永远不需要相关采样的路径才能排除;真实路径会继续在硅上违例。
题 10
D 端前有三级选择:rst=1 选择 0;否则 en=1
选择 d;否则选择反馈旧 q。rst
优先于 en,选择结果进入 DFF。
题 11
\[y=a(b+\overline b)=a.\]
对确定的二进制输入,原逻辑与直连 a
完全等价。综合器可以删除反相器和逻辑门;四状态 x
仿真差异需用确定输入和设计规则管理。
题 12
\[T_{arrival}=60+70+610=740\ \text{ps}.\]
\[T_{required}=90+800-80-40=770\ \text{ps}.\]
\[S_{setup}=770-740=30\ \text{ps}.\]
路径通过。
题 13
数据增加 120 ps 后 arrival 为 860 ps,required 仍为 770 ps,裕量为 -90 ps。周期至少增加 90 ps 才到零裕量,即从 800 ps 增为 890 ps。
题 14
\[T_{arrival}=60+25+30=115\ \text{ps}.\]
\[T_{required}=90+35+10=135\ \text{ps}.\]
\[S_{hold}=115-135=-20\ \text{ps}.\]
发生 20 ps 保持违例。
题 15
至少增加 20 ps 到零裕量。增加 25 ps 后 arrival 为 140 ps,保持裕量为 5 ps。
题 16
arrival 为 \(0.4+0.72=1.12\) ns,required 为 \(1.5-0.1-0.08=1.32\) ns,裕量为 0.20 ns。
题 17
输出要求时间为 \(2.00-0.55=1.45\) ns,裕量为 \(1.45-1.32=0.13\) ns。
题 18
WNS 为 -90 ps;负裕量简单求和为 \(-90-40-10=-140\) ps;负裕量端点数为 3。真实工具的 TNS 统计粒度要按报告定义确认。
题 19
不能。12 个端点没有完整 required time。应定位其时钟、输入/输出延迟或例外为何缺失,补齐约束后重新全量分析。
题 20
需要:规格说明该组合永远不会被相关捕获边沿采样;控制互斥在复位、异常和所有模式下都成立;形式/仿真或结构检查证据;明确起点、终点和时钟关系;例外审查记录;修改后仍覆盖其余真实路径。
题 21
例如 sum=a+b,en 时写入
q,zero=(q==0)。框图包含加法器、反馈
MUX、寄存器和零比较器。检查位宽截断、意外锁存器、多驱动、未使用进位、寄存器复位/使能推断、常量传播、比较器是否被删除以及时钟是否识别。
题 22
500 MHz 对应 2.0 ns 周期。一个示例预算为输入最大/最小 0.45/0.10 ns,输出最大/最小 0.50/-0.05 ns,建立/保持不确定性 0.08/0.03 ns。数值应来自外部器件时钟到输出、板级延迟、接收建立/保持、时钟质量和接口协议;不能把示例当默认值。
题 23
先把报告分成 arrival 与 required 两栏,逐项记录发射时钟延迟、起点 Q、时钟到 Q、各单元与互连增量、终点 D、捕获时钟延迟、周期、建立和不确定性。优化优先看占总数据延迟较大的可控部分,并确认是逻辑级数、单元慢、扇出还是互连长。
题 24
建立取最大时钟到 Q、最大单元/互连延迟和建立检查;保持取最小时钟到 Q、最小单元/互连延迟和保持检查。条件弧、输入转换、负载和分析角不同,最慢与最快传播甚至可能经过不同逻辑分支。
题 25
建立优化可能换用更快单元或缩短路径,使最早数据也更早到达,从而破坏保持。先确认两个报告和约束正确,再在最短路径针对性增加至少 12 ps 加裕量的延迟,随后重新检查该端点和全设计建立/保持。
题 26
确认协议确实只在第三个捕获边沿采样;发射使能与捕获使能可验证;列出建立边沿移动方式;同步调整保持检查,避免意外放宽过多;用断言/测试证明中间边沿不采样;记录起终点、周期数、模式和设计负责人审查。
题 27
普通 STA 检查各自时钟域内部路径、同步器后级和已定义接口;CDC 检查跨域结构、同步器、脉冲、数据一致性和复位;功能仿真检查握手、满空、数据顺序和异常恢复。单 bit 电平可用同步器;多 bit 数据不能逐位独立同步,通常使用握手保持、异步 FIFO 或编码协议。
题 28
验收应包含:RTL 无意外锁存器、多驱动和组合环;寄存器/存储器推断符合意图;综合网表端口、状态位和关键运算存在;所有时钟和同步 I/O 有最大/最小约束;未约束端点为 0 或有批准解释;所有路径组建立/保持 WNS 非负、TNS 为 0;例外逐条有功能证据;CDC 结构通过专门检查;网表/RTL 功能回归通过;归档版本、库、约束、分析角和报告。
35. 自测清单
若第 1~4 项不稳定,请重新画图 21-1、21-2;若第 5~9 项不稳定,请遮住答案重算例题 3~5;若第 10~12 项不稳定,请用图 21-6 为一个小模块列完整的“时钟—I/O—例外—CDC”约束覆盖清单。
36. 下一章衔接
综合和 STA 已经建立门级结构与时间预算。第 22 章将进入标准单元和物理实现流程:标准单元版图与工艺库怎样提供面积、功耗和时序模型,布局怎样决定互连,时钟树怎样产生真实延迟与偏斜,布线和寄生提取怎样把估计路径变成可签核分析的物理路径。