0 前言

时序分析基础,底层原则:
时序要满足latch的setup&hold时间。在要求的稳定窗口内数据不能变化。
基本时序模型
Stack(setup)= T-Tsu-Tco-Tdata 相邻2个时钟
Stack(hold )= Tco + Tdata - Thd 同1个时钟
如果 Tco 和 Tdata 延迟变大,保持时间 Stack (hold) 裕度越大
当出现hold违例,可以增加Tdata走线长度来消除。
如果 Tco 和 Tdata 延迟变大,建立时间 Stack (setup) 裕度越小


1 input delay分析

FPGA管脚上的视角来看

input delay 描述数据port在latch时钟沿来看,数据延后了多久才稳定。
max_delay(分析setup)
min_delay(分析hold )

1.1 input delay的分类

系统同步分为3种:(SDR上升沿、SDR下降沿、DDR)x(边沿对齐)
源同步分为6种 :(SDR上升沿、SDR下降沿、DDR)x(中心对齐、边沿对齐)
外部器件可能会提供 Tco\setup\hold\shew
需要注意的隐含点:

  1. 源同步边沿对齐默认在接收侧(FPGA)内存在PLL进行移相180度。
  2. 系统同步只有边沿对齐,没有中心对齐。

1.2 Tdly 的定义

在进行intput delay计算的时候需要考虑时钟路径的延时和数据路径的延时,
而FPGA来看,只需要知道数据相对于时钟的延时,那么可以将时钟延时看做0,
并且将时钟路径延时补偿到数据路径延时中得到Tdly,Tdly=数据路径-时钟路径。这样能够减少分析的变量。

1.3 总结

  1. 上升沿不添加-clock_fall ,默认就是上升沿。下降沿与上升沿的区别就在于添加-clock_fall 。
  2. DDR约束就多了-clock_fall -add_delay
  3. 描述的是坐标时间,二部是绝对差值。以latch为0时刻。

2 具体内容

2.1 系统同步

系统同步的数据都是出现在launch沿之后,latch是下一个沿

2.1.1 SDR上升沿



已知:
时钟名   : clk_in
数据port : din
T   =10ns
Tco =1~2ns
Tdly=0.3~0.4ns
得到:
set_input_delay  -clock clk_in  -max  2.4  [get_ports  din]
set_input_delay  -clock clk_in  -min  1.3  [get_ports  din]
需要注意是 -max 2.4 而不是  -max_delay 2.4

2.1.2 SDR下降沿



已知:
时钟名   : clk_in
数据port : din
T   =10ns
Tco =1.5~2ns
Tdly=0.3~0.4ns
得到:
set_input_delay  -clock clk_in  -max 2.4  [get_ports  din] -clock_fall
set_input_delay  -clock clk_in  -min 1.8  [get_ports  din] -clock_fall

2.1.2 DDR




已知:
时钟名 : clk_in
数据port : din
T =10ns
Tco =1.0~2ns 上升沿
Tco =1.5~2ns 下降沿
Tdly=0.3~0.4ns
得到:
set_input_delay -clock clk_in -max 2.4 [get_ports din]
set_input_delay -clock clk_in -min 1.3 [get_ports din]
set_input_delay -clock clk_in -max 2.4 [get_ports din] -clock_fall -add_delay
set_input_delay -clock clk_in -min 1.8 [get_ports din] -clock_fall -add_delay
//有个知识点:下降沿发起的数据是在下个上升沿采样。所以data path是从5开始。

2.2 源同步

2.2.1 源同步 中心对齐

中心对齐的latch沿是是图中的上升沿的下一个上升沿。可以看到input_delay的范围是[dv_are,T-dv_bre],由于时钟是周期的。

2.2.1.1 上升沿

set_input_delay -clock [get_clocks clk_in] -min -add_delay 1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 9.0 [get_ports din]

2.2.1.2 下降沿


set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay 1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 9.0 [get_ports din]

