关于多周期约束Multi-Cycle的分析

set_multicycle_path约束命令:

 set_multicycle_path N [-setup|-hold] [-start|-end] [-from ] [-to ] [-through ]

--setup:指定本约束是针对建立时间检查而设置的约束

--hold:指定本约束是针对保持时间检查而设置的约束

--from:数据发射端launch时钟

--to:    数据接收端capture时钟

--start:指定本约束是针对源端(多用于慢时钟采快时钟的场景)

--end: 指定本约束是针对目的端(多用于快时钟采慢时钟的场景)

其中,setup约束默认的是移动捕获沿(capture_edge),hold 约束默认的是移动发射沿(launch_edge)。

一、同频同相时钟的场景:

                

默认的约束配置:

        set_multicycle_path 1 -setup  -from CLK_FF1 -to CLK_FF2 -end)

        set_multicycle_path 0 -hold    -from CLK_FF2 -to CLK_FF2 (-start)

对应的setup和hold检查位置关系如下:   

        由于Slow logic的delay延迟过大,将setup约束放松一个capture时钟检查,所以设置multicycle约束,如下:

        set_multicycle_path 2 -setup  -from CLK_FF1 -to CLK_FF2 -end)

        

        setup检查位置向右移动了一个capture时钟周期,同样hold检查的位置跟随setup的约束向右移动了一个clock周期,为了放松hold检查,需增加对hold的检查约束,如下:

        set_multicycle_path 1 -hold  -from CLK_FF1 -to CLK_FF2 -end)

        

这样,hold检查从CLK_FF1位置3回到位置1处了。

二、快时钟到慢时钟的场景:

                

默认的约束配置:

        set_multicycle_path 1 -setup  -from CLK_Fast -to CLK_Slow -end

        set_multicycle_path 0 -hold    -from CLK_Fast -to CLK_Slow -start

对应的setup和hold检查位置关系如下:

        

        现在存在4种可能的时序检查,如上图种setup_1、setup_2、setup_3和setup_4,不难发现4个检查最严格的是setup_4,launch_edge时钟沿在CLK_FF1 时钟15处,capture_edge时钟沿在CLK_FF2时钟5处。同样,有4种可能的hold检查,上图画处最为严格的hold检查。为了满足setup时序检查,现将launch时钟放松3个时钟周期检查,设置multicycle约束如下:

        set_multicycle_path 4 -setup  -from CLK_FF1 -to CLK_FF2 -start

经过setup的约束设置后,hold的检查launch_edge移动到了位置3处:

        

        由于setup检查的launch_edge向左移动了3个clock周期,hold检查的launch_edge同样向左移动了3个clock周期。为了保证保持hold检查原来的位置关系,hold检查的launch_edge需要向右移动3个时钟周期,则需要设置约束如下:

        set_multicycle_path 3 -hold   -from CLK_FF1 -to CLK_FF2 -start

        

这样,hold检查从CLK_FF1位置3回到位置9处了。

三、慢时钟到快时钟的场景:

                

默认的约束配置如下:

        set_multicycle_path 1 -setup  -from CLK_Fast -to CLK_Slow -end

        set_multicycle_path 0 -hold    -from CLK_Fast -to CLK_Slow -start

对应的setup和hold检查位置关系如下:

        

由于seup检查过于严格,现在将setup放松3个时钟周期检查,multicycle约束设置如下:

        set_multicycle_path 4 -setup  -from CLK_FF1 -to CLK_FF2 -end

        经过setup的约束设置后,setup检查的capture_edge向右移动了3个时钟时钟周期,hold的检查同样向右移动到了3个capture时钟周期在位置7处,如下:

        

        由于setup检查的capture_edge向右移动了3个clock周期,hold检查的capture_edge同样向右移动了3个capture时钟周期。为了保证hold检查原来的位置关系,hold检查的capture_edge需要向左移动3个capture时钟周期,则需要设置约束如下:

        set_multicycle_path 3 -hold   -from CLK_FF1 -to CLK_FF2 -end

        

这样,hold检查从CLK_FF2位置7回到位置1处了。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值