]
set_input_delay -clock [get_clocks clk0] -max 1.5[get_ports Din]*]]
上面约束了信号Din相对于时钟域clk0,有最小延时0.5和最大延时1.5ns。
第3节 输入延时的目的
请继续看上面的输入延时的模式,注意看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 示波器测量第二种方法是示波器测量的方法。
方便的话,使用示波器接到FPGA的输入的时钟和数据管脚,调整示波器处于眼图模式,就可以得到眼图,其样式大致如下。
上图是按照时钟基准来获取到的眼图,从上图就可以得到数据相对于时钟的延时信号,从而得到max和min值。
知道了上面两种方法后,还要结合应用场景,才能正确地设置时序参数。
第5节 应用场景概念5.1 系统同步和源同步数据接口的同步方式,分成系统同步和源同步。
系统同步是指板上有一个时钟源,该时钟源将时钟送给各个器件,并且保证送给各个器件 的相位是相同的。如上图中,时钟system_clock送给了source device和FPGA,并且两者时钟TsrcClk和TdstClk相位是一样的,上游器件只发数据给FPGA即可。
系统同步要求时钟信号在系统级上同源,板级走线的延时也要对齐,要求很高,也比较难做。
源同步如上图,FPGA的时钟来自于上游器件 ,即上游器件将数据送给FPGA的同时,送一个随路时钟给FPGA,FPGA利用这个随路时钟来采样数据。源同步方式,没有时钟相位同步的要求,所以相比系统同步简单很多,应用也更加广泛。
5.2 SDR和DDR
SDR是指数据只在时钟上升沿有效,当前时钟上升沿产生数据,在下一个时钟上升沿对这个数据进行采样的方式,上图就是SDR的示例。
DDR是指数据在时钟上升沿和下降沿都有效的一种传输方式。时钟上升沿产生的数据,在下一个时钟下降沿被采样;时钟下降沿产生的数据,在下一个时钟上升沿被采样。
由引可见,同样时钟频率下,DDR的速率是SDR的两倍,速率更高,要求自然也更高。
系统同步由于要求时钟信号在系统级上同源,板级走线的延时也要对齐,无法达到更高速的设计要求,所以大部分情况也仅仅应用SDR方式,本文针对系统 同步,只讨论SDR的方式。
源同步接口最大的优点就是大大提升了总线的速度,可以是SDR方式,也可以是DDR方式,本文针对源同步,将讨论SDR和DDR两种方式。
5.3 中心对齐和边沿对齐在DDR的传输方式中,我们又可以分成中心对齐和边沿对齐两种方式。
上面是FPGA收到的一个理想的传输波形图。Din1的变化点与时钟clk的边沿点对齐,这种传输方式就是边沿对齐。Din2的变化点则是在clk的低电平或者高电平中间,这种传输方式就是中心对齐。
上图是一个理想的波形,是假设Din1和Din2 零延时的情况,但实质上这是不可能的。在实际中,必会有延时,而且必定会有抖动,这个抖动围绕着数据变化点可能向左偏,也可能向右偏。由此,边沿对齐的实质波形如下图(在时钟边沿左右抖动,中间稳定)。
同理,中心对齐的实质波形将如下图所示(时钟边沿处稳定,中间抖动)。
第6节 各种场景下的约束方法
经过前面的铺垫和讨论,现在正式讨论各个应用场景下,输入延时的约束方法。
6.1 系统同步系统同步的特点是时钟到各个器件的延时是一样的,这意味着设置输入延时时,不需要考虑时钟的延时,可以认为时钟延时是0,我们只需要考虑数据延时。
数据延时为两种,一种是上游器件在时钟控制下将数据输出到上游器件管脚的延时;另一种是数据从上游器件管脚,到FPGA管脚的延时。
Ø 查阅数据手册
假设通过查阅数据手册,得到TCKO最小是1ns,最大是2ns;通过计算布线长度,得到线延时最小是0.3ns,最大是0.4ns。由此可计算得到,输入最小延时:最小的TCKO+最小的线延时,即1.3ns;输入最大延时:最大的TCKO+最大的线延时,即2.4ns。所以可以有如下约束语句。
set_input_delay -clock sysclk -min 1.3 [get_ports Din]
set_input_delay -clock sysclk -max 2.4 [get_ports Din]
Ø 示波器测量
如果您找不到数据手册,或者电路板做得不标准,也可以使用示波器测量方法得到参数。假设眼图如下:
上图中,中间的A处是时钟上升沿时刻,B处是眼图闭合的左侧,C处是眼图闭合的右侧。从示波器中,可以得到B到A的距离,以及C到A的距离。而这两个距离,则正对应输入延时的最小值和最大值。如下图,图中的灰色区域,就是上图中的B到C的区域。
如前面所述,系统同步要求较高,大部分都是SDR情形,所以不在此讨论DDR的情节。
6.2 源同步SDR
源同步SDR的约束方法,与系统同步非常相似。
源同步是上游器件同时传输了时钟和数据,如果布线做得标准的话,即线等长的话,可以认为数据延时和时钟延时是一致的,也就是说我们可以不考虑线延时的情况。
所以通过数据手册,查询 到TCKO延时,就可以设置最大最小值了。
通过示波器测量,也可以获取到参数,下图就是眼图。
上图中,A是时钟上升沿处,B是眼图的左侧,定义为DV(befre),C处是眼图的右侧,定义为DV(altera),这两值都可以测量到。
上图是对应的波形图。
如何通过DV(befre)和DV(altera),获取到最小延时和最大延时呢?
认真观察,可以知道,最小延时就是DV(after);而最大延时则要计算一下,时钟周期-DV(before)。
下面就是一个配置的例子。
6.3 源同步-DDR讨论完成源同步的SDR,接下来讨论源同步的DDR情形。源同步的DDR是时钟上升沿和下降沿都会采数据的情况,可以进一步划分成中心对齐和边沿对齐情形。
6.3.1 DDR中心对齐
上图是DDR中心对齐的波形图,其中有4个参数可以通过示波器得到,分别是上升沿前dv_bre、上升沿后dv_are、下降沿前dv_bfe和下降沿后dv_afe。
注意,上图中,Fall_Data是由时钟上升沿产生,在时钟下降沿采样的;Rise_Data是由时钟下降沿产生,时钟上升沿采样的。
根据输入延时的定义,上升沿的输入最小延时是上图中的B到A的时间;输入最大延时是上图中的C到A的时间。因此,可知上升沿输入最小延时等于:dv_are;上升沿输大最小延时等于:半个时钟周期-dv_bfe。
下降沿的情况看上图。根据定义,下降沿的输入最小延时是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 [get_ports data]
set_input_delay -clock clk -min 0.6 [get_ports data]
set_input_delay -clock clk -max 4.6 [get_ports data] -clock_fall -add_delay
set_input_delay -clock clk -min 0.2 [get_ports data] -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是由时钟下降沿产生,时钟上升沿采样的。
根据输入延时的定义,上升沿的输入最小延时是上图中的B到A的时间;输入最大延时是上图中的C到A的时间。有读者会疑问,为什么不是D和E呢?注意一下输入延时的定义,是“产生的数据”到“产生该数据的时钟沿”的距离。Fall_data是由A产生的,B到C区域,都是Fall_Data的变化区域,所以应该看的是B和C到A的距离 。这个时候,B在A的左边,说明该值是负数。
理解了上面的定义,可知上升沿输入最小延时等于:-skew_bre;上升沿输入最大延时等于:skew_are。
下降沿的情况看上图。根据定义,下降沿的输入最小延时是到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 [get_ports data]
set_input_delay -clock clk -min -0.6 [get_ports data]
set_input_delay -clock clk -max 0.7 [get_ports data] -clock_fall -add_delay
set_input_delay -clock clk -min -0.3 [get_ports data] -clock_fall -add_delay
上面的语法中,使用-clock_fall表示下降沿;使用-add_delay表示与前面的约束一起生效。
6.4 有数据无时钟
有一种特殊的输入信号,该信号是没有对应的时钟,是一种异步信号。例如最常见的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 [get_ports i_data]
第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产品说明书》