时序分析和时序约束基础

  • 时序分析和时序约束基础
    • 1. 时序分析
    • 2. 时钟约束

时序分析和时序约束基础

1. 时序分析

以下图所示的电路为例,电路由两个 D 触发器 Reg1 和 Reg2 组成,数据从 Reg1 的 D 端口输入,经过 Reg1 的寄存从 Reg1 的 Q 端口输出,再经过一段组合逻辑电路,输入 Reg2 的 D 端寄存。
为了能够使数据正确的被 Reg2 寄存,需要满足以下时序。

  • 建立时间 TsuT_{su}Tsu​
    数据在时钟上升沿 (假设使用的时钟边沿为上升沿) 到来前需要稳定一段时间,这段时间的最小值即为建立时间,当稳定时间小于建立时间时数据无法被寄存。
  • 保持时间 ThT_hTh​
    数据在时钟上升沿 (假设使用的时钟边沿为上升沿) 到来后需要保持一段时间,这段时间的最小值即为保持时间,当稳定时间小于保持时间时数据无法被寄存。
  • 传播延时 TcoT_{co}Tco​
    当时钟上升沿到来时,数据从同一个寄存器的 D 端口稳定传输到 Q 端口所需要的时间。即 Q 端口并不是在时钟上升沿到来时立刻变化。
  • 数据组合逻辑传输时间 TdataT_{data}Tdata​
    数据在组合逻辑电路中传输耗费的时间。
  • 时钟偏斜 TskewT_{skew}Tskew​
    同一时钟信号到达源寄存器 (Reg1) 和目的寄存器 (Reg2) 的差值,一般为到达目的寄存器的时间减去到达源寄存器的时间。
  • 时间裕度 TslackT_{slack}Tslack​
    当数据到达 Reg2 的 D 端口时,此时还未到达 Reg2 的建立时间,中间的差值即为时间裕度。

所有的参数在下图的时序图中标出,其中 Clk1、D1、Q1 分别为 Reg1 的时钟信号、D 端口信号、Q 端口信号,Clk2、D2、Q2 分别为 Reg2 的时钟信号、D 端口信号、Q 端口信号。

经过简单分析可以得到下面的公式,其中 TclkT_{clk}Tclk​ 为时钟周期。
Tco+Tdata+Tslack+Tsu−Tskew=TclkT_{co} + T_{data} + T_{slack} + T_{su} - T_{skew} = T_{clk}Tco​+Tdata​+Tslack​+Tsu​−Tskew​=Tclk​

  • 为了满足建立时间,需要让 D2 端口的信号比 Reg2 的时钟沿提前一个建立时间到达,需要满足
    Tco+Tdata<Tclk+Tskew−TsuT_{co} + T_{data} < T_{clk} + T_{skew} - T_{su} Tco​+Tdata​<Tclk​+Tskew​−Tsu​
    也可以通过 TslackT_{slack}Tslack​ 判断,当 TslackT_{slack}Tslack​ 为正值时,时序满足,TslackT_{slack}Tslack​ 越大时间裕度越好,即
    Tslack=Tclk+Tskew−Tco−Tdata−Tsu>0(1.2.1)\tag{1.2.1} T_{slack} = T_{clk} + T_{skew} - T_{co} - T_{data} - T_{su} > 0Tslack​=Tclk​+Tskew​−Tco​−Tdata​−Tsu​>0(1.2.1)

  • 为了满足保持时间,以 D2 端口为例,D2 端口应该在保持时间内都稳定不变,即新的 D2 端口信号应该晚于 Reg2 时钟沿一个保持时间到达,即
    Tco+Tdata>Tskew+Th(1.2.2)\tag{1.2.2} T_{co} + T_{data} > T_{skew} + T_hTco​+Tdata​>Tskew​+Th​(1.2.2)

时序分析中需要同时满足建立时间和保持时间,一般来说因为 TdataT_{data}Tdata​ 的存在,保持时间基本都会满足。

2. 时钟约束

时序约束就是我们给出描述电路功能的硬件语言代码,以及要求的时序条件,比如时钟周期、时钟偏斜、输入延迟、扇出、面积等,EDA 软件再根据要求,从内部器件库中选择合适的器件搭建电路。
以上图所示的电路结构为例,Module模块中是需要综合的部分,也即我们的硬件语言代码描述的部分,Module中路径可以分为四种,分别为

  1. Path1: 前级寄存器的 clk 端口到后级寄存器的 D 端口
  2. Path2: 模块的输入端口到第一个寄存器的 D 端口
  3. Path3: 最后一个寄存器的 D 端口到模块的输出端口
  4. Path4: 模块的输入端口到模块的输出端口