2.2.1.3 DDR


set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay 1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 4.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -min -add_delay 1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 4.0 [get_ports din]

2.3.2 源同步 边沿MMCM对齐

MMCM具有调整时钟相位的功能。latch沿就是图中的上升沿,ltach的数据是上升沿之后的数据。

2.3.2.1 上升沿


set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 1.0 [get_ports din]

2.3.2.2 下降沿

-clock_fall

2.3.2.3 DDR


set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay -1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 1.0 [get_ports din]

2.3.3 源同步 边沿直接对齐

2.3.3.1 上升沿


set_input_delay -clock [get_clocks clk_in] -min -add_delay 9.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 11.0 [get_ports din]

2.3.3.2 下降沿

-fall_clock

2.3.3.3 DDR


set_input_delay -clock [get_clocks clk_in] -clock_fall -min -add_delay 4.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -clock_fall -max -add_delay 6.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -min -add_delay 4.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 6.0 [get_ports din]

实验

未约束input_delay 的编译结果

未添加约束,slack =无穷,也就是无法分析。


添加DDR input delay 约束

vivado分析最差路径(上升沿和下降沿的hold都能满足)也就是下降沿发送数据,上升沿采样。
data path的起点launch沿是5.0ns表示分析的是下降沿发起的数据。进过3.091ns到达reg.D
从destination clock path 窗口看到,latch沿是10.0ns,正好符合下降沿发送数据,上升沿采样。
时钟从clk_in port 经过bufg等延时,再减去setup就能得到required time。可以看到setup很小只有0.007ns。




对比
use MMCM 边沿 源同步
set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 1.0 [get_ports din]
直接 边沿 源同步
set_input_delay -clock [get_clocks clk_in] -min -add_delay 9.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 11.0 [get_ports din]
两者的区别是什么?感觉相差一个周期。
使用下面约束,不添加MMCM 会报错hold见下面截图,看到是时钟路径过长
set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 1.0 [get_ports din]


当使用下面约束,有setup报错
set_input_delay -clock [get_clocks clk_in] -min -add_delay 9.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay 11.0 [get_ports din]

对比

## 约束1:
set_input_delay -clock [get_clocks clk_in] -min -add_delay -1.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay  1.0 [get_ports din]
## 约束2:
set_input_delay -clock [get_clocks clk_in] -min -add_delay  9.0 [get_ports din]
set_input_delay -clock [get_clocks clk_in] -max -add_delay  11.0 [get_ports din]

约束1和约束2比较,两者的区别是什么?感觉就相差一个周期10ns。

结论:
使用约束1,vivado的默认latch沿的时钟是0ns的,时钟路径从0ns开始累积。当前launch就是当前latch,
使用约束2,vivado的默认latch沿的时钟是10ns的,时钟路径从10ns开始累积。
两者的latch时钟相差一个周期T=10ns。


参考

https://my.oschina.net/msxbo/blog/3122304

