FPGA 专家 37:时序签核——让 WNS 为正只是及格线
本文是
fpga/专家层第 40 篇。STA 基础见 进阶 04,收敛手法见 专家 16,时序例外场景见 进阶 39。
一、签核 vs 收敛

日常收敛:默认角 WNS ≥ 0、功能能跑
正式签核:所有合法 PVT 角 × 所有模式 × 所有时钟对
setup + hold + pulse width + recovery/removal
约束 100% 完整、例外逐条有理由、目标速度等级| 慢角 | 快角 | |
|---|---|---|
| 主要风险 | setup(数据晚到) | hold(数据早到) |
| 频率关系 | 可降频兜底 | 与频率无关,任何频率都错 |
| 修法 | 流水线/优化/降频 | 加延迟(工具自动+手动复核) |
二、签核检查清单

- 跑全工具要求的 slow/fast × 电压温度角,WNS/TNS/WHS/THS 全绿;
- 时钟完整性:所有主/衍生时钟、内部时钟对、
set_clock_groups准确; - 零未约束:unconstrained paths、无时钟寄存器、漏 IO delay;
- 例外审计:每条 false_path/multicycle 有物理理由、范围最小、清单逐条过;
- CDC 与同步器清单一致(配合 CDC 报告);
- recovery/removal、最小脉宽、时钟偏斜;
- 多模式(功能/PR 配置/休眠)、分区边界;
- 在量产目标速度等级与锁定工具版本上签。
三、治理流程
- XDC 与 waiver 版本化,评审制;大改先 setup 后 hold,最后跨角点复核;
- 每次实现记录时序趋势,多实现种子/策略对比,防'这次过全靠运气';
- 发布比特流附签核包:工具版本、角点集、slack 摘要、例外/waiver、日志。
四、五种"假收敛"

只看慢角;漏约束的路径根本没被检查;过宽 false_path 掩盖违例;开发板快等级签核、量产慢等级翻车;ECO 后没全套重签。
五、签核方法学:多角多模、约束覆盖率与证据链
时序签核不是“综合后看一眼 WNS 为正”,而是建立一套覆盖所有工作情形、可审计、可复现的证据体系。ASIC 行业早已把签核方法学流程化,FPGA 团队在做高可靠/高频率/多工况产品时也应对齐其纪律,只是用 FPGA 的时序模型和工具替代 STA 签核工具。
多角(multi-corner)思想在 FPGA 上的对应是速度等级与工况裕量。FPGA 的延迟随工艺(speed grade,已固化在器件型号里)、电压、温度变化,工具时序报告基于带保守裕量的模型,但“典型工况收敛”不等于“慢 corner 收敛”。严肃项目要做的是:用最慢速度等级(或可采购到的最慢档)签核、在高温/低电压条件下实测降额、对关键路径在多个器件样本上量统计分布;工业温宽还要实际跑高低温。很多“常温正常、夏天现场挂”的事故,根因就是只在实验室舒适温度验证。对有动态调压调频的器件,要在每个电压/频率工作点分别收敛。
**多模(multi-mode)**指不同功能模式下时序不同:正常工作、配置/重配置中(含部分重配置的分区切换瞬间)、调试模式(插了 ILA/调试 hub 后布线和拥塞都变)、BIST 模式、低功耗/门控时钟模式、各种 IP 旁路/环回模式。每种模式的时钟拓扑、生成时钟、多周期/伪路径可能不同,STA 必须对每种模式各跑一遍并各自干净。一个经典坑是“功能版本收敛,为排查问题插入 ILA 后时序反而不过”——调试逻辑不是免费的,它要作为一个签核模式;PR 设计还要覆盖静态模块 + 每个可加载分区的组合。
约束本身需要验证和“覆盖率”。约束不是写完就对,常见缺陷包括:漏约束输入(某些管脚/生成时钟没进时钟域,工具按理想零延迟算,报出虚假绿)、错误的多周期/伪路径掩盖了真路径、时钟组设置过宽把本该检查的跨域也切掉了、外部 IO 的 input/output delay 缺失(板级时序完全没分析)。方法学上要产出几类证据:所有时钟节点及其交互关系清单(确认没有意外的未约束域间路径)、时序例外(false path/max delay/multicycle)的逐条评审记录和理由、零未约束端口/零无约束路径的检查、约束与原理图/时钟树一致性。很多团队把 90% 精力放在“修违例”,但一个错误的 false path 能让工具沉默地放过一条必坏的总线——约束审计比抠 0.1ns 更决定签核可信度。
证据链与可复现性让签核结果可被第三方(安全认证、客户、未来的自己)复核:固定工具大版本与补丁、固定 IP 版本和构建参数、签核用工程与发布比特流严格同源(禁止“报告工程”和“出片工程”分离)、归档完整报告(每时钟域 WNS/TNS/WHNS、时序摘要、DRC、利用率、拥塞、功耗)、git hash 与比特流 CRC 绑定。任何现场返回的问题,都能凭版本寄存器(见 20 比特流烧录与四方版本一致 manifest/门禁)回到当年的签核证据。报告解读上要看的不只是 WNS≥0:TNS(负裕量总和)反映面有多大、失败路径数、WHNS/WTNS(保持时间)、各域裕量分布(全片只有 0.02ns 裕量其实等同于没签)、以及同一路径跨构建的裕量波动趋势。
签核评审会建议作为硬关口:设计者讲解时钟结构、例外界限、最差路径及其合理性、资源/功耗/温度与降额、调试和 PR 各模式结果,评审者带着“这能不能在最慢器件、最高温、最低压、用十年后还工作”的问题挑战。签核的心态是证明它在边界仍然成立,而不是证明它在我桌上能跑。
六、STA 工作原理:FPGA 工程师该向静态时序分析要什么

