• 时序分析 建立时间和保持时间


    目录

    一.概念

    二.建立时间余量(裕量)setup  slack

    三.保持时间余量(裕量)hold  slack


    一.  概念

    建立时间:时钟上升沿到来之前数据保持稳定的时间

    保持时间:时钟上升沿到来之后数据保持稳定的时间

    Launch是启动沿,Latch是锁存沿。

    可以认为建立时间的Launch与Latch相差1个时钟周期,保持时间的Launch与Latch相差0个时钟周期(对齐)。

    二.  建立时间余量(裕量)setup  slack

    其中的Tcycle是源时钟周期,Tclk1和Tclk2分别是时钟源到一级寄存器和二级寄存器的时钟网络延迟,Tco是数据在寄存器内部传输的延迟,Tdata是线路上组合逻辑的延迟,Tsu是建立时间大小,我们需要保证建立时间余量大于零。

      

    普通的公式:其中Latch Edge设为Tcycle,Launch Edge 设为 0


                     setup  slack = DATA Required Time - DATA Arrival Time

                        =(Latch Edge+ Tclk2 - Tsu)- (Launch Edge+Tclk1+Tco+Tdata)

    = (Tcycle + Tclk2 - Tsu)- (Tclk1+Tco+Tdata)


    需要求得最小的setup slack,故有

                    setup slack(min) = (Tcycle + Tclk2(min) - Tsu)- (Tclk1(max)+Tco+Tdata)

    考虑到以及CPR(Clock Pessimsm Removal ),CPR是指在考虑clk1和clk2路径上有共同的common部分,那么有

     CPR = Tcommon(max)- Tcommon(min)

    所以setup slack(min)公式中的Tclk2(min) - Tclk1(max)是不够精确的,还需要考虑到common是共有的,

                  正确的数值       [Tclk2(min)-Tcommon(min)] - [Tclk1(max)-Tcommon(max)]

                  我们计算的数值 Tclk2(min) - Tclk1(max)

    二者相减正好  等于  CPR = Tcommon(max)- Tcommon(min),所以我们计算的结果还需要加上一个CPR的数值来补偿才是正确的建立时间余量

    再考虑时钟不确定性延迟clock uncertainly ,它会使得一个时钟周期不是一个完整的时钟周期,假设由于抖动会缩短一个周期的时间(比如10ns变成9ns)

    有最后的公式


    setup slack(min) = DATA Required Time - DATA Arrival Time

    =[Tcycle -clock uncertainly time + Tclk2(min) - Tsu+ CPR]

                                 - [Tclk1(max)+Tco+Tdata]


    三.  保持时间余量(裕量)hold  slack

    普通的公式:其中Latch Edge设为0,Launch Edge 设为 0


                  hold slack = DATA Arrival Time - DATA Required Time

            = (Launch Edge+Tco+Tdata)-(Latch Edge+ Tclk2 - Tsu) 

                                     = (Tclk1+Tco+Tdata) -( Tclk2 + Th)


    需要求得最小的hold slack,故有

                    hold slack(min) = (Tclk1(min)+Tco+Tdata) -( Tclk2(max) + Th)

    考虑到以及CPR(Clock Pessimsm Removal ),CPR是指在考虑clk1和clk2路径上有共同的common部分,那么有

            CPR = Tcommon(max)- Tcommon(min)

    所以hold slack(min)公式中的Tclk1(min) - Tclk2(max)是不够精确的,还需要考虑到common是共有的,

                  正确的数值       [Tclk1(min)-Tcommon(min)] - [Tclk2(max)-Tcommon(max)]

                  我们计算的数值 Tclk1(min) - Tclk2(max)

    二者相减正好  等于  CPR = Tcommon(max)- Tcommon(min),所以我们计算的结果还需要加上一个CPR的数值来补偿才是正确的建立时间余量

    再考虑时钟不确定性延迟clock uncertainly ,它会使得一个时钟周期不是一个完整的时钟周期,假设由于抖动会缩短一个周期的时间(比如10ns变成9ns)

    有最后的公式


                  hold slack(min)=DATA Arrival Time - DATA Required Time

                                            = [Tclk1(min)+Tco+Tdata]

                -  [Tclk2 (max)+ Th + clock uncertainly time-CPR]


    所以建立时间和保持时间都需要一个CPR大小的补偿。


    [1] 《FPGA时序约束与分析 吴厚航》

    [2]  尤老师b站视频

  • 相关阅读:
    Springboot项目:连接mysql数据库,使用aop进行日志捕获
    mysql 是不是要创建一个用户 然后给这个用户远程权限 操作msg数据库 而不是给root用户远程权限?
    【Python学习】Day-025 爬虫、requests基本用法
    hackmyvm之gift
    macOS磁盘分区调整软件--Paragon Camptune X 中文
    python-0006-django路由
    第二十一章 控制进程(二)
    docker的问题1
    如何实现一个让面试官拍大腿的防抖节流函数
    python常见漏洞总结
  • 原文地址:https://blog.csdn.net/qq_38863842/article/details/125627516