EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2009/2/5 22:13:53

4

标签: 最大/最小输入/输出延时  I/O约束  input_delay  output_delay  

深入剖析I/O约束

 

题记:时序分析摸索了很久,看了很多资料,也反反复复的对比总结,然后思考。现在总算有点大彻大悟的感觉了,但是还不够有些东西理解的可能还不是那么深入透彻,也喜欢把自己的思考过的东西拿出来和大家分享,更是希望大家能提出一些看法,在不断的讨论总结中才会有进步。

 

Quartus II TimeQuest Timing Analyzer综合设计约束支持设计管脚的约束。这些约束允许Quartus II TimeQuest Timing Analyzer执行系统静态时序分析,不仅包括FPGA的时序,而且包括了任何外部器件的时序以及板级时序参数。

 

输入输出延时 Input and Output Delay

使用输入输出延时约束来指定任何外部器件或者板级参数。当您应用这些约束,Quartus II TimeQuest Timing Analyzer将在整个系统执行静态时序分析。

设置输入延时  Set Input Delay

set_input_delay约束指定了某个管脚(器件I/O)关于给定时钟的数据到达时间。Figure 6–26 展示了一个输入延时的路径。

使用set_input_delay命令来指定设计管脚的输入延时。Example 6–18展示了set_input_delay命令及选项。

Example 6–18. set_input_delay Command

set_input_delay

-clock <clock name>

[-clock_fall]

[-rise | -fall]

[-max | -min]

[-add_delay]

[-reference_pin <target>]

[-source_latency_included]

<delay value>

<targets>

 

Table 6–14. set_input_delay Command Options

选项

描述

-clock <clock name>

指定时钟源

-clock_fall

指定数据到达时间为时钟下降沿

-rise | -fall

指定是时钟的上升沿或者下降沿延时

-max | -min

指定是数据的最大或者最小到达时间

-add_delay

另外增加一个延时,但是不会取代该管脚已经存在的延时

-reference_pin <target>

从设计中指定的管脚或节点确定源和网络潜伏期。这有利于指定由某个时钟反馈的输出管脚相关的输入延时。

-source_latency_ included

指定包括源潜伏延时值的输入延时值,因此任何分配给时钟的源时钟潜伏期将被忽略。

<delay value>

指定延时值

<targets>

指定目标管脚或者节点

 

如果您仅仅为输入延时值指定一个-max或者-min值,将会出现警告信息。此时未设定的输入最小延时值或输入最大延时值的缺省值和另一方相同。同样地,如果你仅仅为延时值指定一个-rise或者-fall值,也会出现警告信息。该默认延时值也会以和输入最大和最小延时值一样的方式设置。

最大值被用于建立时间检测,而最小值被用于保持时间检测。

默认情况下,输入延时(min/max, rise/fall)设置仅仅允许为一个clock, -clock_fall, -reference_pin组合。为一个相同的管脚指定输入延时值,若不想移除这些不同的clock, -clock_fall, 或者-reference_pin原先的输入延时设置,你必须指定-add_delay选项。当你指定了-add_delay选项,最坏的情况值将被采用。

-rise-fall选项是相互排斥的,-min-max选项也是相互排斥的。

设置输出延时  Set Output Delay

set_output_delay命令指定一个给定时钟相关管脚(器件管脚)的数据需要时间。使用set_output_delay命令指定设计管脚的输出延时约束。Figure 6–27展示了一个输出延时路径。

Example 6–19. set_output_delay Command

set_output_delay

-clock <clock name>

[-clock_fall]

[-rise | -fall]

[-max | -min]

[-add_delay]

[-reference_pin <target>]

<delay value>

<targets>

 

    各命令选项和set_input_delay类似,这里略过。

    其它说明和set_input_delay类似,这里也略过。

 

 

    下面对I/O约束中关键的输入(输出)最大(最小)延时的概念做一些阐述。

点击看大图 

 

点击看大图

