这一篇在干嘛?

约束下好了,Flow 跑完了,接下来回答那个终极问题:我的设计时序收敛了吗? TD 软件提供五类时序报告:Timing Report(主报告,看违例、看路径详情)、Logic Level Report(看逻辑级数)、Check-Timing Report(查约束漏没漏)、Clock Tree Report(看时钟网络)、Clock Intersection Report(看时钟间关系)。上一篇讲了用 Timing Wizard 下约束,这一篇教你把报告读明白、把违例路径定位到源代码。

Timing Report:主时序报告

快速判断收敛:Timing Status

路径详情五段式解读

跨时钟域与例外路径报告

Logic Level Report:逻辑级数统计

Check-Timing Report:约束完整性检查

Clock Tree Report:时钟树拓扑

Clock Intersection Report:时钟交叉关系

Timing Report:主时序报告

Timing Report 是静态时序分析的主报告,回答”设计是否存在 setup/hold 时序违例、是否有 Clock Skew 过大、Net 延迟过大等问题”,是调整源代码、时序约束或优化策略、达成时序收敛的依据。它支持全路径和单路径报告查看,支持多个报告同时打开。

启动前提:Flow 运行完 Optimize GateOptimize PlacementOptimize Routing 任一阶段,并执行 Open Run 后即可打开。两个入口:

  1. 展开 Design Summary → Timing Summary,双击 Timing Report;
  2. 菜单栏 Tools → Timing Analyzer → Timing Report。

Timing Option 设置:打开时会弹 Timing Option 窗口。在 Options 页点 Ok 打开全路径报告;在 Target 页点 Ok 打开指定路径报告(From/Through/To 至少填一个,否则弹警告)。

  • Report Name:报告名默认按 Flow 阶段命名——Optimize Gate 后为 synthesis_timing_report_1、Optimize Placement 后为 placed_timing_report_1、Optimize Routing 后为 routed_timing_report_1,序号递增,可自定义。
  • Options(全路径):Path Delay Type 固定 Max_Min(setup/recovery 与 hold/removal 都分析);Multi Corner 固定 Slow_Fast(快慢角点都分析)。Path Limits 里 Endpoints per path group(每组路径终端数,默认 10)与 Paths per EndPoint(每终端路径数,默认 1)决定报告规模。勾选 Include Ignored(默认)会把被约束排除的路径也列进 Ignored Report;勾选 Violation Only 则只显示违例路径(与前者互斥)。还可勾选 Export Timing Report 导出 .txt/.rpt/.timing 文本。
  • Target(单路径):From/To 支持 get_ports、get_pins、get_regs、get_clocks、get_cells 过滤,Through 只支持 get_pins、get_nets;勾选 Logic Level 抽取逻辑级数最大的路径(默认抽取 slack 最差路径)。

常见坑:为什么报告里快慢角点都分析?

静态时序分析按最恶劣情况检查:setup/recovery 检查用”源时钟路径 Max + 数据路径 Max + 目的时钟路径 Min”(分别在 slow 和 fast corner 各来一遍);hold/removal 反过来,源时钟和数据路径用 Min、目的时钟用 Max。所以你会在一条路径报告里同时看到 slow 和 fast 两个 Check_Corner 的记录——这是刻意为之,不是 bug。按最恶劣情况收敛了,设计在各种工况下才都满足时序。

打开后的主界面左侧 Report Navigation 分 8 个 Group;哪个 Group 里出现了负 slack,旁边就会挂黄色叹号警告图标,扫一眼导航栏就知道问题藏在哪。上方搜索框可按关键字过滤分类。

Timing Report 主界面:左侧 8 个 Group 导航,右侧为 Timing General 信息

导航栏 8 个分类是:Timing General(TD 版本/创建时间/器件/STA coverage 覆盖率)、Timing Settings(Timing Option 参数与 SDC 文件信息)、Timing Status、Intra-Clock Paths、Inter-Clock Paths、IP Timing Report、Timing Exception Report、Ignored Report。

快速判断收敛:Timing Status

打开 Timing Status,上方 Clock Summary 逐时钟列出统计信息,下方 Global Status 给出全局汇总。拿到报告先看这张表,10 秒内判断有没有违例:

Timing Status 界面:Clock Summary 与 Global Status,红色负值为违例

Clock Summary 关键条目含义(完整表):

