OFFSET 的意思是偏移。对于同步时序电路来说,数据和时钟之间的偏移量是必须要关注的。OFFSET IN和OUT分别对应的是输入和输出FPGA数据和时钟之间的偏移关系,本文将分析这一种关系。阅读本文前需要对时序收敛的基本概念和建立、保持关系有一定了解,这些内容可以在时序收敛:基本概念建立时间和保持时间(setup time 和 hold time)中找到。

系列目录 

    时序收敛:基本概念

    建立时间和保持时间(setup time 和 hold time)

    OFFSET约束(OFFSET IN 和OFFSET OUT)

    Clock Skew , Clock uncertainly 和 Period

    特殊约束From To

    OFFSET IN 使用举例

    Achieving Timing Closure


1. OFFSET约束的写法

    Offset 约束定义了外部时钟pad和与之相关的输入、输出pad之间的相对关系。这是一个基础的时序约束。Offset定义的是外部之间的关系,不能用在内部信号上。

    OFFSET约束写起来还是比较简单的,如

    OFFSET = {IN|OUT} offset_time [units] {BEFORE|AFTER}  clk_name [TIMEGRP group_name];

  • offset_time: 捕获时钟沿和数据起始时间之差,默认单位为ns,可以定义为ns、ps等
  • BEFORE|AFTER:和本意类似
  • clk_name: 输入clock pad net 的层次化全称

    offset_time 写多少取决于数据之间所需要的相对关系,另外,弄懂XST是如何分析时序关系也是十分重要的。

2. OFFSET IN 分析

   下面的式子是UG612中指出的时序要求需要满足的关系,看着可能不是太明白,但是结合例子分析就容易理解了。下面的式子给出的要求是Toffset_IN_BEFORE - (TData + TSetup - TClock) > 0 ,实际上就对应着slack 大于0 。 具体表述如下(分别为建立时间和保持时间要求)

TData + TSetup - TClock <= Toffset_IN_BEFORE

where

TSetup = Intrinsic Flip Flop setup time

TClock = Total Clock path delay to the Flip Flop

TData = Total Data path delay from the Flip Flop

Toffset_IN_BEFORE = Overall Setup Requirement

 

TClock - TData + Thold <= Toffset_IN_BEFORE_VALID

where

Thold = Intrinsic Flip Flop hold time

TClock = Total Clock path delay to the Flip Flop

TData = Total Data path delay from the Flip Flop

Toffset_IN_BEFORE_VALID = Overall Hold Requirement

 

     文档中还提到了Hold time的需求,建立时间和保持时间在上文有介绍。UG612这里是个大坑,给出了这个式子之后就再也没有讨论过hold time了。之前的WP327(WP327部分内容错误,UG612有修正)倒是提到了这一点

“The OFFSET IN requirement value is used as a setup time requirement of the FPGA during the setup time analysis. The VALID keyword is used in conjunction with the requirement to create a hold-time requirement during a hold-time analysis. The VALID keyword specifies the duration of the incoming data valid window, and the timing analysis tools perform a hold-time analysis. By default, the VALID value is equal to the OFFSET time requirement, which specifies a zero hold-time requirement. See Figure 6."

 

    这一段介绍了hold time 的处理方法。如果指定了数据的VALID 时间,那么hold time 的requirement 是确定的,这样能够进行具体的分析;如果没有确定,那么默认认为hold-time 的requirement 是0 。


3.OFFSET IN 举例

Simple Example

Slack: -0.191ns (requirement - (data path - clock path - clock arrival + uncertainty))

Source: reset (PAD)

Destination: my_oddrA_ODDR_inst/FF0 (FF)

Destination Clock: clock0_ddr_bufg rising at 0.000ns

Requirement: 3.000ns

Data Path Delay: 2.784ns (Levels of Logic = 1)

Clock Path Delay: -0.168ns (Levels of Logic = 3)

Clock Uncertainty: 0.239ns

    上面的例子首先告诉我们,OFFSET_IN约束是3ns,也就是说对于输入数据在采样时钟沿前3ns有效。那么在触发器上能否正确采样取决于:触发器采样时钟延迟了-0.168,故多提前了-0.168ns;data path delay是2.784,故数据延迟2.784;源、目的端时钟关系为0,不变;不确定性带来坏的影响,有

    slack = 3 + (-0.168) -2.784 - 0.239 +0;