从上图可以看到,输入最大/最小延时是针对外部器件的一些特性而进行设置的。所谓输入最大延时(这里先假设系统处于一个理想状态,即外部器件和FPGA共用一个时钟源,并且不考虑时钟偏斜,就是说时钟同步到达外部器件和FPGA的锁存沿),就是从时钟的发射沿算起,数据经过外部器件的最大Tco延时+PCB走线延时;而输入最小延时,就是数据经过外部器件的最小Tco延时+PCB走线的延时。这个时间和FPGA内部的建立保持时间又有怎样的关系呢?

和一般的时序分析一样,外部器件输入到FPGA的数据也必须满足建立保持时间要求,输入最大延时通俗的理解就是外部器件的数据到达FPGA端口的最晚时间,这个最晚时间可不能太晚,必须考虑FPGA内部锁存这个数据的建立时间Tsu。如果数据晚到时钟的锁存沿前的Tsu时间还没有到达,那么时钟就无法锁存这个数据了。那么就会出现时序违规了,所以,这个输入最大延时需要满足的第一个条件就是Tsu+输入最大延时<时钟周期TCLK(即上图的第一个公式)。

同理,这个数据要到达FPGA最快的时间称之为输入最小延时。这个最快时间也不能太快,试想想,如果在时钟的发射沿外部器件里的数据在非常短的时间内通过了外部器件的TcoPCB走线,到达FPGA端口时,假设此时FPGA正出于上一个从外部器件传递来的数据的保持时间Th内,那么新到达的数据势必会破坏了前一个数据的保持时间,这也会造成时序违规。这么说来,这个输入最小延时也不能太小,也必须满足一定的条件,这个条件就是:Th<输入最小延时(即上图的第二个公式)。

    讨论了这么多,相信你该理解了。那么我们再加上PCB时钟偏斜,时钟偏斜的概念我也不多说,你可以理解为这个参数是源时钟在PCB布线传输信号到达相应的锁存端口时间是会有一定偏差的,那么这个偏差就是PCB时钟偏斜,那么为什么是减去这个值而不是加上这个值呢?你可以理解这个PCB时钟偏斜值=时钟源到达FPGA端口时间-时钟源到达外部器件端口时间,然后~~慢慢消化吧!

 

建议大家参看Wind330博友的文章《同步时序约束之INPUT_DELAY详解》:

http://blog.ednchina.com/wind330/194897/message.aspx

 

点击看大图 

    输入最大/最小延时的概念说的很明白了,至于输出最大/最小延时的理解也很类似。上图的第一个公式其实和输入最大/最小延时的第一个公式有异曲同工之妙,只是把减数的位置互换了一下,不难理解。

但是第二个公式,我个人理解和altera官方的教程里提出来的不太一样,我的理解是这样的:FPGA输出数据达到外部器件输入管脚最快的时间=Tco+PCB布线延时,而根据输入最大/最小延时中第二个公式的分析,外部器件的Th应该小于上面的值,即外部器件的Th< Tco+PCB布线延时(先不讨论PCB时钟偏斜),那么Tco>Th-PCB布线延时才对,而不是Tco>输出最小延时=Th+PCB布线延时。

上面是我对这个公式的理解,也许分析得不对,期待高手指点!

 

 

系统分类: CPLD/FPGA   |   用户分类: Altera_TimeQuest   |   来源: 原创   |   【推荐给朋友】   |   【添加到收藏夹】

该用户于2009/2/11 18:37:07编辑过该文章

阅读(1726)  |  评论(12)  |  收藏(2)  |  举报  

投一票您将和博主都有获奖机会!

