用Quartus II Timequest Timing Analyzer进行时序分析 :实例讲解 (五)

3. Creating Timing Exceptions

    创建好时钟、定义好输入输出延迟后,就可以按照这些约束对设计进行时序分析了。默认的情况下,软件按照1T 原则分析所有需要检查的timing path。在综合、布局布线时,工具也会根据时序约束,尽可能使所有timing path都满足1T的要求。但工具也不是万能的,如果设计要求过高的话,有些timing path可能不能达到设计要求,这样不满足设计要求的timing path就会以timing violation的形式给出。

    在很多情况下,设计的结构和功能并不要求所有的timing path都符合1T的要求,甚至有的timing path则根本没有时序要求,比如说异步复位信号。这时候,就可以对这一类的timing path设定相对宽松的时序约束或者不做时序要求,称之为timing exceptions。

    常用的设定timing exception的方式有两种:false path和Multicycle path。先来讨论false path。

    False path就是不需要关注其时序的timing path。如果将一条timing path设为false path,软件在做时序分析时,会自动忽略掉这条timing path,不做分析。之前讲clock group时曾讲过,如果把两个时钟设定为不同的组,软件就不会分析这两个时钟时间的timing path。软件是如何实现的呢?实际上,当设定两个时钟为不同的组时,软件隐含的动作是把两个时钟之间所有的timing path都设定为false path,从而达到不对其进行分析的目的。

    可以使用set_false_path命令将一条timing path设定为false path。下面是set_false_path的语法:

Syntax

set_false_path [-h | -help] [-long_help] [-fall_from <names>] [-fall_to <names>] [-from <names>] [-hold] [-rise_from <names>] [-rise_to <names>] [-setup] [-through <names>] [-to <names>]

    在这个命令中,-from用来定义timing path的起点, -through 用来定义timing path所经过的点, -to用来定义timing path的终点,另外可以用-hold 和 –setup来定义这条命令适用的范围,是setup/hold check时使用,而默认的情况是setup和hold都适用。其他的参数以及更详细的描述可参照QuartusII的帮助系统或者SDC相关的资料。

    在DAC7512控制器的设计中,因为工作频率较慢,设计也相对简单,所以在设计中没有出现有timing violation 的情况,不便于在真实的环境中对照set_false_path命令的使用情况。为此,通过提高时钟频率的方式,制造出timing violation。将DAC7512控制器的时钟CLK25M和CLK50M分别调整到75MHz和150MHz,其他相关时钟也随之改变。用TimeQuest报告出更改时钟后DAC7512控制器的时序分析结果。下面是setup check的结果:

clip_image002

    从Summary of Paths的结果可以看系统存在两条timing path存在timing violation。拿timing violation值较大的第一条timing path进行分析,下面是该timing path的详细信息:

clip_image004

    该timing path的起点是DAC7512:DAC7512|DACSM[2],终点是DA_DIN,Launch Clock和Latch Clock分别是DA_SCLK和PORT_DA_SCLK(下降沿),Slack值为-12.262。在之前定义时钟的约束时,这两个时钟是被定义为同一组的。另外还有更详细的这条timing path的信息,比如说timing path所经过的每一个点,以及每一个cell或者net之间的延时情况等等,这里不再做详细的介绍。

    假设并不需要关注这条timing path的时序要求的话,就可以把这条timing这条pathtiming path设为false path。下面我们就看一下把这条timing path设定为false path的情况。可以使用下面的命令:

set_false_path -from [get_pins {DAC7512|DACSM[2]|clk}] -to [get_ports {DA_DIN}]

    加上这条约束以后,再看时序分析的结果,setup的情况如下:

clip_image006

    现在软件报告只有一条timing path有timing violation了,少了上面被设定为false path的这条timing path。但实际上并不是说上面的这条timing path的时序变得没有问题,原来的问题依然存在,甚至会更糟糕,只是我们把它设定为false path了,软件不会再去分析它而已。这就要求对于set_false_path的使用,一定要慎重。只有肯定不用关注某条timing path的时序时,才能使用这个命令,否则软件不会对它做任何的分析,出问题的概率会比较大。

    在使用set_false_path的命令时,还要注意一点,timing path的起点实际上是寄存器DACSM[2]的clock端,要用[get_pins {DAC7512|DACSM[2]|clk}]来获取。

    再讨论Multicycle path。

    一般情况下,信号在timing path的起点(亦即第一个时钟沿)发生变化,Terminate会在timing path的终点(亦即第二个时钟沿)采集该信号。这种情况,做时序检查就需要按1T来做,这也是设计中最常见的一种情况。但如果信号在第一个时钟沿发生变化,terminate端在第三个时钟沿时采集该信号,那么就不需要保证信号在第二个时钟沿传递到终点,也就是说,不需要做1T的检查而是做2T的检查,即保证信号在第三个时钟沿之前到达终点。依次类推,可以对timing path进行nT(n > 1)的检查,这时统称该timing path为multicycle path。

    将某一条timing path设定为multicycle path,无论multi实际为多少,实际上都是降低了对该条timing path的时序要求。

    可以使用set_multicycle_path命令将一条timing path设为multicycle path。下面是set_multicycle_path命令的语法:

Syntax

set_multicycle_path [-h | -help] [-long_help] [-end] [-fall_from<names>] [-fall_to <names>] [-from <names>] [-hold] [-rise_from <names>] [-rise_to <names>] [-setup] [-start] [-through <names>] [-to <names><value>

    和set_false_path一样,在命令中,-from用来定义timing path的起点, -through 用来定义timing path所经过的点, -to用来定义timing path的终点,另外可以用-hold 和 –setup来定义这条命令适用的范围,是setup/hold check时使用,而默认的情况是setup和hold都适用。另外一个重要的参数是value,它直接用来定义multi的值,如果设定value=2,则就是multicycle 2 path,如果value=3,则就是multicycle 3path。其他的参数以及更详细的描述可参照QuartusII的帮助系统或者SDC相关的资料。

    假设上面所讲的timing path为multicycle 2 path的话,可以用下面的命令对该timing path进行时序约束:

set_multicycle_path -setup 2 -from [get_pins {DAC7512|DACSM[2]|clk}] -to [get_ports {DA_DIN}]

set_multicycle_path -hold 1 -from [get_pins {DAC7512|DACSM[2]|clk}] -to [get_ports {DA_DIN}]

    要注意的是,如果在做setup 检查时,timing path为multicycle 2 path,那么在做hold 检查时,该timing path就为multicycle 1 path,以此类推。

另外非常重要的一点,如果该Resouce有多个Terminate,对该Resource为起点的timing path设multicycle path时,其多个Terminate和起点之间应CDC电路处理,关于这一点的详细信息,可参考CDC的相关资料。

    set_false_path和set_multicycle_path这两个命令,有不同的应用场合和背景。但相同的一点是,都从系统实际的结构触发,来降低对整个系统的时序要求。使用这两个命令的时候,一定要确认设计本身是符合要求的,否则很容易出时序方面的问题。

    另外还有两个命令分别是set_max_delay和set_min_delay。并不推荐大家使用,所以在这里也不做更多的介绍,有兴趣的朋友可以去查找SDC的相关资料。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值