要与时序报告有效对话,需要理解 STA 在算什么、为什么它“宁可错杀”、以及报告里每个数字的含义。STA 是静态的:它不仿真向量,而是把设计展开成时序弧(timing arc)组成的图——每个触发器到触发器的路径,从启动沿(launch edge)出发,累加时钟到源触发器的偏斜、源端 CLK-to-Q、组合逻辑延迟、布线延迟,得到数据到达时间;再从捕获沿出发,减去建立时间要求、加上捕获时钟偏斜,得到数据需求时间;两者之差即建立裕量 slack。保持时间检查用同一个边沿两侧的最快数据路径,确保数据不会冲掉旧值。工具对所有可能路径同时做这件事,与输入激励无关——这是它比仿真全面的原因(不依赖向量覆盖率),也是它会对“功能上不可能同时发生”的路径报违例的原因(它不懂功能,只看拓扑),这正是时序例外存在的理由。
时钟是 STA 的标尺,时钟模型错则一切结论失效。工具需要知道:每个主时钟(primary clock)定义在哪个管脚/端口、周期和波形;PLL/MMCM 产生的生成时钟(generated clock)及其分频/相移/反相关系;时钟延迟和不确定性(uncertainty,用于建模抖动、PLL 相位误差和估算偏差)。时钟偏斜(skew)= 捕获时钟与发射时钟到达时间之差,直接进入裕量公式;跨时钟域路径工具默认按同一时基检查,必须用时钟组/伪路径显式告诉它两个异步域无相位关系(CDC 的正确性靠同步器保证,STA 无法证明亚稳态概率,只能保证同步器自身不被当作普通路径误优化,见 专家 38)。读报告时第一件事是核对时钟摘要:周期、层级、交互关系是否符合真实时钟树,漏定义的时钟会让其下游被当作无时钟约束的“安全区”,制造虚假收敛。
四类路径要分清:内部 reg-to-reg、输入到 reg(input delay 建模板级/上游器件到达时间)、reg 到输出(output delay 建模下游建立要求)、纯组合 in-to-out。板级签核必须提供真实 input/output delay(同步系统里来自对接芯片手册和板长,异步采样输入给最大偏斜约束),否则 FPGA 边界之外的时序无人负责——这是“片内收敛、系统通信却错”的典型来源。还要理解最大/最小分析:建立用最大延迟(慢 corner),保持用最小延迟(快 corner);FPGA 布局布线后保持违例通常由工具自动插入延迟修复,但修复会改变布线并可能影响建立,两者要在最终状态一起看。
时序例外是给 STA 的“功能知识”,每一条都有严格语义:false_path 表示该路径永不需时序满足(慎用于总线:位间偏斜无人管);multicycle 放宽/收紧捕获或建立的周期数,必须同时评估保持约束是否要相应调整,且只在功能确实保证采样更晚时合法;max/min delay 给裸延迟上限/下限,常用于异步复位释放、跨域单 bit、I2C 类慢接口。例外的危险性在于它们全局、静默、可掩盖错误:一条过宽的通配可能切掉成百上千条真实路径。纪律是:最小化通配范围、一条例外一个理由、全部进版本库评审、定期用报告工具审计例外实际命中的路径(命中为空的过期约束要删,意外命中要拦)。
如何读一份路径报告(建立违例为例):从 Source Clock 到 Destination Clock 确认域关系;看路径要求的时钟沿和 Data Required Time;Data Arrival 拆成时钟网络延迟、CLK-to-Q、逐段逻辑/布线延迟——定位“哪一级吃掉最多”:是高扇入 LUT 链、进位链太长、跨 die/SLR、还是布线拥塞绕行;Logic Levels 给出组合级数,直接提示该插多少级流水线;再看时钟偏斜占比和 uncertainty。修时序的本质是改变这个算术式:减组合级数(pipeline/retime)、降扇出/复制寄存器、移动源宿物理距离、放松不真实的例外、或降频/换速度等级。STA 报告因此不只是“红绿通知”,而是设计微架构问题的定量地图。
七、签核阶段的物理与系统效应:电压、热、老化与板级
片内时序收敛只覆盖了“芯片内部、常温常压、全新器件”这一个点。真正的签核还要回答一系列片外和时间维度的问题:电源噪声让瞬时延迟变长、高温使载流子迁移率下降、器件长期老化、板级时钟和接口有自己的抖动预算。忽略这些的“收敛”只是脆弱的名义收敛。
电源分配网络(PDN)与时序的耦合在先进 FPGA 上越来越紧。逻辑翻转引起的动态压降(dynamic IR drop)让局部核电压瞬时下跌,触发器和互连延迟随之上升,可能在特定高翻转模式下制造时序违例——这种失效与数据模式相关,常温常规测试难复现。签核阶段应:跑厂商功耗完整性分析(向量驱动或无向量最差估计),检查热点区域压降裕量;用真实高翻转激励(不是空转测试)做板上实测:在关键电源轨用高带宽探头测动态纹波,或用片上监控读工作压降;电源树设计留足裕量并避免大功耗逻辑集中在远离开关电源点的区域。同步开关噪声(SSO,大量输出同时翻转在地弹/电源弹上产生噪声)要通过 IO bank 分组、合理配置驱动强度和同步翻转率来控制,这些本质也会体现为接口时序噪声(SI 细节见 专家 42)。
热效应直接进入时序账。结温升高时传播延迟增加(在 FPGA 的常用工作区间通常是单调的),且高温常与高负载/高占空比并存,最坏情况是“满载跑热之后”。签核证据应包括:热分析或实测结温(环境温度上限 + 满载功耗 + 散热器配置)、在温度箱里于温度上限做功能与性能压力测试、确认散热失效(风扇停转)时有温度告警和降频/关断保护。还要留意温度与电压的联合 corner:低温对某些互连/保持检查反而更严(快过程度不同),高可靠产品高低温两端都要跑。
老化与长期可靠性:电迁移(EM)、偏置温度不稳定性(BTI)、热载流子效应(HCI)会使器件在寿命期内逐渐变慢,FPGA 厂商的时序模型通常已包含面向额定寿命的保守度,但系统设计师的责任是不超额运行——超频、超压、超出数据手册的结温都会让内置裕量失效。严肃签核应明确声明:频率/电压只在厂商支持范围内使用、温升满足寿命计算、保留的时序裕量足以吸收批次离散和老化漂移;用降额(derating)表把这些写成工程规范。现场升级提高频率(“现场解锁性能”)必须重走完整签核,不能只改一个 PLL 参数。
板级时序与时钟预算是芯片签核的延伸。无论内部多干净,系统通信还要把下列项纳入预算:时钟源抖动(phase jitter 对高速收发器、建立时间都有贡献)、PLL 输出抖动与同步切换毛刺、时钟缓冲与走线偏斜、对接器件的建立/保持与抖动、FPGA input/output delay 与实际板长。高速并行接口(DDR、并行 ADC、LVDS 通道)应做板级对齐的时序签核:用器件时序模型 + 板长计算建立/保持裕量,必要时在 FPGA 内用 IDELAY/ODELAY/ISERDES 做可标定的相位训练(DDR 控制器的 read/write leveling 就是自动化的板级时序校准)。高速串行链路则靠眼图、预加重/均衡、PRBS 误码率测试验证(见 专家 42)。复位、配置、热插拔等瞬态过程的时序(配置完成前各 IO 的状态、上电斜坡期间的误动作)也属于系统签核范围,功能安全场景尤其要求证明上电瞬间不会驱动危险输出。
把这些汇总,签核的空间维度是“die—封装—板—系统”,时间维度是“制造离散—初始化—运行—老化”,环境维度是“电压—温度—工艺”。片内 STA 绿灯只是入场券,产品级签核要在这个三维空间的角点组合上给出证据。
八、签核治理:让收敛成为可管理的工程过程
时序不是临交付靠英雄熬夜“抠”出来的,而是在整个项目周期被管理出来的。治理(governance)回答的是:谁在什么时候、以什么标准、用什么流程,保证设计从第一周起就在通往收敛的轨道上,而不是集成周才发现结构性问题。
时序预算要前置并逐级分解。架构阶段就定系统级时序目标(接口速率、各时钟域频率),再分解到模块:每个模块负责人拿到明确的频率、输入/输出寄存器化要求、例外预留、资源预算(拥塞直接影响布线延迟)。模块级要能独立综合并以目标频率自检(自包含的块级 OOC/out-of-context 综合是常用手段),避免“每块都说自己没问题、拼起来全片不过”的集成赌局。预算要含现实裕量:顶层布线比块级差、跨 die/SLR 更差、插入调试逻辑会变差、换更小速度等级会差——在目标频率之上留 10%~20% 工程裕量是成熟做法,而不是把指标正好定在器件极限。
把时序纳入持续集成和趋势管理(CI 建设见 专家 46):每次合入跑快速综合/实现,自动发布每时钟域 WNS/TNS、资源、功耗和新增例外表;时序裕量像测试覆盖率一样画趋势线,任何合入导致裕量显著下降即标红讨论。好处是把“最后一周的灾难”变成“每周可见的曲线”:违例在只涉及一两个模块、引入者还熟悉代码时就被处理。分支管理上,主干必须始终保持签核级干净;feature 分支带着已知时序债合入要显式登记并设偿还节点。
收敛作战的方法要标准化。集中收敛阶段:①先保证约束和时钟结构正确(错误约束下的修违例是浪费);②先修保持/大违例再修小违例(保持修复插入延迟会影响建立;先让架构级长路径变短——加级、改编码、移存储——再微调);③按违例路径的共同根因聚类(同一组路径通常同一个结构问题,一次改一片);④用物理约束(Pblock/floorplan)处理跨区/SLR 和拥塞,但约束只在确有物理证据时加,过早锁死布局会适得其反;⑤每轮改动控制范围,跑完对比趋势,避免一次性大改导致无法归因。收敛会议用数据开:最差十条路径、域级摘要、与上轮 diff,而不是“感觉差不多了”。
签核与配置管理的纪律:签核报告与发布比特流同源生成;工具版本、IP 版本、约束文件全部锁定并归档;时序例外随代码 review;为现场保留版本和健康遥测(见 20 比特流烧录与四方版本一致 manifest/门禁)。对维护期改动,建立“影响范围 + 必须重跑的签核模式”的规则:改时钟结构 → 全模式全角重签;只改局部数据通路 → 至少全片实现确认无布线连带;仅软件/参数改动 → 明确无需重综合的依据。禁止在没有完整实现的情况下发布“只改了一行 C”的心理安慰——任何比特流变更都是一次新的签核对象。
最后,治理要服务于诚实的状态文化:项目任何时刻都能用一张仪表盘回答“当前每个时钟域在最慢器件上的裕量是多少、最差路径是什么、时序债有哪些、距签核还差什么”,数据自动产生、对全员可见。管理者据此做范围/进度决策(砍功能保频率,或提前降频定档),工程师据此做技术决策。时序签核从个人技能升级为组织过程,团队才不会在每个项目末尾重复同样的救火循环。
九、典型“假收敛”与签核检查清单
把最常见的虚假/脆弱收敛形态和最终签核清单汇总,供评审逐条核对。
假收敛一:漏约束时钟。生成时钟没定义、时钟引脚被误标为普通数据、内部逻辑用了未声明的门控时钟,STA 不分析或按理想时钟算,报告一片绿,硅上必坏。检查:时钟摘要图完整覆盖每个实际时钟;所有时钟有源、每个时序器件能追溯到时钟;无 unconstrained internal path 告警。
假收敛二:过宽的时序例外。通配 false path 切掉整层交互、multicycle 没配套保持分析、异步复位通配误伤正常路径。检查:每条例外有评审记录与理由、命中路径列表逐条审过、无过期空命中、跨域例外只覆盖同步器边界(CDC 正确性另由结构检查保证)。
假收敛三:报告工程 ≠ 发布工程。为跑报告删掉调试/监控逻辑、换了优化选项,发布比特流从未完整签核。检查:签核与发布同一工程同一参数产出,比特流 CRC 与报告、git hash 绑定归档。
假收敛四:只看建立不看保持、只看 WNS 不看分布。保持违例在快 corner/低温才现形;WNS=+0.01ns 等同于没签。检查:建立/保持双干净,TNS/失败路径数为零,各域裕量有明确最低门槛(如 ≥0.2ns 或团队规范值),报告跨构建无异常波动。
假收敛五:单模签核。未覆盖 PR 切换、调试插桩、BIST、低功耗、环回各模式。检查:每个功能模式独立 STA 全绿,含“调试中”的发布候选。
假收敛六:无视物理与系统。温压角点、动态压降、板级 input/output delay、时钟抖动预算、老化降额全无。检查:最慢档/高温/低压实测或分析闭环,板级时序与 SI/PI 证据齐备(见 专家 42)。
假收敛七:用非法手段“压绿”。大面积手动锁布局、把约束放宽到目标频率之下、在工具选项里关掉优化“消除”违例。检查:任何非默认选项和物理约束要有书面理由,签核频率等于实际运行频率。
最终签核清单:①全部时钟(含生成时钟/级联/门控使能)已定义且交互关系正确;②每时钟域、每种模式建立与保持均收敛,裕量达团队门槛,WNS/TNS/WHNS/WTNS 归档;③无未约束路径/端口,input/output delay 与板级设计一致;④时序例外逐条评审、最小化、命中可审计;⑤CDC/RDC 经结构检查与必要形式验证(见 专家 38);⑥在最慢速度等级 + 高温/低压(或规定降额)下实测通过;⑦PR/调试/BIST/环回等模式均签;⑧功耗/热/压降分析与实测裕量充分;⑨资源与拥塞有裕量,无局部过密;⑩工具与 IP 版本锁定、报告与发布比特流同源、全部证据可凭版本号追溯(见 20 比特流烧录与四方版本一致 manifest/门禁)。十项齐备,时序才是被“签核”而非“碰巧通过”。
十、签核后的变更管理:ECO、重收敛与版本回归