条目含义
Name时钟名
C-Freq(MHz)SDC 约束的时钟频率(Constraint Frequency)
SWNS(ns)Setup 检查最差路径 Slack;负数(红色)= 该时钟域有 Setup 违例
STNS(ns)Setup 负 Slack 总和,无违例则为 0
HWNS(ns)Hold 检查最差路径 Slack;负数 = 有 Hold 违例
HTNS(ns)Hold 负 Slack 总和
Skew(ns)时钟偏斜
Fanout时钟驱动扇出数
Max_Level最大逻辑级数
R-Period / R-Freq报告分析出的时钟最小周期 / 最大频率
CC-From / CC-To该时钟是否作为跨时钟域路径的 launch / capture 时钟

Global Status 两行更简单:WNS(所有路径最差 slack,含 Timing Exception 路径)与 TNS(负 slack 总和)。Setup 和 Hold 各一行,WNS ≥ 0 即收敛

注意区别:Global Status 的 WNS/TNS 统计了所有 Timing Path(含多周期路径、set_max_delay 等例外约束路径的违例),而 Clock Summary 的 SWNS/HWNS 只统计时钟本身的时序状态,不含例外路径。两个数对不上时别慌,是口径不同。

Clock Summary 标题栏可右键勾选显示项,点 more 可批量多选,Reset to Default 恢复默认。

路径详情五段式解读

Intra-Clock Paths(同时钟域)与 Inter-Clock Paths(跨时钟域)的路径展示方式一致,层级从外往里是:时钟 Group(按 Launch/Capture 时钟对分类)→ Max Paths / Min Paths。Max Paths 对应 Setup/Recovery 检查,Min Paths 对应 Hold/Removal 检查。

点击 Max Paths,右侧列出 Timing Option 设置条数的路径列表,每行字段:Start_Point / End_Point(路径起终点)、Launch_Clock / Capture_Clock、Check_Type(Setup/Recovery/Hold/Removal)、Check_Corner(fast/slow)、Slack(负数即违例)、Logic_Level、Max_Fanout、Requirement(延迟裕量)、Clock-Skew、Data-Path-Delay 及 cell/net 占比。上方搜索框可按关键字过滤路径。

双击任意一条路径,上方展开该路径的五段式详情:

双击路径后展开的五段式详情:Summary / Launch Clock / Data / Capture Clock / Other

五段内容:

  • Summary:汇总——Slack、Begin/End Point、Budget(延迟预算)、Data Path Delay、Clock Skew、Logic Level、Clock Uncertainty。
  • Launch Clock:从时钟源点到起点寄存器时钟引脚的时钟路径延迟。
  • Data:数据从起点寄存器输出到终点寄存器经过的所有延迟——优化主要看这一段,逐行有 Delay Type、Location(坐标)、Incr(延迟增量)、Path(累计)、Level、Netlist Info(对应网表节点,含源码文件与行号)。
  • Capture Clock:从时钟源点到终点寄存器时钟引脚的时钟路径延迟。
  • Other:终点需满足的建立/保持时间、Clock Uncertainty(软件默认 + 用户设置)、以及 CRPR(共同路径时钟悲观裕量去除)。

定位违例的思路:从列表里挑 Slack 最负的路径 → 双击看 Summary 确认 Budget 与 Data Path Delay 的差距 → 展开 Data 找 Incr 特大或逻辑级数高的节点 → 根据 Netlist Info 里的源码文件/行号回去改代码(加流水寄存器、减少组合逻辑级数)。路径命名规则:/ 表示层级关系,| 表示并联关系,. 表示从属关系。

IP Timing Report:按 IP 层次化例化路径 → IP 例化编号 → 报告类型逐级展开,显示模式与主界面一致。注意其中 Input Timing 指 IP 输入端口的 Input Delay 分析,Output Timing 指 IP 输出端口的 Output Delay 分析;IP 的 Ignored Path 归入主界面 Ignored Report 的 IP 分类。

跨时钟域与例外路径报告

Timing Exception Report:显示被 set_multicycle_pathset_max_delayset_min_delay 等例外约束的路径的分析结果。层级为:约束编号 Constraint* → 约束状态 → Max/Min Paths。约束状态三种:

条目含义
ConstraintSDC 约束命令
Total Path该约束下的路径总数
Active约束有效的路径数
Shadowed被更高优先级 SDC 命令屏蔽的路径
Ignored被伪路径约束要求忽略的路径

右侧同时显示 SDC 命令原文与统计信息。如果发现约束被 Shadowed,说明有优先级更高的约束把它盖掉了,效果与预期不符,要回头理约束顺序。

