首页 > 其他分享 >建立保持时间及违例解决方法 ------ 转载

建立保持时间及违例解决方法 ------ 转载

时间:2023-08-24 19:22:36浏览次数:50  
标签:Tclka Tco 时间 Tcomb ------ 转载 延迟 违例 时钟

转载自: 建立保持时间及违例解决方法 - 知乎 (zhihu.com)

 

建立保持时间概念

为什么要有建立保持时间?参考:为什么会有建立时间(setup time)和保持时间(hold time)要求 - 知乎 (zhihu.com)
答:简单来说,DFF可以由两个latch构成,每个latch是通过传输门组成的mux组成。如果不满足建立时间,mux反馈端口的左右两侧就会出现不相等情况。如果不满足保持时间,在clk关断mux之前,新的数据还是会进入dff冲毁数据。
  • 建立时间(setup time):触发器在时钟沿到来之前,其数据的输入端的数据必须保持不变的时间;
    • 建立时间决定了该触发器之间的组合逻辑的最大延迟maxdelays。

 

  • 保持时间(hold time)触发器在时钟沿到来之后,其数据输入端的数据必须保持不变的时间;
    • 关于保持时间的理解就是,在触发器D2的输入信号还处在保持时间的时候,如果触发器D1的输出已经通过组合逻辑到达D2的输入端的话,将会破坏D2本来应该保持的数据。
    • 保持时间决定了该触发器之间的组合逻辑的最小延迟mindelays。
    • Hold time violation的原因是前面输出变化太快,后端综合工具很容易自动解决这个问题(例如自动插入几个buffer)。

建立保持时间分析

参考:FPGA基础学习(5) -- 时序约束(实践篇) - 肉娃娃 - 博客园 (cnblogs.com)
  • 电路模型:
图片转自博客园,侵删


上图是典型的同步时序模型及其时序图,由发起寄存器(rega)、组合逻辑、捕获寄存器(regb)及其中间的走线组成。源时钟clk到达rega的时钟端口时,会有一定的延迟,从而形成clka。同理,时钟延迟到达regb的时钟端口,形成clkb。Tco为有效数据出现在发起寄存器Q端口所需时间。Tcomb为数据延迟,包括组合逻辑延迟和走线延迟。Tsu表示捕获寄存器建立时间要求。Th表示捕获寄存器保持时间要求。其中Tco、Tsu和Th是由FPGA的芯片工艺决定的。所以,我们所谓的时序约束,实际上就是对时钟延迟和Tcomb做一定的要求或者干预,其中Tcomb由组合逻辑(代码)及布局布线决定,这也决定了系统最高的工作频率。

  • 裕量Time Slack:
    时间裕量包括建立时间裕量和保持时间裕量(setup slack和hold slack)。从字面上理解,所谓“裕量”即富余的、多出的。什么意思呢?即保持最低要求的建立时间或保持时间所多出的时间,那么“裕量”越多就意味着时序约束越宽松呢。
    • 如果Times Slack > 0 , 则电路能够正常被采样,否则不可以!
    • 整个电路中,时钟频率由最差的一条时序路径决定!
    • Setup Time公式:Tclka + Tco + Tcomb + Tsetupslack + Tsetup = Tcycle + Tclkb ,即Tsetupslack = Tcycle + (Tclkb-Tclka) - Tsetup - Tco - Tcomb。
      其中Tclka和Tclkb是两个时钟偏斜,Tco是D->Q的传输延迟,Tcomb是组合逻辑延迟,Tcycle是时钟周期,Tsetup是建立时间,Tsetupslack是建立时间裕量。
    • Hold Time公式:Tclka + Tco + Tcomb = Tclkb +Thold + Tholdslack,即Tholdslack = Tco + Tcomb - (Tclkb - Tclka) - Thold.
      其中Tclka和Tclkb是两个时钟偏斜,Tco是D->Q的传输延迟,Tcomb是组合逻辑延迟,Thold是建立时间,Tholdslack是保持时间裕量。
