zoukankan      html  css  js  c++  java
  • 关于set_input_delay和set_output_delay的选项max和min的存在意义和推导

    一、存在背景分析

          文档的说法是,set_input_delay和set_output_delay描述的是数据在端口处与某时钟的时序关系。这样的说法是很表面的。input/output其实是模拟数据在端口外的延时,实际上这是端口的一个外部约束条件,目的是为了约束FPGA输入端口到内部寄存器数据输入端或者内部寄存器输出端到FPGA输出端口之间允许的延时(因为这中间可能有组合逻辑),理解这一点非常重要。

          既然模拟的是数据在外部的情况,那么弄清楚这个延时是相对于哪个时钟而言的就很重要(这里也是泛泛而谈,后面有详细一点的分析)。很显然,这里的对象时钟是虚拟时钟virtual clock。

          对于任何一种情况,有一点必须要保证:必须保证接收端能接收到数据。在推导过程中,这一条是隐含的前提。

    二、set_input_delay的推导

          对于set_input_delay,虚拟时钟是Launch,为保证FPGA能采样到数据,对源寄存器与目的寄存器之间的路径延时是有限制的。假如延时太大,FPGA端的建立时间可能不满足;延时太小,FPGA端的保持时间可能不满足。因此,计算max时考虑的是建立时间的情况,计算min时考虑的是保持时间的情况。

          考虑保持时间时,可得如下关系:

          Launch + Tco_ext + Td_ext + Td_in + uTsu = Latch

          假如Td_in为Td_in_max,如果时钟周期不变,外界最糟糕的情况是,(Tco_ext + Td_ext)的值也为最大。SDC对输入时max的定义如下:

          set_input_delay –max {Tco_ext + Td_max}

          实际上这并不是FPGA内部的延时,这只是FPGA内部延时的相关量,因为很明显内部的延时是Td_in。为什么不直接使用内部延时呢?因为那样的话涉及到的变量太多,而这两个参数,在板卡和板卡环境确定之后,几乎是不会变化的。这个相关量的意义是,Td_in想往上增大是要受到这个相关量的约束的。

          考虑建立时间时,可得:

          Launch + Tco_ext + Td_in + Td_ext + Tsrc = Latch + uThd

          假如Td_in为Td_in_min,外界最糟糕的情况是(Tco_ext + Td_ext)的值也为最小。SDC对输入是min的定义如下:

          set_input_delay –min  {Tco_ext + Td_min}

          当然这也是相对量。

          有一点应该说明,-max和-min不会同时达到极限值,因为Td不会同时既为max又为min。因此,假如su或者hd有一个时序不收敛,内部的路径延时是有调整空间的。

    三、set_output_delay的推导

          对于set_output_delay,虚拟时钟是Latch。

          考虑外部寄存器的建立时间,可得:

          Launch + uTco + Td_in + Td_ext + Tsu_ext = Latch

          假如Td_in为Td_in_max,最糟糕的情况是(Td_ext + Tsu_ext)也为最大。SDC对输出时max的定义如下:

          set_output_delay –max {Td_max + Tsu_ext}

          考虑外部寄存器的保持时间,可得:

          Launch + uTco + Td_in + Td_ext + Tsrc = Latch + Thd_ext

          假如Td_in为Td_in_min,最糟糕的情况是Td_ext亦为最小。SDC对输出是min的定义如下:

          set_output_delay –min {-Thd_ext + Td_ext_min}

          至于为什么不写成(Thd_ext – Td_ext_min),是为了计算时与max一致。在验证建立时间是否满足时,在Latch确定了的情况下,需要Latch减去max得到Data Required Time。在验证保持时间时,为了计算一致,希望也用Latch减去min来得到Data Required Time,而这时Required的计算应写为

           Latch + Thd_ext – Td_ext_min

    变换一下可得

           Latch – (-Thd_ext + Td_ext_min)

    min就是这样得来的。

  • 相关阅读:
    skywalking监控配置tomcat的参数
    weblogic启动受管理节点
    JavaScript中的数组遍历forEach()与map()方法以及兼容写法
    ajax与HTML5 history pushState/replaceState实例
    mongoose参考手册
    mongoose
    解决ul里最后一个li的margin问题
    前端开发中最常用的JS代码片段
    CSS3精美前端
    60个有用的css代码片段
  • 原文地址:https://www.cnblogs.com/freshair_cnblog/p/2681060.html
Copyright © 2011-2022 走看看