首先分析四条路经中唯一没有和模块外界直接连接的路径 Path1,根据 1.2 节中的公式 (1.2.1) 和 (1.2.2),其中 TcoT_{co}Tco​、TdataT_{data}Tdata​、TsuT_{su}Tsu​、ThT_hTh​ 这些参数均与器件相关,EDA 软件可直接从器件库中计算得出,但是对于 TclkT_{clk}Tclk​、TskewT_{skew}Tskew​ 这些与时钟相关的参数,因为时钟一般由模块外部的晶振、PLL 等提供,EDA 软件是不知道的,所以需要我们告诉 EDA 软件这些跟时钟有关的参数,这个过程也就是时钟约束
关于时钟的参数除了我们在 1.2 节中提到的周期、偏斜以外,还有延迟、抖动、转换,下面依次介绍。
同样以两个相邻的寄存器的数据传输为例,如图所示由 PLL 生成的源时钟信号 CLK_SOURCE 经过一段路径传输到模块的时钟输入端口 CLK_IN,进而又在模块中分别传输到 Reg1 和 Rge2 的时钟端口 CLK1 和 CLK2。

  • 时钟周期 Cycle
    时钟周期很好理解,DC(Design Compiler) 中相关命令为

    create_clock -period 10 [get_ports clk] //创建周期为10ns的时钟信号clk
    
  • 时钟延迟 Latency
    时钟延迟分为两部分,一部分是从源时钟 CLK_SOURCE 到模块时钟输入端口 CLK_IN 的延迟,称为 Source latency,对应图中 Source latency;另一部分是从模块输入时钟端口 CLK_IN 到寄存器的时钟端口 CLK1/CLK2,称为 Network latency,对应图中 network_latency1 和 network_latency2。
    DC 中相关命令为

    set_clock_latency -source 3 [get_clocks clk]
    set_clock_latency 3 [get_clocks clk]
    

  • 时钟偏斜 Skew
    由于延迟的存在,时钟到达每个寄存器的延迟都不相同,导致不同寄存器的时钟信号存在相位差,称为时钟偏斜。时钟偏斜可以分为两种,全局时钟偏斜和局部时钟偏斜。
    全局时钟偏斜为模块中延迟最大的寄存器的时钟信号与延迟最小的寄存器的时钟信号相位的差值。
    局部时钟偏斜是两个相邻的寄存器时钟信号的相位差值,即源寄存器和目的寄存器,局部时钟偏斜影响着时间裕度。

  • 时钟抖动 Jitter
    由于晶振本身稳定性,电源以及温度变化等原因造成的在连续时钟周期内时钟频率的变化。如图所示,对于相邻的两个周期,前一个周期长度为 T1T1T1,后一个周期长度为 T2T2T2,有时钟偏斜 Jitter=T2−T1Jitter = T2 - T1Jitter=T2−T1。

  • 时钟不确定度 Uncertainty
    在 DC 中,将时钟偏斜 Skew 和时钟抖动 Jitter 合并在一起称为不确定度,因为 Skew 和 Jitter 均对时钟信号的相位有影响,我们预估最大全局时钟偏斜的绝对值为 Skew_abs,最大时钟抖动的绝对值为 Jitter_abs,分别对建立时间和保持时间进行分析。
    对于建立时间,如图所示,原时钟周期为 T,在最坏情况下,由于时钟抖动,该周期长度减小至 T’ = T - Jitter,由于时钟偏斜,目的寄存器时钟沿提前源寄存器 Skew_abs 时间到达。在 t0 时刻源寄存器 (Reg1) 的 Q 端开始向前传输数据,目的寄存器对应的时钟边沿由 t3 时刻提前至 t1 时刻,相当于时钟提前达到了 (Skew_abs+Jitter_abs),将该时间称为 set Uncertainty。

    对于保持时间,如图所示,由于保持时间考虑的源寄存器和目的寄存器的时钟边沿属于同一周期,时钟抖动不产生影响,在最坏情况下,目的寄存的时钟沿相对源寄存器延迟到达 Skew_abs 时间,目的寄存器对应的时钟边沿由 t0 时刻延迟至 t1 时刻,相当于目的寄存器的时钟沿延后了 Skew_abs 时间,将该时间称为 hold Uncertainty。

    DC 中相关命令为

    set_clock_uncertainty -setup 0.5 [get_clocks clk]
    set_clock_uncertainty -hold 0.5 [get_clocks clk]
    
  • 时钟转换 Transition
    实际上时钟信号从低电平到高电平或者从高电平到低电平需要时间,转变所需要的时间即 Transition,一般定义为上升转换时间为电压的20%上升至80%的时间。
    DC中相关命令为

    set_clock_transition -max 0.2 [get_clocks clk]
    

需要注意的是以上的时钟属性中,Jitter、 Transition 和 Source latency 完全由模块外部晶振、PLL 等因素决定,而 Skew、Network latency 完全由模块内布局布线决定,也就是模块内时钟树。而时钟树综合一般与逻辑综合分开,在时钟树综合前 (pre-CTS),我们需要预估出时钟树的Skew、Network latency。而在时钟树综合后 (post-CTS),这些参数则可以通过计算精确得到,我们只需要设置模块外部的时钟参数即可。

参考
时序基本介绍——Jitter与Skew区别
CTS学习记录3-preCTS&post CTS&post route
DC(三)——时钟约束