图片转自博客园,侵删


通俗的讲,一个FPGA工程在综合实现后,是否满足时序约束,其实就是看所有的捕获寄存器是否能正确稳定捕获到发起寄存器发出的数据。如上图所示,也就是说到达捕获寄存器的数据输入端口D(regb/D)的数据要满足建立和保持时间要求,也就是说在Tsu之前,current data valid就要准备就绪,而在Th之后呢,current data valid还要多维持一段时间。换言之,在Tsu之前以及Th之后多出的这部分时间,我们就称之为“裕量”,裕量越大,时序越宽松。裕量的大小与时钟频率、代码设计以及布局布线有着紧密的联系。一个设计的时序报告中,裕量为负数时,表示时序约束出现违例,虽然个别违例不代表你的工程就有致命的问题,但是这是一个风险(时序报告是按照工艺、电压以及温度的上下限给出的结果)。当违例数较多,也就意味着设计在实际环境中出现问题的概率也会越大。

  • 最大延迟和最小延迟:
    如下图所示,“数据有效窗口”表示捕获的数据满足建立时间和保持时间,在此窗口中要捕获的数据不能发生变化,否则将引起不稳定的结果。
图片转自博客园,侵删


我们来看1、2、3三种情况,在分析之前,首先要明确Data的持续时间长度一定是一个时钟周期(多周期打拍另说)。1:当延迟时间大于T-Tsu时,Data在建立时间区域内才到达regb,所以不满足建立时间要求,这就是说数据来的“太晚了”;2:当Data延迟了很小一段时间(<Th),Data在保持时间内就变化了,所以不满足保持时间,这就是说数据来的“太早了”。3:当Data延迟了Th,Data则满足建立时间要求又刚好满足保持时间要求,这就是说数据来的“正巧”。
综上所述,数据的最大延迟是T-Tsu,最小延迟是Th。
一般而言,在综合之后,我们需要特别关注的是建立时间的时序违例,因为可以通过增加布线长度来保证保持时间。大多数保持时间违例在实现之后自然会被优化掉。

Setup Time Violation的解决方案

  • Setup时间公式:Tclka + Tco + Tcomb + Tslack + Tsetup = Tcycle + Tclkb,即Tslack = Tcycle + Tclkb - Tsetup -Tclka - Tco - Tcomb
    其中Tclka和Tclkb是两个时钟偏斜,Tco是D->Q的传输延迟,Tcomb是组合逻辑延迟,Tcycle是时钟周期,Tsetup是建立时间,Tslack是建立时间裕量。
    如果出现了Setup Time Violation,也就是说Tsetupslack为负数了,那么可以考虑:
    • 增大时钟周期Tcycle,即降低时钟频率
    • 减小 D->Q的传输延迟Tco,即更换更快的器件,使用更先进的器件库
    • 减小 Tcomb,即减小组合逻辑延时,主要是关键路径的处理。包括插入寄存器使其流水、重定时等。
    • 增大时钟歪斜Tskew=Tclkb-Tclka。如果时钟歪斜 Tskew 为正,对setup是有利的,对hold是有害。

 

Hold Time Violation的解决方案

  • Hold Time公式:Tclka + Tco + Tcomb = Tclkb +Thold + Tholdslack,即Tholdslack = Tco + Tcomb - (Tclkb - Tclka) - Thold.
    其中Tclka和Tclkb是两个时钟偏斜,Tco是D->Q的传输延迟,Tcomb是组合逻辑延迟,Thold是建立时间,Tholdslack是保持时间裕量。
    如果出现了Hold Time Violation,也就是说Tholdslack为负数了,那么可以考虑:
    • 增加 Tcomb 延迟,增大数据的延迟具体表现为插入 Buffer,Xilinx 还提到可以插入 LUT1 增加延迟等方式来修复;
    • 增大 Tcomb,即增大组合逻辑延时,主要是关键路径的处理。可以增加Buffer,或者后端布局布线拉长布线以增加延时。
    • 减小时钟歪斜Tskew=Tclkb-Tclka。如果时钟歪斜 Tskew 为正,对setup是有利的,对hold是有害。

 