Ignored Report:显示被你”主动豁免”的路径,按约束命令类型分类:

  • Async/Exclusive Groupsset_clock_groups 忽略的路径,按 Launch→Capture 时钟对展示。因为不再分析,只列 Start/End Point、时钟对、检查类型和数据路径信息。
  • False Pathset_false_path 忽略的路径,按约束编号分类,约束来源分 Flow(用户 SDC)和 IP(IP 自带 SDC)两类。

这个报告的价值在于核对豁免范围:如果某条本该分析的路径出现在这里,说明约束写宽了,会有掩盖真问题的风险。

Logic Level Report:逻辑级数统计

时序不收敛时,先看逻辑级数:一条路径串了十几级 LUT,延迟必然大。Logic Level Report 统计所有时钟驱动的时序路径逻辑级数分布。Flow 跑完 Optimize RTL 后,经菜单 Tools → Timing Analyzer → Logic Level Report 打开。

Options 里选 Default(统计各时钟全部路径的逻辑级数分布)或 Worst(只统计 setup slack 最差的 N 个终点,N 默认 1,最大 10000),可勾选导出 .txt。

Logic Level Report 主界面:各时钟路径按逻辑级数 0~30+ 的分布统计

Default 配置的表格:Clock-Name 列是时钟名,Max_Level 列是该时钟驱动路径的最大逻辑级数,标题栏 0~30+ 是级数,单元格数字表示该时钟下该级数的路径条数。蓝色数字可点击,下方展开对应路径列表(最多 10 条,含 Slack、Logic_Level、Start/End Point 等),再双击可看五段式详情,与 Timing Report 完全一致。

判读经验:绝大多数路径应集中在低级数区(比如 ≤4 级);如果某个时钟在 10+ 列还有大量路径,而它的约束频率又高,时序违例大概率就出在那批路径上。

Check-Timing Report:约束完整性检查

写漏约束比写错约束更隐蔽——工具不知道你的时钟多快,就只能按默认分析,报告”看起来没问题”其实是没分析。Check-Timing Report 专治这个:检查该约束而未约束的时钟和输入输出管脚。Flow 跑完 Optimize RTL 后,经 Tools → Timing Analyzer → Check-Timing Report 打开。

Check-Timing Report:四项检查的未约束数量统计

左侧导航四项,右侧表格列出 Timing Check(检查项)、Count(未约束个数)、Severity(影响等级):

检查项内容
no_input_delay未做 set_input_delay 的输入管脚
no_output_delay未做 set_output_delay 的输出管脚
no_clock未约束频率的时钟
dummy_node时序孤立点(未被任何时序路径覆盖的节点)

全部约束到位时对应项显示空白。注意 dummy_node 里可能存在预期内的悬空(如 const lut 输出引脚、配置相关 IO 引脚),需对照网表自行判断,无法确定时联系原厂技术支持。

竞赛建议:提交作品前跑一遍 Check-Timing,把 no_clock 清零、no_input_delay/no_output_delay 清零(或确认为故意豁免),能避免”评审时发现关键时钟根本没被分析”的尴尬。

Clock Tree Report:时钟树拓扑

Clock Tree Report 展示时钟网络拓扑结构和最大时钟偏差(Max Skew)。Flow 跑完 Optimize Gate / Placement / Routing 任一阶段并 Open Run 后打开;注意 Gate/Placement 阶段只有拓扑,没有 Max Skew(Routing 后才有)。入口:Design Summary → Timing Summary 双击,或 Tools → Timing Analyzer 菜单。

Clock Tree Report:上方 Property 属性面板,下方时钟树拓扑

时钟树概念:树根是时钟源点,叶子是时序器件(寄存器)的时钟引脚,树干是途经的布线与缓冲单元。信号逐级缓冲传播,所以各叶子节点的高度(延迟)可能不同——这个差异就是 skew,skew 过大会吃掉时序裕量。

树展开层级:第一级时钟树名(括号内统计时钟数)→ 第二级各时钟名(频率 + 类型)→ 第三级 TOPOLOGY(拓扑)MAX_SKEW(最大偏差)

  • TOPOLOGY:以时钟驱动前后关系的引脚为单元逐级描述。叶子按两级折叠:第一级为路径类型——GLOBAL_NETWORK(全局时钟网络)/ LOCAL_NETWORK(本地互联)/ NONCLOCK(终端引脚作非时钟用途);第二级为进入的逻辑单元(MSLICE、LSLICE、ERAM 等)。
  • MAX_SKEW:源点到任意终端引脚最大延时 − 最小延时。分 MAX RISE SKEW / MAX FALL SKEW;引脚按 FASTEST(最短延时集合)/ SLOWEST(最长延时集合)/ MUTUAL(最长最短均相同)分组。注意:因 CRPR 去除共同路径差异,括号内报告值与 SLOWEST−FASTEST 手算值可能不完全相等。

