4.2 时序例外:伪路径与多周期


4.2 时序例外:伪路径与多周期

本节摘要:例外声明从默认检查里划出豁免区:伪路径整条不查,多周期把检查窗口拉宽,时钟组让异步域互不判卷。每一条例外都是把责任从工具转回设计,本节讲清三类例外的适用边界、叠加规则与最常见的滥用形态。

为什么工具会查出一堆根本不存在的"违例"?因为默认检查对所有同步路径一视同仁:假设每个捕获沿都要采每个数据。真实设计里存在三类偏离——路径根本不传输有效数据(异步跨域、配置位)、数据隔几拍才被采一次(慢速使能通路)、或者有自定义的延迟上限。例外层就是为这三类偏离准备的:set_false_path、set_multicycle_path 与 set_max_delay/min_delay,外加域级别的 set_clock_groups。一条例外等于对工具说:这条路径别按默认规则判卷,判错了不算工具的账,算设计的账。

伪路径:整条不查,责任全额转移

set_false_path 适用于"数据不会被采"或"采错了也无妨"的路径。两大正当场景:一是真正的异步跨域——两个异步时钟域之间已经用了双触发器同步器,路径的功能正确性由同步器结构保证,时序收敛无意义,查了只会产生永远修不掉的假违例;二是静态配置路径——上电配置后才稳定的信号(测试模式选择、冗余修复位),它们永远不变,不存在时序问题。

# 异步跨域:clk_a 域到 clk_b 域,已由两级同步器保护 set_false_path -from [get_clocks clk_a] -to [get_clocks clk_b] # 静态配置位:上电写一次,此后不变 set_false_path -to [get_pins u_cfg/u_mode_reg*/D]

滥用形态也要点名:为了报表好看,把"难收敛的同步路径"标成伪路径,是收敛工程里最恶劣的自欺——工具不再报告,硅片照常违例。评审一条伪路径声明的三个问题:路径两端真的异步吗?跨域保护结构真的存在吗(几级同步器、什么类型)?如果伪路径其实偶尔有效,失败模式是什么?三个问题答不全,这条例外就不该存在。

多周期:窗口拉宽,保持规则别忘改

set_multicycle_path 处理"数据隔 N 拍才被采"的慢速通路:使能信号门控的宽总线、低速配置接口。默认检查在下一个沿,声明 multicycle 2 之后建立检查移到下下个沿,可用时间翻倍——这本来就是电路的真实行为。陷阱在保持一侧:多数工具在声明建立多周期后,会同步把保持检查窗口也移动,需要显式用 set_multicycle_path -hold 把保持检查拉回默认位置,否则保持账会在一个物理上不存在的窗口里做检查,结论毫无意义。

# 慢速使能通路:使能 4 拍有效一次,数据被第 4 拍捕获 set_multicycle_path 3 -setup -from [get_pins u_en/reg*/Q] -to [get_pins u_slow_bus*/D] set_multicycle_path 2 -hold -from [get_pins u_en/reg*/Q] -to [get_pins u_slow_bus*/D]

(上面示例里 setup 值 3 与 hold 值 2 是"沿偏移数"的通用写法:建立检查从默认的下一沿移到第三沿,保持检查相应回拉两沿,落回同一捕获沿附近——具体沿的记法各工具文档有细节差异,写完必须用工具的 check 或报告头部确认实际检查沿。)

图:三类例外对检查窗口的改变

图:三类例外对检查窗口的改变

例外与两本账的交互速查

每类例外对两本账的影响不同,动手前值得过一遍这张速查表。伪路径:两本账同时豁免——这正是它危险的地方,有人只想免掉建立检查却顺手把保持也免了,短路径抢跑风险被静默。多周期:建立窗口按倍数拉宽,保持窗口靠 -hold 项调回,两本账要分别确认。max_delay/min_delay:max 管建立方向的绝对上限,min 管保持方向的下限,异步接口路径常成对声明。时钟组:域间两本账同时豁免,等价于批量伪路径,适用前提是域间确无同步数据交互。记住一条总原则:例外豁免的永远是"工具的检查",不是"物理的规律"——检查免了,物理风险还在设计手里。

时钟组与作用域:域级豁免与叠加规则

set_clock_groups -asynchronous 一次性声明两个时钟域之间所有路径互不检查,是跨域众多时的省力写法,效果等价于成对的伪路径声明但更不容易漏;-logically_exclusive 与 -physically_exclusive 则处理互斥模式(如功能时钟与测试时钟不会同时存在)。与逐条 set_false_path 相比,时钟组的好处是域级语义清晰、新增跨域路径自动覆盖;风险也在于此——如果两个域其实有同步交互,域级豁免会把真实的违例全部藏起来。声明时钟组前先画出时钟树拓扑图,逐对确认异步关系。

例外的作用域由 -from、-through、-to 三个锚点决定,叠加规则是"更具体的例外覆盖更宽的例外"。工程上的纪律:锚点用引脚或端口而少用网络名(网络会被综合改名,例外随改名失效或错挂);例外交给版本管理并在注释里写明申请人与原因;每次网表更新后重跑例外审计(4.3),确认每条例外仍然命中预期的路径集合——工具会报告"例外命中了零条路径"这类异常,别忽略它。

一条收尾的提醒:例外的数量本身是一个健康度指标。健康设计的例外总数通常只占路径数的千分之几,且每条都有明确的结构理由——当例外清单开始变厚,它描述的已经不是设计的意图,而是收敛的困难。把例外增长率纳入每周的收敛例会指标,是发现"用约束掩盖时序问题"最灵敏的探测器。

本节要点回顾

本节要点回顾

  • 三类例外三种语义:伪路径整条免查、多周期拉宽窗口、max/min_delay 换成绝对值判定,时钟组做域级批量豁免。
  • 多周期必须配套 hold 回拉:只设 setup 多周期而不管保持窗口,是各工具文档反复警告的头号误用。
  • 例外即责任转移:签核对豁免路径的保证来自设计结构与评审证据,而不是工具。
  • 作用域纪律:锚点用引脚端口、注释写明缘由、网表更新后重审命中数。

例外划定了"不查"与"怎么查"。但所有这些声明的正确性本身,谁来检查?下一节的约束验证回答这个问题:check_timing 报告、跨域审查与例外审计三件套。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U