STA中的multi_cycle 和false_path详细讨论
特殊路径:跨时钟域下的exception_path:分为多种情况优先
1、不同clk_domain ,但频率相同
create_clock -name CLKM -period 10 -waveform {0 5} [get_ports CLKM]
create_clock -name CLKP -period 10 -waveform {0 5} [get_ports CLKP]
set_multicycle_path 2 -from [get_pins UFF0/CK] -to [get_pins UFF3/D]
默认为 -setup 选项。以上约束指定多周期建立时间为 2 且多周期保持时间为 0(默认值),会有hold的违例,若要消除,则设置hold的multi_cycle:
set_multicycle_path 2 -from [get_pins UFF0/CK] -to [get_pins UFF3/D] -setup
set_multicycle_path 1 -from [get_pins UFF0/CK] -to [get_pins UFF3/D] -hold
2.从slow_clk 到fast_clk:
create_clock -name CLKM -period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP -period 5 -waveform {0 2.5} [get_ports CLKP]
当数据发起触发器和捕获触发器的时钟频率不同时, STA 会首先确定一个公共基本周期( common base period)。
假设该设计的目的不是在 CLKP 的下一个有效沿上就捕获数据,而是在每第4 个捕获沿上捕获数据。该假设给触发器之间的组合逻辑路径提供了 4 个 CLKP 周期的时间,即 20ns 。
我们可以通过设置以下多周期路径约束来做到这一点:
set_multicycle_path 4 -setup -from [get_clocks CLKM] -to [get_clocks CLKP] -end
在大多数设计中,这不是理想的时序检查,应将保持时间检查一直移回到数据发起沿所在位置。因此,我们可以约束多周期保持时间为3 。
set_multicycle_path 3 -hold -from [get_clocks CLKM] -to [get_clocks CLKP] -end
-end 选项意味着我们想将终点(或捕获边沿)移回指定的周期数,即捕获时钟的周期
数。代替 -end 的另一种选项 -start 指定了要移动的发起时钟周期数, -end 选项指定了要移动的捕获时钟周期数。 -end 是多周期建立时间约束的默认值,-start 是多周期保持时间约束的默认值。
所以对于慢速到快速时钟域之间 的路径,多周期路径约束的一个好经验是使用-end 选项。使用此选项,可以根 据快速时钟的时钟周期 来调整建立时间(往前走)和保持时间检检查(往后走)。
2、fast_clk到slow_clk:
create_clock -name CLKM -period 20 -waveform {0 10} [get_ports CLKM]
create_clock -name CLKP -period 5 -waveform {0 2.5} [get_ports CLKP]
setup_4是最严格的检查,通常,设计人员可以将从快时钟域到慢时钟域的数据路径指定为多周期路径。如果想要放宽建立时间检查,比如为数据路径提供两个快时钟周期,则此多周期路径约束如下:
set_multicycle_path 2 -setup -from [get_clocks CLKP] -to [get_clocks CLKM] -start
set_multicycle_path 1 -hold -from [get_clocks CLKP] -to [get_clocks CLKM] -start
约束多周期建立时间为2 会将发起沿移动到默认发起沿之前的一个时钟沿,即在 10ns 而不是
默认的 15ns 处。多周期保持时间约束确保了在 0ns 处发起沿发起的数据,不会被 0ns 处的捕获沿捕获到。
与从慢速时钟域到快速时钟域的路径不同,在从快速时钟域到慢速时钟域的路径中,多周期路径约束的一个好经验是使用 -start选项,然后再根据快速时钟调整建立时间和保持时间检查。
注意:建立时间检查和保持时间检查的示例报告是针对同一工艺角( corner )的。通常,在最坏情况的慢速工艺角下,建立时间检查最难满足(裕量最小),而在最佳情况的快速工艺角下,保持时间检查最难满足(裕量最小)。
-start:表示强制移动的为start clock即launch clock;
-end: 表示强制移动的为end clock即capture clock。
ps:当start clock和end clock同频时,不用指定start/end,因为移动哪一个都一样效果。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/jinkai0822/article/details/140369233