Phase-Shifted Example

Slack: 2.309ns (requirement - (data path - clock path - clock arrival + uncertainty))

Source: reset (PAD)

Destination: my_oddrA_ODDR_inst/FF0 (FF)

Destination Clock: clock90_bufg rising at 2.500ns

Requirement: 3.000ns

Data Path Delay: 2.784ns (Levels of Logic = 1)

Clock Path Delay: -0.168ns (Levels of Logic = 3)

Clock Uncertainty: 0.239ns

    分析过程类似,不过我们注意到在定义的时候,相对值是clock,但是触发器采样的时钟是clk90(Destination)。这也就意味着我们多了一个clock arrival time,这个值是2.5ns。其余和上面的例子是一样的。

    那么回到之前的式子Toffset_IN_BEFORE - (TData + TSetup - TClock) > 0 ;分析报告中的requirement 实际上就是Toffset_IN_BEFORE,data path包括了TData 和 TSetup,TClock实际上就是clock arrival 和clock path delay。这个式子是没有考虑到clock uncertainty 的。

    在结束这一节之前,还要提及一个很奇怪的,不知道为何要存在的概念。之前没有特别说明,对于OFFSET IN约束来说,写法大抵是

        OFFSET = IN 3ns BEFORE clock;

    采用before是很自然的,因为我们一直在分析建立时间,建立时间就是恰恰是采样沿之前。OFFSET IN还可以这样写,即(不明白为什么要有这个样子的写法)

        OFFSET = IN 2 ns AFTER clock_pad

    此时对应的需要满足的条件是

TData + TSetup - TClock <= TPeriod - Toffset_IN_AFTER

where

TSetup = Intrinsic Flip Flop setup time

TClock = Total Clock path delay to the Flip Flop

TData = Total Data path delay from the Flip Flop

TPeriod = Single Cycle PERIOD Requirement

Toffset_IN_AFTER = Overall Setup Requirement

 

4. OFFSET OUT 分析

    OFFSET OUT 约束是FPGA到下游的器件的时钟、数据之间的相对关系,具体可以用下图来表示。具体约束要求,下游器件接收到的数据会在时钟沿之后多久之内到达。那么,根据这一幅图可以得出Clock to Out = clock_delay + clock_to_out + data_delay + clock_arrival。这是因为FPGA内部的触发器的时钟延迟了clock path,同时由于触发器的触发时间,FPGA触发器输出就延时了clock_delay+clock_to_out时间,同时数据还有延迟。另,图中给出的是一种情况,这种情况下clock_arrival = 0,最后的结果还需要加上clock_arrival. (注:下图给出的是系统同步方式,图没有画好)

 

    根据这一相对关系,可以得出FPGA时序需要满足的关系

TQ + TData2Out + TClock <= Toffset_OUT_AFTER

where

TQ = Intrinsic Flip Flop Clock to Out

TClock = Total Clock path delay to the Flip Flop

TData2Out = Total Data path delay from the Flip Flop

Toffset_OUT_AFTER = Overall Clock to Out Requirement

 

    具体的分析和OFFSET IN的类似,这里不再重复,同样给出几个例子。

例子分析

Simple Example

Slack: -0.865ns (requirement - (clock arrival + clock path + data path + uncertainty))
Source: OutD_7 (FF)
Destination: OutD<7> (PAD)
Source Clock: clock3_std_bufg rising at 0.000ns
Requirement: 3.000ns
Data Path Delay: 3.405ns (Levels of Logic = 1)
Clock Path Delay: 0.280ns (Levels of Logic = 3)
Clock Uncertainty: 0.180ns

