您好,欢迎光临凡亿教育!
服务热线:15989478308(同微信)

setup放宽两拍,hold为何也跟着变?

发表时间:2026-08-17 14:30:07

setup放宽两拍,hold为何也跟着变?

set_multicycle_path不是给路径加时间,而是告诉分析器换一组发射、捕获与保持边沿

0.png 

一条组合逻辑明确允许两拍完成,工程师给它加了-set_up 2,setup报告立刻变绿。可重新跑hold时,路径关系却变得奇怪。问题不在工具“多管闲事”,而是setup边沿后移后,hold检查的边沿也可能跟着移动。

多周期路径成立的前提,是功能设计确实不在每个时钟边沿采样数据,比如寄存器使能只允许每两拍更新一次。约束不能替代这段功能结构。

工程结论是:setup与hold要从同一张时序图推导,不能只写一条setup就收工。

默认单周期到底检查哪两个边沿

单周期setup通常从当前发射边沿检查到下一捕获边沿;hold则检查数据在当前捕获边沿附近不能过早变化。两条检查共同定义数据有效窗。

1.png 

1  多周期setup与hold使用不同的默认周期数

TimeQuest里的setup多周期默认值是1,hold默认值是0。数值不是可用时间的简单加法,而是告诉工具把所选边沿相对默认关系移动多少个周期。

写约束前先画源寄存器、目的寄存器、两个时钟波形和数据允许更新的边沿。图画不清,命令通常也不会清楚。

setup=2会把捕获边沿后移

当目的寄存器允许两拍后才采样,setup检查从S1移动到S2,数据获得了更多传播时间。这是多周期约束最直观的作用。

但如果功能上没有时钟使能或数据保持结构,目的寄存器仍会在中间边沿采样。此时把setup放宽只是让报告忽略真实风险,并没有让硅片停止采样。

2.png 

2  set_multicycle_path通过setup与hold选项移动分析边沿

所以约束审核必须回到RTL和使能条件,确认数据在不该采样的边沿确实被阻止进入目的寄存器。

hold为什么会被意外收紧

许多工具的默认hold边沿与setup捕获边沿相关。setup捕获边沿后移后,如果不配套修正hold,工具可能把保持检查也移到更晚的边沿。

结果是一个本来只需要普通保持关系的路径,被要求在更长时间内不能变化,出现新的hold违例。工程师若用大量延时单元硬修,会制造不必要的布线和温漂风险。

3.png 

3  默认单周期的setup与hold边沿共同定义数据有效窗

常见同频、目的端多周期场景里,setup设为N时,hold通常需要按设计意图回移N-1拍。具体写法仍要结合-start、-end和时钟关系复核。

四项报告确认约束真的命中

检查from、to端点是否精确,避免通配符误伤其他寄存器;检查launch与latch时钟是否正确;检查setup周期数;检查hold边沿是否回到设计需要的位置。

4.png 

4  两周期setup场景中,hold边沿仍需按单周期功能关系校正

报告中还要看命中路径数量。预期10条却匹配到0条,约束只是摆设;匹配到上千条,则可能把同层次其他逻辑一起放宽。

最后做门级或形式验证,确认使能关系与多周期假设一致。时序例外一旦脱离功能证据,就会变成最安静也最危险的错误。

-start和-end决定周期数按源时钟还是目的时钟计算。两时钟周期不同或存在相位关系时,省略选项可能得到与设计者直觉不同的边沿。

多周期不能用于掩盖组合逻辑过深。若目的寄存器每拍都可能采样,应该做流水线、优化逻辑或降频,而不是把路径声明为两拍。

复位、测试模式和旁路模式可能改变使能关系。正常模式成立的多周期假设,在其他模式下未必成立,约束范围要与功能模式一致。

约束对象层次修改后,旧的get_pins通配符可能匹配不到。每次综合后检查ignored constraints和命中数量,避免约束悄悄失效。

hold修正后仍出现违例,应先确认是正确边沿下的真实最短路径,再决定是否插入延时。不要用新的例外继续把违例隐藏。

生成时钟若未正确定义,工具选出的setup和hold边沿从根上就可能错误。多周期约束之前应先保证主时钟、派生时钟和相位关系完整。

路径从快时钟域到慢时钟域时,工具本身可能已经根据真实周期选择边沿。此时再套用同频的N与N-1经验公式,容易重复放宽或错误收紧。

约束修改后要同时跑setup、hold、unconstrained paths和exception报告。只看最差slack无法发现路径被意外排除或根本没有匹配。

代码评审中可把时序图、RTL使能条件和SDC放在同一个变更里。未来修改使能周期时,评审者能同步更新约束,避免功能与SDC逐渐分离。

结论

多周期约束不是让工具“宽容一点”,而是精确更换分析边沿。setup移到哪里,hold就必须重新确认。

以后写-set_up 2之前,先画边沿,再写成对约束,最后用报告核对命中范围。三步完成,报告变绿才有意义。


声明:

本文由凡亿教育整理,转载请注明来源!

投稿/招聘/广告/课程合作/资源置换 请加微信:13237418207