1.   偏移约束的作用

  偏移约束(Offset Constraint)用来定义一个外部时钟引脚(Pad)和数据输入输出引脚之间的时序关系,这种时序关系也被称为器件上的Pad-to-Setup或Clock-to-Out路径。这些约束对与外部元器件相连的接口十分重要,在这里,需要解释两个术语:

  Pad-to-Setup:也被称为OFFSET IN BEFORE约束,是用来保证外部输入时钟和外部输入数据的时序满足FPGA内部触发器的建立时间要求的。如下图TIN_BEFORE约束使得FPGA在进行DATA_IN和CLK_SYS布线时努力保证DATA_IN相对于CLK_SYS的延时小于TIN_BEFORE。

  Clock-to-Out:也被称为OFFSET OUT AFTER约束,是用来满足下游器件建立保持(setup/hold)要求或输出时钟和数据之间时序要求的。

OFFSET IN BEFORE 或OFFSET OUT AFTER约束允许用户指定外部输入或输出引脚相对于时钟边沿到内部数据的延时。

1‑1输入偏移约束时序参考图

1‑2输出偏移约束时序参考图

Xilinx FPGA有三个层次的约束:

  • Global OFFSET:为所有输入或输出指定相对某个特定时钟的约束;
  • Group OFFSET:为一组输入或者输出指定相对驱动他们的时钟的约束
  • Net-Specific OFFSET:为某个特定的输入或者输出指定相对其驱动时钟的约束;

在进行约束的详细讲解之前,必须明确两个概念:

  • 建立时间setup time

  指在触发器始终上升沿到来之前,数据必须保持稳定的时间,如果建立时间不够,数据将不能被打入触发器;

  • 保持时间hold time

  指触发器的时钟上升沿到来之后数据必须稳定不变的时间,如果保持时间不够,数据不能被打入触发器;

1‑3建立保持时间时序图

2.   OFFSET IN约束

  OFFSET IN约束用来设定Pad-to-Setup时序要求。OFFSET IN是对数据时钟关系的一种说明。它当分析建立时间要求(data_delay+setup-clock_delay-clock_arrival要求满足约束条件)的时候,需要考虑时钟延时(clock delay)、时钟边沿(clock edge)、DLL/DCM引入的时钟相位。

2.1.  OFFSET IN BEFORE 约束

  OFFSET IN BEFORE约束限定了数据从引脚传播到同步元件并在同步元件建立起来的所需的时间。比如 “OFFSET = IN 2 ns BEFORE clock_pad”这个约束,限定数据必须在下一个时钟边沿到来之前2ns内读取,因此FPGA会规划使得数据相对时钟边沿的超前2ns之内。

2‑1OFFSET IN BEFORE约束带校准功能的电路

  上图FPGA在布线时会尽力去满足如下不等式:

TData + TSetup - TClock <= Toffset_IN_BEFORE;

2.1.1.   VALID约束

  OFFSET IN约束往往和VALID约束一起使用。OFFSET IN约束在建立时间分析中作为建立时间要求使用,而VALID约束在保持时间约束中作为保持时间要求使用。VALID约束指定了输入数据的持续时间。在默认情况下,FPGA指定VALID和OFFSET的值相等,也即FPGA在默认情况下认为保持时间为0。

2‑2带有VALID约束的输入偏移约束

2.1.2.   OFFSET IN约束的一个简单例子

  FPGA的分析工具在综合时经常会用到一个词:Slack,即松弛时间,当Slack>0时,该路径设计满足时序要求;当Slack<0时,该路径不满足时序要求。

Slack = (Requirement - (Data Path - Clock Path - Clock Arrival))

2‑3OFFSET IN的简单例子时序

该约束为:

TIMESPEC TS_clock = PERIOD clock_grp 10 ns HIGH 50%;

OFFSET = IN 3 ns BEFORE clock;

2‑4OFFSET IN约束时序报告

  从时序约束报告的Slack的值可以看出,Data不能被Clock成功打入触发器FF0.

2.2.  OFFSET IN AFTER约束

  OFFSET IN AFTER和OFFSET IN BEFORE在本质上是一样的,只是形式上不一样,其约束效果是完全一样的。OFFSET IN AFTER的约束公司如下:

TData + TSetup - TClock <= TPeriod – Toffset_IN_AFTER;

3.   OFFSET OUT约束

  OFFSET OUT约束用来定义clock-to-pad时序要求。OFFSET OUT约束是对外部clock-to-data的说明并且必须考虑clock_delay、clock edge和DLL/DCM时钟相位等。

3.1.  OFFSET OUT AFTER约束

  OFFSET OUT AFTER约束定义了数据从同步元件传播到管脚最长允许时间。可以形象地理解为时钟边沿到达器件边界时数据离开器件边界的时间。“OFFSET = OUT 2 ns AFTER clock_pad”约束意思是从FPGA数据端口传输到下游器件的数据在参考时钟2ns之后一定可读。

3‑1OFFSET OUT AFTER约束带校准功能的电路

  下面公式规定了数据时钟的这种关系:

TQ + TClock2Out + TClock <= Toffset_OUT_AFTER;

  OFFSET OUT AFTER约束沿着参考时钟路径和数据路径的最大延时不超过偏移值。

3.1.1.   OFFSET OUT AFTER约束的一个简单例子

  同样的,OFFSET OUT的Slack也定义了输出约束的松弛时间:

Slack = (Requirement - (Clock Arrival + Clock Path + Data Path))

