multicycle path的概念和用法

通常情况下,两个同步的reg进行timing check时,组合逻辑的delay必须在一个时钟周期内到达,才能满足setup的时序。但是在某些情况下,从一个寄存器输出到另外一个寄存器的data端需要不止一个cycle的时间,而且又不影响逻辑的功能。我们将这样的path约束为multicycle path。

set_multicycle_path path_multiplier [-setup|-hold]

                    [-start|-end]

                    -from <StartPoint>

                    -through <ThroughPoint>

                    -to <EndPoint>

default值,也就是说什么都不设,这个path\_multiplier对于setup来说是1hold0,也就是我们上面单周期的约束情况。我们在设计multicycle的时候,重点就是调整这个path\_multiplier

-setup-hold是让你分别来指定setuphold的多周期值,注意,如果你只设了setup的值而没有设hold的值,那么hold的值也会相应的进行改变

startend只在不同频率的clock分析中会用到,即launch pathclockcapture pathclock是不同频率,不同频率的时钟也可以是同步电路,即时钟沿是对齐的。另一方面,同一频率的两个clock也可能是异步电路,关键看时钟沿对齐没有。

from/through/to就是指定的timing path的起始。经过和终止的路径,一般在约束特定路径的时候有用。

下图所示为一个3cycle的multicycle path的电路结构图和波形图。

因此,我们可以用下面命令来定义约束:

create_clock -name CLKM -period 10 [get_ports CLKM]

set_multicycle_path 3 -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]

setup检查:

默认情况下,当UFF0/CK作为launch clock时(T=0ns时),在T=10na时UFF1/CK采集到前一级过来的数据。

 

但是当我们通过以上的命令设置了3个cycle的multicycle path的约束后,launch clk的沿推到了T=30ns。因此,两个寄存器之间那段组合逻辑的delay要求就放松到了近三个时间cycle。这种情况下setup是比较容易满足的。对应的setup检查时序报告如下图:

 

hold检查:

通常情况下,hold检查的沿应该是在T=20ns时刻(较setup capture edge早一个cycle)。这种hold检查方式,会导致hold可能过度悲观,很难满足hold time的要求。

 

因此,我们需要像单cycle check的情况一样,即hold检查的沿应该和launch clk的edge一致(T=0时刻)。这样hold time check比较容易满足。命令如下:

set_multicycle_path 2 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]

这里的数字2是将默认的hold check edge往前推两个时钟周期,即从原来的T=20ns时刻往前移到T=0ns时刻。对应的hold时序检查报告如下图所示。

 

因此。在我们给设计写约束文件时(定义multicycle path时),需要同时定义如下命令:

set_multicycle_path N -setup -from [get_pins UFF0/Q] -to [get_pins UFF1/D]

set_multicycle_path N-1 -hold -from [get_pins UFF0/Q] -to [get_pins UFF1/D]

如果只定义了-setup 3而没有定义-hold时,工具hold时,工具hold check时,默认的clock edge为capture edge(setup timing check时)前一个cycle的那个edge。

不同频率的clock的设计,先看从慢时钟到快时钟,假设慢时钟是快时钟的3分频。默认情况下,如果不设multicycle pathsetup/hold是这样分析的。

 

setup就是下一个沿,hold就是对齐那个沿,如果就是用multucycle path写出来。

set_multicycle_path 1 -setup -end -from CLK1 -to CLK2

set_multicycle_path 0 -hold -start -from CLK1 -to CLK2

这里-endstart的用法。-end是指capture flopclockstart是指launch flopclock。默认的,setup是对end,也就是上面clk21个周期之后,而-hold是对start,也就是clk10时刻的上升沿。在调整周期数的时候一定要分清针对哪一个clk来调整。

 

setup要变成clk2的两个周期,所以约束写成:

set_multicycle_path 2 -setup -end -from CLK1 -to CLK2

如果不写hold的约束,那么hold会自动根据setup调整。

 

想要这样的约束还需要调整hold,要根据CLK2的周期来调整,要加end选项。

set_multicycle_path 2 -setup -end -from CLK1 -to CLK2

set_multicycle_path 1 -hold -end -from CLK1 -to CLK2

hold默认的是start clock,如果写成下面命令,实际上是相对于CLK1移了一个周期。

set_multicycle_path 1 -hold -from CLK1 -to CLK2

那么实际check就会变成

 

从慢时钟到快时钟的写法,以3分频为例。

先看默认的check是什么

 

要把hold的沿对齐,就要用下面的约束。

 

set_multicycle_path 2 -setup -start -from CLK1 -to CLK2

set_multicycle_path 1 -hold -start -from CLK1 -to CLK2

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
set_multicycle_path命令用于设置时序约束中的多周期路径。在多周期设计中,某些信号不仅可以在一个时钟周期内到达目的地,而且可能需要多个时钟周期。在这种情况下,就需要使用set_multicycle_path命令来设置多周期路径的时序约束。 set_multicycle_path命令的语法格式如下: ``` set_multicycle_path -setup|-hold|-recrem <value> [-from <start_point>] [-to <end_point>] [-rise|-fall] [-through <through_point>] [-end [<max_paths>]] [-start [<max_paths>]] [-name <path_name>] [-setup_rising|-setup_falling|-hold_rising|-hold_falling] ``` 其中,选项说明如下: - -setup: 设置多周期路径的setup时序约束。 - -hold: 设置多周期路径的hold时序约束。 - -recrem: 设置多周期路径的recovery/removal时序约束。 - <value>: 多周期路径的时序约束值。 - -from <start_point>: 指定多周期路径的起始点。 - -to <end_point>: 指定多周期路径的结束点。 - -rise|-fall: 指定多周期路径的信号变化类型。 - -through <through_point>: 指定多周期路径的中间点。 - -end [<max_paths>]: 限制最大终止点数。 - -start [<max_paths>]: 限制最大起始点数。 - -name <path_name>: 设置多周期路径的名称。 - -setup_rising|-setup_falling|-hold_rising|-hold_falling: 指定时序约束的时钟边沿类型。 需要注意的是,set_multicycle_path命令设置的多周期路径时序约束会在后续的时序分析中起作用,因此在设计中合理使用set_multicycle_path命令非常重要,能够有效提高设计的时序性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值