最新评论

  • ilove314

    2009/2/11 18:30:00

    接受riple兄的提议

  • xalexchen

    2009/2/11 15:17:00

    很好很强大,不过暂时没接触altera

  • riple

    2009/2/11 7:27:47

    特权同学这一系列关于时序分析的文章写得非常好,能不能单独分一个类别出来,便于大家阅读、收藏。

  • ilove314

    2009/2/10 22:38:05

    “尽信书不如无书”啊,altera的教程里也难免有疏漏的地方,我看quartus ii handbook里也常有地方写错了时间下标。有时还是要自己多思考多讨论

  • ilove314

    2009/2/10 22:35:07

    https://mysupport.altera.com/etraining/webex/SourceSynchTiming/player.html刚看了官方的同步接口时序的实例分析,这里分析的更透彻明白,基本的概念要清楚,但是也要注意具体问题具体分析。谢谢riple

  • riple

    2009/2/10 21:35:46

    特权同学分析得对,应该是Tco>Th-PCB布线延时。我错了,自作聪明了,哈哈哈!

  • ilove314

    2009/2/10 19:08:12

    感谢riple兄耐心的解答。 1,不知道您说的关于Tco,Tsu,Th的不同是不是关于FPGA寄存器的micro Tco,micro Tsu,micro Th和通常意义上器件的Tco,Tsu,Th的区别。 2,我认为不论这里讨论的是不是FPGA器件内部的时序关系,从某种程度上这套理论也同样适用于其他器件(当然可能说需要有一些附加条件,这也是我之所以会在分析output min delay时出现和图片中altera给的推导不一样的原因)。当然我也发现FPGA器件的约束需要我们添加的一些参数大都是和器件以外因素有关的,而约束概念也大都是围绕着这个大前提来定义的。 3,我找到了quartus ii handbook中关于这个output min delay的计算。在Volume 3--6. The Quartus II TimeQuest Timing Analyzer的7-48。如果我的理解没错的话,最后得出来的output min delay = 外部器件Th-PCB布线延时-PCB时钟斜移。 特权愚见,期待指点!谢谢!

  • riple

    2009/2/10 10:03:49

    一个问题:在FPGA输入输出寄存器时序约束和分析过程中,Tco、Tsu、Th各个参数的物理意义与FPGA内部寄存器的约束和分析过程中对应的参数是不同的。这一点,特权同学有没有分析过?

  • riple

    2009/2/10 9:55:20

    上文中,input_delay的物理意义说得很清楚。在布局布线过程中,该参数的用处在于给FPGA内部的数据和时钟布线提供一个限制(约束),使最终的结果(从FPGA输入引脚到FPGA寄存器的输入端口的延时)满足Tsu和Th两个公式。同理,output_delay的用处也在于给布局布线提供一个限制,使最终的结果(从FPGA寄存器的时钟输入端口到FPGA的输出引脚)满足Tco公式。需要注意的是,在分析FPGA输入和输出寄存器的过程中,只有针对FPGA进行约束和限制的公式才有实际意义,外部器件的Tco、Tsu、Th需要当作客观的,只能由数据手册或测量、估算得到的物理参数;对外部器件推导出的任何约束公式在这里都是没有意义的。毕竟,EDA工具只能通过调整FPGA的布局布线来产生不同的FPGA内部延时,达到适应外部环境和参数的目的。

  • riple

    2009/2/10 9:38:30

    上面这个步骤错在,把FPGA输入寄存器的Th计算公式(已知正确的父公式)错当成了外部器件输入寄存器的Th计算公式(错误推导出的子公式)。

  • ilove314

    2009/2/9 20:45:47

    想来想去还是感觉有些糊涂。不过如果都把FPGA的端口作为输入输出分析的中间点,这样就说得通了

  • riple

    2009/2/8 19:41:20

    特权同学的问题很具有迷惑性:从一个已知正确的父公式推出的子公式却和另一个已知正确的父公式矛盾! 这个问题令人迷惑之处根源于FPGA内部寄存器时序分析对象与FPGA I/O时序分析对象的不同。在前者,时序分析的对象是FPGA内部的一对寄存器;在后者,时序分析的对象是FPGA内部的寄存器与FPGA外部的另一个寄存器。在前一种情况下,从形式上不需要区分特定公式针对的是前一个还是后一个寄存器,虽然从公式的物理意义上看还是区分的;在后一种情况下,需要十分注意公式中Tco\Tsu\Th针对的是哪一个寄存器。 说到这里,特权同学应该恍然大悟了。在特权同学的分析过程中,在下面这个步骤中混淆了分析对象:“而根据(FPGA的输入寄存器)输入最大/最小延时中第二个公式的分析,外部器件(的输出寄存器)的Th应该小于上面的值,即外部器件的Th< Tco+PCB布线延时”