3‑2OFFSET OUT 约束的简单例子

其约束应写为:

  TIMESPEC TS_clock = PERIOD clock_grp 10 ns HIGH 50%;

  OFFSET = OUT 3 ns AFTER clock;

3‑3OFFSET OUT 时序约束报告

  时序报告中Slack=-0.865ns,不满足时序约束要求。

3.2.  OFFSET OUT BEFORE约束

  同样地,OFFSET OUT BEFORE和OFFSET OUT AFTER约束本质上没有什么不同,只是形式上的不一样的,其约束效果完全一样。

FPGA编程技巧系列之输入输出偏移约束详解的更多相关文章

  1. FPGA编程技巧系列之按键边沿检测

    抖动的产生: 通常的按键所用开关为机械弹性开关,当机械触点断开.闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开.因而在闭合及断开的瞬间均伴随有一连串的 ...

  2. 深入浅出Mybatis系列(四)---配置详解之typeAliases别名(mybatis源码篇)

    上篇文章<深入浅出Mybatis系列(三)---配置详解之properties与environments(mybatis源码篇)> 介绍了properties与environments, ...

  3. Android Studio系列教程五--Gradle命令详解与导入第三方包

    Android Studio系列教程五--Gradle命令详解与导入第三方包 2015 年 01 月 05 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处!http://s ...

  4. 构建安全的Xml Web Service系列之wse之错误代码详解

    原文:构建安全的Xml Web Service系列之wse之错误代码详解 WSE3.0现在还没有中文版的可以下载,使用英文版的过程中,难免会遇到各种各样的错误,而面对一堆毫无头绪的错误异常,常常会感到 ...

  5. [js高手之路] es6系列教程 - 对象功能扩展详解

    第一:字面量对象的方法,支持缩写形式 //es6之前,这么写 var User = { name : 'ghostwu', showName : function(){ return this.nam ...

  6. [转帖]Linux系列之SAR命令使用详解

    Linux系列之SAR命令使用详解 sar是System Activity Reporter(系统活动情况报告)的缩写.这个工具所需要的负载很小,也是目前linux中最为全面的性能分析工具之一.此款工 ...

  7. 1_03_MSSQL课程_约束详解

    复习: ->创建数据库的SQL:******** create database 数据库名 on ( name=‘’, size=5MB, filegrowth=2MB, filename=&q ...

  8. SpringBoot系列(十二)过滤器配置详解

    SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...

  9. Xilinx FPGA编程技巧之常用时序约束详解

    1.   基本的约束方法 为了保证成功的设计,所有路径的时序要求必须能够让执行工具获取.最普遍的三种路径为: 输入路径(Input Path),使用输入约束 寄存器到寄存器路径(Register-to ...

随机推荐

  1. Windows下如何查看当前登录用户

    1.通过whoami命令查看 2.通过username变量查看,具体命令如下:echo %username% 上述两种方法只能查看当前会话用户信息,那么如何看到其他登录用户呢? 可以通过执行query ...

  2. Linux下完美使用find+grep实现全局代码搜索

    作者:zhanhailiang 日期:2014-10-11 背景 在Window下有大量方便的图形化工具能够实现全局搜索,可是Linuxserver中因为使用命令行操作导致全局搜索是一个比較高的门槛. ...

  3. Java总结之网络

    [网络基础概念] 什么是计算机网络: 把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大.功能强的网络系统,从而使众多的计算机能够方便的互相传递信息,共享硬件.软件.数据信息等资源 ...

  4. MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    这次换了台电脑,所以须要又一次配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装.同一时候给大家一个參考. 1.JDK的安装 首先下载JDK,这个从sun公司官网能够下载.依据自己的系统选 ...

  5. Cg入门20:Fragment shader - 片段级模型动态变色(实现汽车动态换漆)

    Unity 一个面片的最大顶点数为65524,所以大于这个数,请拆分成多个面片 1.获取汽车x轴的最大值和最小值[-2.5,2.5]+R watermark/2/text/aHR0cDovL2Jsb2 ...

  6. js 获取函数的所有参数名

    具体思路: 利用Function.toString()方法,获取到函数的源码,再利用正则匹配获取到参数名字. 实现代码(代码基于ES6): // 获取函数的参数名 function getParame ...

  7. bzoj1791

    1791: [Ioi2008]Island 岛屿 Time Limit: 20 Sec  Memory Limit: 162 MBSubmit: 1680  Solved: 369[Submit][S ...

  8. bzoj 4596: [Shoi2016]黑暗前的幻想乡【容斥原理+矩阵树定理】

    真是简单粗暴 把矩阵树定理的运算当成黑箱好了反正我不会 这样我们就可以在O(n^3)的时间内算出一个无向图的生成树个数了 然后题目要求每个工程队选一条路,这里可以考虑容斥原理:全选的方案数-不选工程队 ...

  9. bzoj 1697: [Usaco2007 Feb]Cow Sorting牛排序【置换群】

    至今都不知道置换群是个什么东西--题解说什么就是什么.jpg 以下来自hzwer:http://hzwer.com/3905.html #include<iostream> #includ ...

  10. C头文件中尖括号与双引号的区别及编译搜索顺序

    这两天被问到一个很有意思的问题:C头文件中尖括号与双引号有什么区别,以前只大约知道 <> 常用在系统库文件,"" 常用在自定义的借口文件中,那具体在gcc编译搜索过程中 ...