input_delay相关推荐

  1. max_delay/min_delay和input_delay/output_delay

    今天在使用DC设置随路时钟的时候发现里两个比较容易混淆的设置:max_delay/min_delay和input_delay/output_delay. 1)max_delay/min_delay设置 ...

  2. 时序分析基础(2)——input_delay

    input_delay时序分析模型   上游器件提供时钟和数据,经过PCB走线,进入FPGA内部的寄存器.同寄存器级别的时序分析一样,对于IO接口的时序分析也是从建立时间和保持时间来分析的.   上图 ...

  3. 相机标定 matlab opencv ROS三种方法标定步骤(2)

    二  ubuntu下Opencv的相机标定 一般直接用Opencv的源码就可以进行相机的标定,但是可能只是会实现结果,却不懂实现的过程,我也是模模糊糊的看了<计算机视觉中的多视图几何>以及 ...

  4. FPGA的设计艺术(4)STA实战之不同时序路径的建立保持时间计算

    前言 本文首发:FPGA的设计艺术(4)STA实战之不同时序路径的建立保持时间计算 STA定义 STA定义为:时序验证,可确保各种电路时序是否满足各种时序要求. ASIC / FPGA设计流程中最重要 ...

  5. 基于OpenCV进行相机标定

    相机已经存在了很长一段时间. 随着二十世纪末廉价针孔相机的推出,相机已经在日常生活中普及.虽然价格便宜,但是成像存在严重的畸变.不过,这些畸变是固定的形式,基于标定和重映技术可以纠正畸变.此外,基于标 ...

  6. 逻辑综合工具DesignCompiler使用教程

    逻辑综合工具Design Compiler使用教程 图形界面design vision操作示例 逻辑综合主要是将HDL语言描述的电路转换为工艺库器件构成的网表的过程.综合工具目前比较主流的是synop ...

  7. fpga如何约束走线_FPGA时序约束实战篇之多周期路径约束

    多周期路径约束 多周期路径,我们一般按照以下4个步骤来约束: 1. 带有使能的数据 首先来看带有使能的数据,在本工程中的Tming Report中,也提示了同一个时钟域之间的几个路径建立时间不满足要求 ...

  8. Design Compiler工具学习笔记(7)

    目录 引言 背景知识 多时钟设计 DC 输出文件分析 实际操作 设计源码 综合脚本 综合网表 SDF文件 SDC文件 REPORT文件 引言 本篇继续学习 DC的基本使用.本篇主要学习 DC 综合之后 ...

  9. Design Compiler工具学习笔记(5)

    目录 引言 知识储备 代码风格 DFT 实际操作 引言 本篇继续学习 DC的基本使用.本篇主要学习 DC 工作机理和工作过程 以及简单介绍 DFT. 前文链接: Design Compiler工具学习 ...

最新文章

  1. debian---nano转VIM
  2. lnmp环境如何添加域名和虚拟主机
  3. 蓝牙连接不上车要hfp_蓝牙耳机的音质由什么因素决定?价格高的蓝牙耳机音质一定好吗?...
  4. CocoaPods版本升级
  5. 使用coding.net上传项目
  6. sklearn自学指南(part61)--调整估计器的超参数
  7. 导出来的双引号怎么处理_阿里巴巴国际站图片处理小技巧
  8. spring boot 读取 application.properties 初始化bean
  9. git设置全局账号密码_jenkins2.222使用之二、总体设置
  10. java 获取键盘输入法_Java中接收键盘输入的三种方法
  11. views视图函数-模板语法
  12. mybatis逆向工程配置(MySQL和SQL server)
  13. 项目管理之我见:程序开发步骤
  14. 序列化和反序列化(五)——敏感字段加密
  15. matlab按图像边缘抠图_不会抠图?保姆级抠图教程!手把手教你抠图(二)
  16. SSM仓库管理系统毕业设计-附源码061015
  17. 谈网页游戏外挂之用python模拟游戏(热血三国2)登陆
  18. 伊利诺伊香槟分校计算机排名,2019伊利诺伊大学香槟分校排名(USNews排名)
  19. Mysql中嵌套查询和连接查询的区别
  20. torch.contiguous()方法

热门文章

  1. 刹那芳华,犹如指尖流砂
  2. Android wear 睡眠追踪,为什么智能手表还不是最理想的睡眠追踪设备
  3. Elasticsearch(七) - X-Pack 用户管理
  4. 中国运动型多功能车和皮卡视频行业市场供需与战略研究报告
  5. html的国际标准智商测试,iq测试题国际标准30道 国际标准IQ测试多少分合格
  6. 看了这篇Docker指令详解,网友直呼:我收藏了你呢?
  7. 移动端图片变模糊问题
  8. IOT漏洞挖掘学习笔记(一)——堆基础及相关数据结构
  9. 数据质量监控Griffin——使用
  10. 2020校招面试之深信服