编辑于 2022-10-

标签:Tclka,Tco,时间,Tcomb,------,转载,延迟,违例,时钟
From: https://www.cnblogs.com/hxing/p/17654980.html

相关文章

  • Ubuntu22.04(禁用)彻底删除Snap以及出现“rm: 无法删除"XXX":只读文件系统”的解决方案
    Ubuntu22.04(禁用)彻底删除Snap以及出现”rm:无法删除"XXX":只读文件系统“的解决方案导语Snaps是Ubuntu的母公司Canonical于2016年4月发布Ubuntu16.04LTS(LongTermSupport,长期支持版)时引入的一种容器化的软件包格式。自Ubuntu16.04LTS起,Ubuntu操作系......
  • C++对象的创建和销毁过程分析
    对象的创建和销毁过程分析1、对象的创建过程①给对象划分内存空间(栈、堆)②执行初始化列表根据继承表的顺序调用父类的无参构造或有参构造通过:父类(val)调用父类的有参构造根据成员变量的定义顺序调用类类型成员的无参构造或有参构造通过:类类型成员名(val)调用类类型成员......
  • lvgl:对象obj
    1对象object  1.1对象lv_obj_t     对象object:构建用户界面的基本单位,也称之为控件widgets;对于button,label,image,list等组件都可称之为对象;//lv_obj.h对象结构体;typedefstruct_lv_obj_t{constlv_obj_class_t*class_p;struct_lv_obj_t*parent;......
  • 认识微服务-微服务技术对比
       ......
  • C++面向对象、类和对象、访问控制限定符
    面向对象和面向过程面向过程:关注如何解决问题,以及解决问题的步骤面向对象:关注的解决问题的"人"即"对象",以及实现能解决问题的"对象"注意:面向对象的细节的本质上还是面向过程,因此面向对象不是解决问题的捷径,而是以更高的维度去思考问题面向对象的四个特性:抽象:先找出(想象)......
  • 认识微服务-SpringCloud
        ......
  • Qt模仿多标签页窗口拖拽操作
    本功能的实现主要依托于Qt的拖拽操作。从本文可以学到Qt的拖拽机制,自定义QMimeData的数据类型,和自定义的QGraphicsEffect效果。本文的视觉特效是应用于拖拽的时候指示当前鼠标的位置和拖拽结果新标签页会放置在当前窗口的第几个标签页之后。以下是窗口的效果图片,为了方便标签是用......
  • 杜爷筛
    1.图上异或题从雷暴那里看到的估计是nfls模拟赛题。给定一张带边权图,询问从1开始出发的路径,边权异或和一共有多少不同的权值。还有若干次删边操作(永久的),删一次问一次。P4151【[WC2011]最大XOR和路径】的结论,取出任意生成树\(T\),假设所有从\(1\)出发又回到\(1\)的路......
  • 欢迎来到我的博客
    欢迎来到我的博客!!!本博客主要记录了学习OI的过程与心得。有本蒟蒻的写过的学习笔记、题解、算法标程、语法记录等等,希望能够帮到你。原博客地址在luogu,因其九月博客整改,于2023.8.23把所有文章搬运到博客园。如果觉得文章不错的话,记得点点推荐哦~~~......
  • Python全栈开发从入门到入土
    Python全栈开发从入门到入土持续更新中~~~希望大家多多支持!【Python基础从入坑到放弃】【一】Python基础入门【一】计算机基础编程语言的介绍什么是语言什么是编程语言为什么会出现编程语言什么是编程为什么要有编程计算机组成原理计算机的五大组成部分......