OFFSET约束(OFFSET IN 和OFFSET OUT)的更多相关文章

  1. Timezone offset does not match system offset: 0 != -32400. Please, check your config files

    apscheduler使用uWSGI的mule模块部署的时候报错, 因为系统时区和代码运行时区不一样导致. 解决办法:在初始化的时候指定上海的时区 scheduler = BlockingSchedu ...

  2. OFFSET IN 使用举例

    本文将结合具体实例阐述OFFSET IN的使用方法.注意:这是我第一次写OFFSET IN约束,本文仅供参考.阅读本文前需要了解时序收敛的基本概念,OFFSET IN和Period的相关知识,可先阅读 ...

  3. kafka主题offset各种需求修改方法

    简要:开发中,常常因为需要我们要认为修改消费者实例对kafka某个主题消费的偏移量.具体如何修改?为什么可行?其实很容易,有时候只要我们换一种方式思考,如果我自己实现kafka消费者,我该如何让我们的 ...

  4. Excel——OFFSET函数

    1.首先看下offset函数的参数设置: 说明:height,width表面它的返回值可以是一个数组,而并非一个值.这样,它就可以用于数据有效性等. 2.使用offset实现转置: 3.offset函 ...

  5. 第五篇:在SOUI中使用XML布局属性指引(pos, offset, pos2type)

    窗口布局的概念 每一个UI都是由大量的界面元素构成的,在Windows编程,这些界面元素的最小单位通常称之为控件. 布局就是这些控件在主界面上的大小及相对位置. 传统的布局一般使用一个4个绝对坐标来定 ...

  6. .offset().top是什么意思?

    offset获取匹配元素在当前视口的相对偏移: 返回的对象包含两个整形属性:top,left.此方法只对 可见元素有效. $("#div").offset() 获得位移对象:(此时 ...

  7. jQuery offset,position,offsetParent,scrollLeft,scrollTop html控件定位 css position

    定位应用:点击一个按钮,然后在按钮的右边弹出一个提示框 1,提示框相对于屏幕进行定位,那么使用offset来取得当前按钮相对于body的top和left,然后通过$('body').prepend(t ...

  8. 前端攻城狮学习笔记九:让你彻底弄清offset

    很多初学者对于JavaScript中的offset.scroll.client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确. 图一 不知道 ...

  9. (转)详解JS位置、宽高属性之一:offset系列

    很多初学者对于JavaScript中的offset.scroll.client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确. 图一 不知道 ...

随机推荐

  1. informatica powercenter学习笔记(LookUp 使用)

    LOOKUP TRANSFORMATION的使用点评: LOOKUP基本用法不熟的话请参考下附属信息. 用法感受: 1 LOOKUP的作用跟我们以前在EXCEL的函数功能类似,就是隔表取值.优点就是用 ...

  2. Sqlite学习笔记(二)&&性能测试

    测试目标 获取SQlite的常规性能指标 测试环境 CPU:8核,Intel(R) Xeon(R) CPU E5-2430 0 @ 2.20GHz 内存:16G 磁盘:SSD Linux 2.6.32 ...

  3. jquery最常用的几个方法。

    jquery使用手册:http://www.eduyo.com/doc/jquery/cheatsheet.html addClass 样式: <style> .textRed { col ...

  4. 将一列包含多个ID拆分多行

    看到个不常见的问题~然后在 Inner Sql Server2008 里面找到一个思路. 如果下面的表结构,如何拆分多行并对应员工号呢? 首先创建测试表 CREATE TABLE Department ...

  5. Android 播放电影时滑动屏幕调整屏幕亮度(转)

    (转自:http://blog.csdn.net/piaozhiye/article/details/6544450) 发现有一些主流的播放器播放电影时可以通过滑动屏幕调整屏幕亮度,其实实现起来也很容 ...

  6. 在VMware上安装CentOS-6.5 minimal - 安装VMware Tools

    由于CentOS-6.5 minimal很多工具都默认没有安装,安装VMwareTools需要用到Perl,所以老伯建议先配置好网络再接着安装. 网络配置方法可以参考在VMware上安装CentOS- ...

  7. [转]ng-grid

    本文转自:http://angular-ui.github.io/ui-grid/ Getting Started Steps for getting started (example on righ ...

  8. Struts2中的Unable to load configuration错误的分析与解决方法

    当我们遇到 Unable to load configuration. 这样的错误时,可以根据具体的错误提示找出错误的原因. Unable to load configuration. - inter ...

  9. UVa 297 Quadtrees -SilverN

    A quadtree is a representation format used to encode images. The fundamental idea behind the quadtre ...

  10. 我的Github之旅(一)

    第一站:本地环境中的Github配置 1.参考链接 作为初学者,需要了解的有[本地环境中的github配置(基于mac)][1],以及git知识,这里推荐一个网站[猴子都能懂的Git入门][2],最后 ...