签核不是项目终点,此后还会有缺陷修复、客户需求和现场问题引出的变更(ECO,工程变更指令),而“只改了一点点”恰恰是后期引入时序回归的高危场景。签核后的任何 RTL、约束、综合选项甚至 IP 小版本变更,都必须按其影响范围分级走重收敛流程,禁止用“改动很小、不用跑全量”的直觉放行。
变更分级:一级是纯局部逻辑且不碰时钟结构、IO、跨域接口(如某状态机内部加一个计数分支),仍必须跑全片实现(布线会因新逻辑全局重排)和该时钟域时序,但可复用既有签核评审结论;二级是涉及时钟、复位、IO 延迟约束、时钟域交叉或接口时序的改动,必须全时钟域、全模式重跑 STA 与 CDC/RDC 检查并重做相关板级时序验证;三级是更换器件速度档、工具大版本或核心 IP,等同重新签核,温压角点和物理实测全部重来。每一级都明确“必须重跑哪些证据”,使变更成本可预期,也防止小变更搭车大改。
ECO 阶段的物理意识:后期为缩短迭代,工具支持在尽量保留既有布局布线的前提下做局部 ECO,但保留布线意味着新逻辑的时序可能更差,也可能因拥塞改动相邻路径;必须检查 ECO 后不只是改动路径,最差路径集合是否整体变化(对比前后报告)。任何为过时序而临时加的例外、降频、关检查,都要登记为技术债并在正式版本清除,不能留在产品里。多个并行修复分支合并时,要以合并后的整体结果重新签核,不能只验证各分支单独通过。
版本回归与证据更新:每次签核产生新版本,归档的报告、约束、例外清单、资源功耗数据都与版本绑定,现场版本寄存器能反查这套证据(见 20 比特流烧录与四方版本一致 manifest/门禁);时序趋势库保留每个版本的最差路径与裕量,回归问题(某路径裕量突然恶化几百皮秒)即使仍为正也要分析,因为它常预示结构性问题。变更引入的调试版本(带 ILA)与发布版本分别签核、分别留档,发布制品绝不允许用调试版报告顶替。
组织纪律:冻结后的变更走变更评审会,申请人说明必要性、影响面、分级和回归证据,质量/架构负责人批准;紧急现场修复可先合入但必须在约定时间内补齐全套签核(先上车后补票要留痕、有时限)。把签核后的变更当作正式的配置管理过程而非开发者私事,才能保证“上一次签核的结论”在系统整个生命周期里始终对得上现场正在运行的那个比特流。
总结
时序签核 = 全 PVT 角 × 全模式 × 全时钟对的 setup/hold 完整性证明:慢角保 setup、快角保 hold,真正的难点不是修违例而是保证每条路径都在检查范围内——约束完整、例外可审计、在目标速度等级和锁定工具上出最终报告。