界面工具栏:箭头按钮折叠/展开时钟树;设置图标打开 Clock Tree Options(Visibility 页可关 Show Topology/Show Max Skew、按时钟类型筛选显示;Colors 页双击色块自定义各节点颜色;Reset 复位);查找框支持按 Clock/Pin/Net/Clock Group 过滤关键字。

右侧 Property 面板与拓扑联动,点击任意节点以表格显示:name(结点名)、driver(驱动结点)、arc_type(结点属性)、net(相连线网)、inst(cell 例化名)、Inst_loc(坐标)、Delay(slow/fast corner)(快慢角点延迟)。

Clock Intersection Report:时钟交叉关系

多时钟设计的全局视图:任意两个时钟之间有没有路径、什么关系、有没有违例,一张表 + 一张图看全。Flow 跑完 Optimize Gate 并 Open Run 后,经 Design Summary → Timing Summary 双击或 Tools 菜单打开。

主界面下方是数据表,上方是 N*N 方格图:

Clock Intersection Report:上方 N*N 方格图,下方时钟对数据表

数据表:每行是一个”单向”时钟对(Source Clock → Destination Clock);两时钟互有收发就是两行。可勾选 Show Max Data(Setup 分析,默认)/ Show Min Data(Hold 分析)、Slow Corner(默认)/ Fast Corner 切换显示口径。关键字段:

条目含义
Edges (WNS)最差路径的发送/捕获时钟触发沿
WNS (ns)最差路径 slack,<0 即违例
TNS (ns)该时钟对负 slack 总和
Total Endpoints / Total Path路径终端总数 / 路径总数
Timing Req (WNS)路径延迟预算
Clock Pair Classification时钟对分类(下表)
Inter-clock Constraints时钟间约束状态(见方格图颜色)

Clock Pair Classification 标签:IGNORED(被 clock_groups/false_path 豁免)、VIRTUAL(至少一端是虚拟时钟)、DERIVED(至少一端是 derive_clocks 生成的时钟)、NO_COMMON_MASTER(两个时钟来自不同 Primary Clock)、NO_EXPAND(完全异步,1000 周期内找不到重合沿)、CLEAN(同属一个 Primary Clock 且有限时间跨度内同步)。

N*N 方格图:纵向 Source Clocks、横向 Destination Clocks,每个格子按 Inter-clock Constraints 状态着色,是数据表的可视化映射:

N*N 方格图:TIMED_SAFE 绿、TIMED_UNSAFE 红、FALSE_PATH 蓝等颜色映射

七种状态及默认颜色:NOPATH 灰(无路径)、FALSE_PATH 蓝(伪路径豁免)、EXCLUSIVE_GROUPS 紫(时钟组豁免)、TIMED_SAFE 绿(同步关系且已分析)TIMED_UNSAFE 红(异步关系且仍在分析——重点盯)、PT_FP_SAFE 青、PT_FP_UNSAFE 橙。

红色格子的含义要正确理解:两个时钟明明是异步关系,却没有豁免约束,工具在硬分析一条物理上不可能收敛的跨域路径。正确做法不是调低频率,而是确认跨域逻辑用了同步器(两拍打拍/异步 FIFO/握手),然后用 set_clock_groups 或 set_false_path 豁免。

右键快捷操作:在数据表或方格图选中某时钟对,右键可 Report Timing(直接调出该时钟对的时序报告)、Set Clock Groups / Set False Paths / Set Multicycle Path / Set Max Delay(跳转 Timing Wizard 生成对应约束,期间 Warning 弹窗点 Continue)、以及复制整行信息或时钟对名字。跳转约束时 Clock Intersection 不用关闭,可以连续处理多个时钟对。

通关标准:

  • 打开 routed 阶段 Timing Report,通过 Global Status 的 WNS/TNS 在 1 分钟内判断 setup/hold 是否收敛。
  • 能对任一违例路径完成”列表 → Summary → Data 段 → 源码位置”的完整定位,并说出 Budget 与 Data Path Delay 的关系。
  • 能用 Clock Intersection 方格图找出所有 TIMED_UNSAFE 时钟对,并给出对应的豁免约束方案。