时序分析和时序约束基础相关推荐

  1. FPGA时序约束篇之时序分析与时序约束的作用

    FPGA时序约束篇之时序分析与时序约束的作用 一.写在前面 二.名词解释 三.举个栗子 3.1 降低时钟频率 3.2 提升时钟频率 END 一.写在前面   在每个初学者学习FPGA设计时,都会听前辈 ...

  2. FPGA时序分析和时序约束

    FPGA时序分析和时序约束 1时序分析和时序约束 2例子分析 2.1实现代码 2.2时序分析的基本模型 1时序分析和时序约束 时序分析的目的: 通过分析FPGA设计中各个寄存器之间的数据和时钟传输路径 ...

  3. 时序约束基础 和 quartusII 中的设置

    时序约束目的: 一.提高设计的工作频率 二.获得正确的时序分析报告(STA:静态时序分析) 常用的时序概念:   周期,    最大时钟频率.    时钟建立时间.时钟保持时间.    时钟到输出延时 ...

  4. 基于Xlinx的时序分析与约束(1)----什么是时序分析?什么是时序约束?什么又是时序收敛?

    文章目录 写在前面 磨刀不误砍柴工 什么是时序分析? 什么是时序约束? 什么是时序收敛? 写在前面 时序约束与分析是FGPA开发过程中一项必备的技能,同时也是设计开发中相对较难的部分.很多人一谈起FP ...

  5. 转载:基于Xlinx的时序分析、约束和收敛(1)— 什么是时序分析?什么是时序约束?什么又是时序收敛?

    本文转载自CSDN博主「孤独的单刀」的原创文章,原文链接:https://blog.csdn.net/wuzhikaidetb/article/details/125731074 写在前面 时序约束与 ...

  6. TIMING_02 浅谈时序约束与时序分析

    由于该系列文章阅读有顺序性,所以请跳转至该系列文章第一篇从头开始阅读,并按照文章末尾指示按顺序阅读,否则会云里雾里,传送门在此:  https://blog.csdn.net/qq_33486907/ ...

  7. FPGA之道(80)静态时序分析(六)常用时序约束介绍(基于ISE的UCF文件语法)

    文章目录 前言 常用时序约束介绍 时序环境约束 分组时序约束 TNM TNM_NET TIMEGRP 常用时序约束 周期约束 输入时钟周期约束 内部时钟周期约束 关联时钟周期约束 差分时钟周期约束 输 ...

  8. FPGA时序约束、时序分析(一)

    很多人询问关于约束.时序分析的问题,比如:如何设置setup,hold时间?如何使用全局时钟和第二全局时钟(长线资源)?如何进行分组约束?如何约束某部分组合逻辑?如何通过约束保证异步时钟域之间的数据交 ...

  9. VIVADO时序约束及STA基础

    一.前言 无论是FPGA应用开发还是数字IC设计,时序约束和静态时序分析(STA)都是十分重要的设计环节.在FPGA设计中,可以在综合后和实现后进行STA来查看设计是否能满足时序上的要求.本文阐述基本 ...

最新文章

  1. [Ceoi2016|BZOJ4936] Match
  2. 计算机应用乘法,计算机系统原理(十) 二进制整数的乘法运算和除法运算
  3. 重构:改善既有代码的设计(评注版) 评注者序
  4. “约见”面试官系列之常见面试题之第八十四篇之手写promise(建议收藏)
  5. Java Jvm虚拟机的内存模型概述 《对Java的分析总结》(一)
  6. mysql currentuser_MySQL中DATABASE()和CURRENT_USER()函数的示例详解
  7. 英国汇丰银行拒绝为客户处理加密货币交易
  8. Java-java.util.concurrent.LinkedBlockingQueue
  9. C#的yield return是怎么被调用到的?
  10. Kata: 从随机的三字符列表组中恢复秘密字符串
  11. Github Gitee Java开发 热门中后台开源项目
  12. CSS 中文字体格式
  13. 围炉听风,新醅试手烫
  14. python一笔画五角星_五角星怎么画标准(一笔画五角星的顺序)
  15. 【C 语言】文件操作 ( getc 和 putc 函数 )
  16. Git-储藏(Stashing)
  17. 有梦想,就去追,不犹豫,不后悔
  18. 【图文保存为图片并下载到相册】海报 h5, 微信和 ios 不支持 和 用uniapp 微信小程序 使用canvas把页面转为图片保存到手机
  19. badboy安装及使用
  20. Springboot使用@EnableCache缓存

热门文章

  1. qiankun 微前端脚手架搭建
  2. 亚马逊海淘价格怎么算的
  3. 车辆运动学和动力学模型概述
  4. 用扫描的方法分发书稿校样
  5. Aspose.Words 破解 操作Word模板 转PDF
  6. 计算机游戏纸牌技巧,难怪老PC会有纸牌扫雷等经典游戏?终于知道真相了
  7. java编写换酒问题,空瓶换酒问题
  8. Cadence OrCAD capture SCH package
  9. 软工课题——实验报告二
  10. 单片机测钳形电流表_指针式钳形电流表的测量原理和使用方法