以前去地平线面试的时候被问到了multicycle path的一点问题,其实这个问题我应该知道,看过《Constraining Designs for Synthesis and Timing Analysis A Practical Guide to Synopsys Design Constraints (SDC)》,但当时回答的很差。html
看这篇文章须要现对创建时间、保持时间的概念有一些了解。面试
通常状况下数据在任意时钟沿发射,在下一个时钟沿被捕获,可是有时设计者须要延迟几个时钟周期data才被捕获,这就是多周期路径。异步
默认的创建时间时序:async
多周期的创建时间时序:ide
对于上面的时钟,默认是在A沿发射,B沿捕获。在进行创建时间分析时,咱们但愿在A沿发射数据,在D沿捕获数据,咱们能够经过-setup选项,指定多周期路径为3个周期。工具
set_multicycle_path -setup 3 -from xxx -to xxx
setup time analysis变成了:Tc-q +Tlogic +Tsetup < 3*T+skew。约束变宽松了。
ui
可是这样的话,在进行hold time分析的时候,工具会对捕获寄存器捕获沿以前的那一个时钟沿,也就是C沿进行hold analysis。这样的话hold time analysis变成了spa
Tc-q + Tlogic > Thold + 2*T,但这增长了电路的复杂性(须要插入一些buffer来增长延迟),没有必要,经过-hold选项,将hold edge向左移动2个周期设计
set_multicycle_path -hold 2 -from *** -to ***
注意:-setup制定多周期路径为N个周期,-hold使hold edge向左移动N-1个周期code
上面例子中发射时钟周期为10ns,捕获时钟周期为20ns。
默认状况下,setup analysis在B沿发射,N沿捕获,组合逻辑路径最大为10ns。对于hold analysis与保持时钟沿不要紧,在hold analysis中,能够在A时钟沿发射,M时钟沿捕获,或者在C时钟沿发射,N时钟沿捕获。
由于捕获时钟周期大于采样时钟周期,因此在一个捕获周期中,只能发射一个data。对于在N时钟沿捕获的状况,能够在A或者B时钟沿发射数据。在A发射能够增长额外的10ns的延迟余量。经过-start选项能够声明两个源时钟周期的路径,这使得发射沿从B移动到A。固然要指明是-setup。
set_multicycle_path -setup -start 2 -from xxx -to xxx
对于hold check有两种状况:
1. A发射M捕获。
2.B发射N捕获。
对于上面两种hold check状况,第二种约束更强,组合逻辑须要增长额外的10ns。咱们但愿hold check恢复到默认的位置,A发射M捕获(或者B发射N捕获),但愿lauch edge从B移动到C,经过-start 和- hold选项。
set_multicycle_path -hold -start 1 -from xxx -to xxx
-hold指定移动的周期数。
发射时钟周期为20ns,捕获时钟周期为10ns。
默认的setup check是M发射B捕获;hold check是 M发射A捕获。
M发射,但愿在C捕获,这样能够增长额外的10ns的延迟裕量。这能够经过-end选项来指定2个目的时钟周期的路径。
set_multicycle_path -setup -end 2 -from xxx -to xxx
-setup指定路径的周期数,为N
但这会使得hold check变成M发射B捕获,但愿它恢复到默认状况,用-end选项指明捕获沿向左移动一个目的时钟周期。
set_multicycle_path -hold -end 1 -from xxx -to xxx
-hold指定移动的周期数,为N-1
-start:移动源时钟(发射时钟)沿;
-end :移动目的时钟(捕获时钟)沿;
-setup -start N:向左移动发射时钟沿;
-hold -start N-1:向右移动发射时钟沿;
-setup -end N:向右移动捕获时钟沿;
-hold -end N-1:向左移动捕获时钟沿;
如上图所示,enable逻辑经过一个N个周期的状态机。那么对于从F1发出的actual data,能够在N个周期内到达F3的输入,因此约束以下:
set_multicycle_path -setup N -end -from Cs -through F1/Q -to Cd
set_multicycle_path -hold N-1 -end -from Cs -through F1/Q -to Cd
set_multicycle_path -fall -from reset_n -setup 3 set_multicycle_path -fall -from reset_n -hold 2
在跨时钟路径中,通常会生命为fault path,这样STA工具不会对这条路径进行时序分析,那么路径能够有任意大小的delay,可是设计者可能想要约束这一段路径的延迟,以下
set_multicycle_path -from [get_clocks C1] -to [get_clocks C2] -setup 2 set_multicycle_path -from [get_clocks C1] -to [get_clocks C2] -hold 1
原来是在A发射P捕获,但将路径设置为两个捕获周期以后,在A发射Q捕获,组合逻辑延迟扩展了一个捕获周期。这样就将组异步路径合逻辑延迟约束在一个捕获周期多一点。
参考:
原文出处:https://www.cnblogs.com/east1203/p/11523737.html