FPGA时序约束分享03_input delay约束
第一章 FPGA时序约束分享03_input delay约束 作者:潘文明 本文章探讨一下FPGA的时序input delay约束,本文章内容,来源于配置的明德扬时序约束专题课视频。 《FPGA时序约束分享01_约束四大步骤》概括性地介绍 了时序约束的四个步骤,对时序约束进行了分类,并得到了一个分类表。 《FPGA时序约束分享02_时钟约束》详细介绍了关于时钟的约束,根据时钟来源可以分成输入时钟约束、PLL等衍生时钟约束和自己分频的时钟约束等三种类型。这三种类型的约束方法均有所不同,读者需要掌握区分方法。 本文,笔者将详细介绍输入延时(input delay)的概念、场景分类、约束参数获取方法以及约束方法。 在高速输入设备与FPGA通信场合,设置输入延时(input delay)约束非常重要。 例如明德扬研发的高速ADC模块:mdyFmcAd9653,该模块集成了2个125M采样率、分辨率为16位的AD9653,采集数据时通过LVDS传输至FPGA上。该LVDS的时钟频率为125M,数据位宽为16位,FPGA接收时,需要进行输入延时(input delay)约束,将LVDS时钟和数据的相位关系告知FPGA,从而让FPGA能够正确接收,如果约束不正确,则会出现接收错误的情况。 还有一个常用场景,就是网络芯片的RGMII接口。RGMII接口用于网络芯片和FPGA之间的网络数据传输,网络芯片往FPGA发数据,即FPGA接收数据时,就需要设置输入延时(input delay)约束。RGMII接口务必要做时序约束,否则会出现偶发性的数据接收错误的情况,笔者在做“弱小信号采集系统项目”时,就在这里吃过亏。 开始正文,首先讨论并明确输入延时(input delay)的概念。第1节 输入延时概念https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ccb9e6c39932d1a726dfa548fa48a4ed8e00113f 上图是一个典型的输入延时的模型,该模型由一个上游器件source device以及一个FPGA组成。上游器件将数据传送给FPGA,FPGA接收数据。从FPGA角度来看,输入接口由时钟接口和数据接口组成,上图右边FPGA的输入管脚,上面即是数据接口,下面是时钟接口。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/1d9f47a4fce82ac01580de91c94413d2090a63cc Din是由时钟clk产生的,理想情况下,Din的变化时刻一定是时钟的上升沿,即变化点和时钟上升沿对齐,如上图所示。但在传输过程中,由于时钟和数据会存在延时差异,从而到达FPGA管脚是处于不同的时刻,数据和时钟之间会存在相位差,如下图所示。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/9ef2eb087655c8c8610dc0a3bcf8b54b467cd0da 上图描述了连续3个时钟下,数据接口din和时钟clk的相位差,第1个时钟相差了1ns,第2个时钟差了1.8ns,第3个时钟相差了1.3ns。相位差的变化有可能是延时原因,也有可能是上游器件的原因,总之,这些相位差数据是变化的,但它的变化应该在一个确定的范围,即肯定是存在一个最小值,同时存在一个最大值,相位差在这两个范围内变动。将其变化范围汇总起来,制作成如下的一张图。 https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/bc9303d467be57fc96572928cf4a2fd5a4995b3f 上图中的灰色区域,就是相位差的变化范围。现在可以给出输入延时(input delay)的定义:数据相对于时钟的延时,即数据时间-时钟上升沿时间。a. 注意是数据时间-时钟上升沿时间,这意味着输入延时可正可负。当延时在时钟右边时,输入延时是正的,当延时变化点在时钟上升沿左边时,输入延时是负的。b. 输入延时通常是一个变化范围,其有两个参数,最小延时min和最大延时max。最小延时即上图中灰色区域最左边点,最大延时是灰色区域最右边点。c. 输入的实际延时一定在最小和最大之间。约束时,需要设置好最小min和最大max的值。d. 上图中的clk和din是指FPGA管脚的,非上游器件管脚的。e. 牢记输入延时的概念定义,后面场景无论如何变化,万变不离其宗,都是按这个定义约束的。
第2节 约束语句 设置输入延时的约束语句,其语法非常简单,如下set_input_delay -clock <clock_name> <delay> <objects>Ø <objects>是想要设定input约束的端口名,可以是一个或数个port。Ø -clock之后的clock_name,是时钟域的名字。u 注意,这个clock_name是设置约束约束时定义的时钟域的名字,而非“时钟”名。u 可以是一个真实存在的时钟u 也可以是预先定义好的虚拟时钟Ø delay分两种n -max <maxdelay>,输入的最大延时,用于建立时间setup的分析,具体原因看后面部分。n -min <maxdelay>,输入的最小延时,用于保持时间hold的分析,具体原因看后面部分。 下面是具体的两个例子set_input_delay -clock -min 0.5 ]
set_input_delay -clock -max 1.5*]]上面约束了信号Din相对于时钟域clk0,有最小延时0.5和最大延时1.5ns。
第3节 输入延时的目的https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ccb9e6c39932d1a726dfa548fa48a4ed8e00113f 请继续看上面的输入延时的模式,注意看FPGA的内部结构。上游器件将数据发到FPGA的输入管脚,FPGA对其进行采样,采样一定会使用到D触发器,所以输入的时钟和数据,最终均会连到FPGA内部的D触发器上。由前面几篇文章的讨论可知,D触发器是有建立时间和保持时间要求的。这个建立时间和保持时间,是这个D触发器的物理特性,是一定会有的,但这个数值是多少,工程师不知道,而综合工具如VIVADO、QUARTUS等会知道。当Din和clk的延时不满足D触发器的建立时间和保持时间时,综合工具自动调整内部延时,例如增加一些BUF,或者增加线长等方式,使得信号最终到达D触发器时,能够满足建立时间和保持时间的要求。所以综合工具需要知道输入的延时是多少,进而调整内部延时,最终满足D触发器的建立时间和保持时间要求,这就是设置输入延时的目的。有几点需要注意的。a. 设置输入延时,只是客观描述外部信号,即数据和时钟和相位关系。只要知道综合工具这种相位关系,剩下的调整是综合工具自动完成的。b. 虽然综合工具可以调整内部延时,从而达到内部D触发器正确采样的目的,但这个延时是有一定范围的,存在无论怎么调都无法满足的情况。
第4节 获取参数的两种方法由本文的约束语句一节,可以知道为了设置输入延时约束,需要知道两个参数:最大延时值max和最小延时值min。那我们一般如何获取这两个参数呢?有两种方法,一种是查阅数据手册,另一种是通过示波器测量。4.1 查阅数据手册数据和时钟的相位偏差,通常来自于上流器件的寄存器延时和走线延时。一个正规的器件,其数据手册会清楚地标明输出数据和时钟的延时范围,通常是寄存器延时TCKO等,大家可以查找一下。至于走线延时,通常可以通过线长度,计算得到延时值。所以第一种方法,就是查阅数据手册,获取时序参数,具体如何使用,可以看后面内容。4.2 示波器测量第二种方法是示波器测量的方法。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ccb9e6c39932d1a726dfa548fa48a4ed8e00113f 方便的话,使用示波器接到FPGA的输入的时钟和数据管脚,调整示波器处于眼图模式,就可以得到眼图,其样式大致如下。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/4950e9acbb4d2ec5e6868e78179737f6a0b92dad 上图是按照时钟基准来获取到的眼图,从上图就可以得到数据相对于时钟的延时信号,从而得到max和min值。知道了上面两种方法后,还要结合应用场景,才能正确地设置时序参数。
第5节 应用场景概念5.1 系统同步和源同步数据接口的同步方式,分成系统同步和源同步。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/7c579ee29adaf6e232012e15c4a4de8b4ca2a7c4 系统同步是指板上有一个时钟源,该时钟源将时钟送给各个器件,并且保证送给各个器件 的相位是相同的。如上图中,时钟system_clock送给了source device和FPGA,并且两者时钟TsrcClk和TdstClk相位是一样的,上游器件只发数据给FPGA即可。系统同步要求时钟信号在系统级上同源,板级走线的延时也要对齐,要求很高,也比较难做。 https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/a10efc8d2b1849dcbfa8dd2eb6c621db4c2e9ae6 源同步如上图,FPGA的时钟来自于上游器件 ,即上游器件将数据送给FPGA的同时,送一个随路时钟给FPGA,FPGA利用这个随路时钟来采样数据。源同步方式,没有时钟相位同步的要求,所以相比系统同步简单很多,应用也更加广泛。 5.2 SDR和DDR https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/df105a09f4d429cad9da05f471ffa93be6da95d8 SDR是指数据只在时钟上升沿有效,当前时钟上升沿产生数据,在下一个时钟上升沿对这个数据进行采样的方式,上图就是SDR的示例。 https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/8053dc96603f55194cc820a5df4f0eb73e536ee6 DDR是指数据在时钟上升沿和下降沿都有效的一种传输方式。时钟上升沿产生的数据,在下一个时钟下降沿被采样;时钟下降沿产生的数据,在下一个时钟上升沿被采样。 由引可见,同样时钟频率下,DDR的速率是SDR的两倍,速率更高,要求自然也更高。系统同步由于要求时钟信号在系统级上同源,板级走线的延时也要对齐,无法达到更高速的设计要求,所以大部分情况也仅仅应用SDR方式,本文针对系统 同步,只讨论SDR的方式。源同步接口最大的优点就是大大提升了总线的速度,可以是SDR方式,也可以是DDR方式,本文针对源同步,将讨论SDR和DDR两种方式。5.3 中心对齐和边沿对齐在DDR的传输方式中,我们又可以分成中心对齐和边沿对齐两种方式。 上面是FPGA收到的一个理想的传输波形图。Din1的变化点与时钟clk的边沿点对齐,这种传输方式就是边沿对齐。Din2的变化点则是在clk的低电平或者高电平中间,这种传输方式就是中心对齐。上图是一个理想的波形,是假设Din1和Din2 零延时的情况,但实质上这是不可能的。在实际中,必会有延时,而且必定会有抖动,这个抖动围绕着数据变化点可能向左偏,也可能向右偏。由此,边沿对齐的实质波形如下图(在时钟边沿左右抖动,中间稳定)。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/dab924df3ee55beea754fb407860b18a13b235bd 同理,中心对齐的实质波形将如下图所示(时钟边沿处稳定,中间抖动)。 https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/8482c49b821bcabd26867ca3a865942a90e45a25
第6节 各种场景下的约束方法 经过前面的铺垫和讨论,现在正式讨论各个应用场景下,输入延时的约束方法。6.1 系统同步系统同步的特点是时钟到各个器件的延时是一样的,这意味着设置输入延时时,不需要考虑时钟的延时,可以认为时钟延时是0,我们只需要考虑数据延时。数据延时为两种,一种是上游器件在时钟控制下将数据输出到上游器件管脚的延时;另一种是数据从上游器件管脚,到FPGA管脚的延时。Ø 查阅数据手册https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/7504d0b2a30dcda86efd749a352fbb653b56fda5 假设通过查阅数据手册,得到TCKO最小是1ns,最大是2ns;通过计算布线长度,得到线延时最小是0.3ns,最大是0.4ns。由此可计算得到,输入最小延时:最小的TCKO+最小的线延时,即1.3ns;输入最大延时:最大的TCKO+最大的线延时,即2.4ns。所以可以有如下约束语句。set_input_delay -clock sysclk -min 1.3set_input_delay -clock sysclk -max 2.4 Ø 示波器测量如果您找不到数据手册,或者电路板做得不标准,也可以使用示波器测量方法得到参数。假设眼图如下:https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/96028737e6acfe485193cb4347e63981c9ba8aff 上图中,中间的A处是时钟上升沿时刻,B处是眼图闭合的左侧,C处是眼图闭合的右侧。从示波器中,可以得到B到A的距离,以及C到A的距离。而这两个距离,则正对应输入延时的最小值和最大值。如下图,图中的灰色区域,就是上图中的B到C的区域。 https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/a51b910e19456e38748818f9d73866c91b556a4b 如前面所述,系统同步要求较高,大部分都是SDR情形,所以不在此讨论DDR的情节。6.2 源同步SDR https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/a10efc8d2b1849dcbfa8dd2eb6c621db4c2e9ae6 源同步SDR的约束方法,与系统同步非常相似。源同步是上游器件同时传输了时钟和数据,如果布线做得标准的话,即线等长的话,可以认为数据延时和时钟延时是一致的,也就是说我们可以不考虑线延时的情况。所以通过数据手册,查询 到TCKO延时,就可以设置最大最小值了。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ce6f9e6b2870627faf9a15c5a22014ac52cffd00 通过示波器测量,也可以获取到参数,下图就是眼图。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ceccd5c61b275f82c2db555d19cd36a962929089 上图中,A是时钟上升沿处,B是眼图的左侧,定义为DV(befre),C处是眼图的右侧,定义为DV(altera),这两值都可以测量到。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/a1a6d7ec0b2a047401ec9bc13ac0fdbb7e56da07 上图是对应的波形图。如何通过DV(befre)和DV(altera),获取到最小延时和最大延时呢?认真观察,可以知道,最小延时就是DV(after);而最大延时则要计算一下,时钟周期-DV(before)。下面就是一个配置的例子。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/819098be5c12c5e6487b72f1ea32605a2ed2cf11 6.3 源同步-DDR讨论完成源同步的SDR,接下来讨论源同步的DDR情形。源同步的DDR是时钟上升沿和下降沿都会采数据的情况,可以进一步划分成中心对齐和边沿对齐情形。 6.3.1 DDR中心对齐https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/04712a4e62e4dbf5b70e588c81bde02c65a55928 上图是DDR中心对齐的波形图,其中有4个参数可以通过示波器得到,分别是上升沿前dv_bre、上升沿后dv_are、下降沿前dv_bfe和下降沿后dv_afe。注意,上图中,Fall_Data是由时钟上升沿产生,在时钟下降沿采样的;Rise_Data是由时钟下降沿产生,时钟上升沿采样的。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/0490c18da7228e036bf7e6988bae6a671e648a1d 根据输入延时的定义,上升沿的输入最小延时是上图中的B到A的时间;输入最大延时是上图中的C到A的时间。因此,可知上升沿输入最小延时等于:dv_are;上升沿输大最小延时等于:半个时钟周期-dv_bfe。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/d021ac7c3cae42f13c9c7a03f440c54b10612a1b 下降沿的情况看上图。根据定义,下降沿的输入最小延时是B到A的时间;下降沿输入最大延时是C到A的时间。注意,根据周期性,上图中的C和D是相同的点。可此可知,下降沿的输入最小延时是dv_afe;下降沿输入最大延时是:半个时钟周期-dv_bre。现在举例说明,假设Ø 时钟的频率为:100M,即周期为10ns;Ø 数据data的dv_bre:0.4nsØ 数据data的dv_are:0.6nsØ 数据data的dv_bfe:0.7nsØ 数据data的dv_afe:0.2ns则有,上升沿的输入最大延时:半个时钟周期-dv_bfe=4.3ns;上升沿的输入最小延时:dv_are=0.6ns;下降沿的输入最大延时:半个时钟周期-dv_bre=4.6ns;下降沿的输入最小延时:dv_afe=0.2ns;可以列出出如的约束语句:set_input_delay -clock clk -max 4.3 set_input_delay -clock clk -min 0.6 set_input_delay -clock clk -max 4.6 -clock_fall -add_delayset_input_delay -clock clk -min 0.2 -clock_fall -add_delay 上面的语法中,使用-clock_fall表示下降沿;使用-add_delay表示与前面的约束一起生效。 6.3.2 DDR边沿对齐 上图是DDR中心对齐的波形图,其中有4个参数可以通过示波器得到,分别是上升沿前skew_bre、上升沿后skew_are、下降沿前skew_bfe和下降沿后skew_afe。注意,上图中,Fall_Data是由时钟上升沿产生,在时钟下降沿采样的;Rise_Data是由时钟下降沿产生,时钟上升沿采样的。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ffdde4d5a2ac51d77ef61bf042428d41549238ce 根据输入延时的定义,上升沿的输入最小延时是上图中的B到A的时间;输入最大延时是上图中的C到A的时间。有读者会疑问,为什么不是D和E呢?注意一下输入延时的定义,是“产生的数据”到“产生该数据的时钟沿”的距离。Fall_data是由A产生的,B到C区域,都是Fall_Data的变化区域,所以应该看的是B和C到A的距离 。这个时候,B在A的左边,说明该值是负数。理解了上面的定义,可知上升沿输入最小延时等于:-skew_bre;上升沿输入最大延时等于:skew_are。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/ffdde4d5a2ac51d77ef61bf042428d41549238ce 下降沿的情况看上图。根据定义,下降沿的输入最小延时是到D到F的时间;下降沿输入最大延时是E到F的时间。可此可知,下降沿的输入最小延时是:-skew_bfe;下降沿输入最大延时是:skew_afe。现在举例说明,假设Ø 时钟的频率为:100M,即周期为10ns;Ø 数据data的skew_bre:0.6nsØ 数据data的skew_are:0.4nsØ 数据data的skew_bfe:0.3nsØ 数据data的skew_afe:0.7ns则有,上升沿的输入最大延时:skew_are=0.4ns;上升沿的输入最小延时:-skew_bre=-0.6ns;下降沿的输入最大延时:skew_afe=0.7ns;下降沿的输入最小延时:-skew_bfe=-0.3ns;可以列出出如的约束语句:set_input_delay -clock clk -max 0.4 set_input_delay -clock clk -min -0.6 set_input_delay -clock clk -max 0.7 -clock_fall -add_delayset_input_delay -clock clk -min -0.3 -clock_fall -add_delay 上面的语法中,使用-clock_fall表示下降沿;使用-add_delay表示与前面的约束一起生效。https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/6cb4fc1479627b4f373f13c46fb9ec69323b6992 6.4 有数据无时钟https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/17de8c0fea8c390d375ea31c4bae8cf7f776fdca https://weboffice-sz.docs.dingtalk.com/api/v3/office/copy/MDJLenNueUxzdkkzUFlKSkNtTXUvYlU1ZGRCSUo3bExzc09NSzVSN1R4T0pwVnpLQmQ0WE9RRjZKUkFJZUE1K3JyRmNobTE2SWFhMUoxUmdocjQvbFlIa3pzUHBYMmlxUkVheVNtcEJ6WkZhVm11K3pzN3lucmNCYnRXY2VxeFlISUcxZmlqMzZtVTV3eXFGSHkzaURycEVkbC9VWVZSV3JWeE9mRGRuTG8yT0crM2dCSWJsR0d3TS9hMWs5Ly84aGFiVG1WMm0ySHZrZHFibnJBPT0=/attach/object/cc6af91ced244d741c6eca9eb889f1617ee219d1 有一种特殊的输入信号,该信号是没有对应的时钟,是一种异步信号。例如最常见的UART串口信号,上位机发给FPGA只有一根线,双方按照约定的波特率进行通信。FPGA使用内部的时钟去采这个异步信号,由于时钟和信号是异步的,因此无论怎么调整,都不能保证一定能够满足D触发器的建立时间和保持时间要求,这个时候要做异步信号同步化处理后,才能采集,否则会出现亚稳态现象,严重的会导致芯片崩溃。关于这部分内容,可以看时序约束的其他章节。本文要探讨的是,对于这种异步信号,需不需要做输入延时的约束呢?答案是需要的。对其进行时钟约束,其主要目的不是为了调整延时,而是为了告诉综合工具,这个信号是处于不同时钟域的,避免被系统认为属于某一时钟域,从而不产生警告,进而导致工程师遗漏了此问题的解决。由于异步信号没有时钟,因此我们需要构造一个虚拟时钟,如以下语句,就是产生了一个50M的虚拟时钟clk_50_virtual,注意该语句并没有关联任何端口,所以是虚拟的;还要注意的是,定义为50M是随便的,您可以定义为其他任何频率。create_clock -period 20 -name clk_50_virtual当构造了虚拟时钟了,就可以设置异步信号的输入延时了,例如下面语句。注意5.2也是任意的。set_input_delay -max 5.2 -clock clk_50_virtual
第7节 总结与建议 最后,对本文进行简单的总结 。a. 本文先介绍 了输入延时的概念,然后分成不同的应用场景,根据这些应用场景不同,分别使用不同的约束方法。b. 输入延时约束关键的是获取约束参数,可分成查阅数据手册和示波器测量方法。c. 输入延时约束,只是客观反映外部信号的情况,千万不要理解成“要求系统,让输入延时多少ns”。即不是要求系统做什么,而是告诉系统输入信号的情况,而系统决定怎么做。
第8节 相关产品 本文提到的mdyFmcAd9653,是由明德扬科教研发的多通道,高分辨率和高采样率数模转换器的ADC系列子板,搭载两片ADC芯片,支持ADI、上海贝岭、北京时代民芯科技、中电24所等生产的芯片,完全PIN对PIN兼容;共支持8通道同步输入;共支持16位采样分辨率;支持最高125MSPS的采样率,适用于医疗电子、雷达、卫星导航等多种应用场合。
第9节 相关文章 1. 《FPGA时序约束分享01_约束四大步骤》2. 《FPGA时序约束分享02_时钟约束》3. 《mdyFmcAd9653产品说明书》
页:
[1]