专栏首页海风OFFSET约束(OFFSET IN 和OFFSET OUT)

OFFSET约束(OFFSET IN 和OFFSET OUT)

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

0. Xilinx已采用XDC约束,使用Input/output delay代替OFFSET约束

简单来说,以输入约束为例 OFFSET约束指定的是

  数据在采样时刻之前多少时间有效(OFFSET BEFORE),以及有效时间是多少(VALID)

  Input delay指的是

  进入到FPGA内部的数据跳变沿可能的最早时刻(min),和最后时刻(max),即max-min是数据不稳定的时间。

  譬如(UG911)

UCF OFFSET = IN 1ns VALID 2ns BEFORE clka; XDC set_input_delay -clock clka -max 9 [all_inputs] set_input_delay -clock clka -min 1[all_inputs] Note: This assumes the clock period is 10 ns

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

  一般采用OFFSET约束的时候还需要指定数据有效的时间,譬如

  OFFSET = IN 2 ns VLAID 4ns BEFOR clock_pad

  指数据在采样沿到达前2ns有效4ns。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

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

    同步时序电路设计中,只在时钟的上升沿或下降沿进行采样。为了正确得到采样结果,需要确保采样时刻数据有效,因此工具会对综合结果进行静态时序分析,以判断时钟和...

    sea-wind
  • FPGA学习之基本结构

    从PLD的发展历程来看,按照结构区分,前后共有4种可编程逻辑器件类型:PLA、PAL、CPLD和FPGA。PLA——PAL——CPLD是继承的关系,...

    sea-wind
  • GitHub: Windows 下的简单使用

    去年的时候,有个老师推荐使用GitHub来管理自己的代码。这段时间博客园的首页上多了很多关于GitHub的介绍。半年多来,我对我做的绝大多数事情都做了详...

    sea-wind
  • Django学习路由(5)

    电话A 打电话给 1001 需要用到中转设备来指路,走那条线路可以到达目的地。如果表中没有,则不管他!

    萌海无涯
  • <meta>标签的作用

    <META> 是放于 <HEAD> 与 </HEAD>之间的标记,功用与变化等对,所以我公式化地介绍。 <meta name="Description" c...

    大道七哥
  • 互联网女皇报告太长?看这63页PPT精华版就够了

    导读:北京时间6月12日凌晨,“互联网女皇”玛丽·米克尔(Mary Meeker)如期发布2019年度《互联网趋势报告》。

    华章科技
  • 疫情过后,互联网公司的出路怎么样?

    现在全国人民的中心都转移到这次疫情了,这次疫情远比2003年的非典,专家都在呼吁全面人民都要在家尽量不要出去,可见疫情的严峻,武汉这次的确承受了很多别的城市无法...

    程序员互动联盟
  • 并发学习笔记14-Lock接口

    Java SE5之前,在协调对共享对象的访问时可用的机制只有synchronized和volatile。Java 5.0之后,并发包中新增了Lock接口及其相关...

    汐楓
  • 拥抱产业互联网的最佳姿势

    回过头去,我们再去看待那个异常火热的消费互联网时代,依然是喜忧参半的。喜的是,我们并不需要投入太多,便可以掘得人生当中的第一桶金;忧的是,我们始终都无法找到深度...

    孟永辉
  • 死磕Synchronized底层实现

    关于synchronized的底层实现,网上有很多文章了。但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结、照搬而成,难免有些错误;要么很多点都是一...

    Java团长

扫码关注云+社区

领取腾讯云代金券