IO约束(上)

IO约束的语法

XDC中可以用于IO约束的命令包括:

set_input_delay

set_output_delay

set_max_delay

set_min_delay

只有那些从FPGA管脚进入或输出都不讲过任何时序元件的纯组合逻辑路径可以用set_max_delay/set_min_delay来约束,其余的IO书序路径都必须由set_input_delay/set_output_delay来约束。如果对FPGA的IO不加任何约束,VIVADO会缺省认为时序要求为无穷大,不仅综合和实现时要考虑IO时序,而且在时序分析时也不会报出这些未约束的路径。

Input约束/Output约束

上图所示set_input_delay的基本语法中,

<objects>是想要设定input约束的端口名,可以是一个或多个port;

-clock之后的<clock_name>指明了对<objects>时序进行分析所用的时钟,可以是一个FPGA中真实存在的时钟也可以是预先定义好的虚拟时钟;

-max之后的<maxdelay>描述了用于setup分析的包含板级走线和外部期间的延时;

-min之后的<mindelay>描述了用于hold分析的包含板级走线和外部期间的延时;

上述这些选项是定义Input 约束时必须写明的,还有少数几个可选项,如 -add_delay 和 -clock_fall 用于DDR 接口的约束。

Setup时序分析

同步电路设计中,一般情况下,数据在时钟上升沿发送,在下一个时钟上升沿接收,发送的时钟沿称作Launch Edge,接收沿称作Capture Edge。时序分析中的Setup Check 跟Capture Edge 的选择息息相关。

在SDR 接口的setup 分析中,工具如下图这样识别发送和接收时钟沿。

而在DDR 接口的setup 分析中,因为数据是双沿采样,所以发送和接收时钟沿变成上升(下降)沿发送,下降(上升)沿接收。

hold时序分析

Hold Check 主要是为了保证数据在接收(采样)端时钟沿之后还能稳定保持一段时间,对Hold 分析而言,同一个时钟沿既是Launch Edge 也是Capture Edge,这一点对SDR 和DDR(不论是中心对齐还是边沿对齐)都一样.

Input接口类型和约束

由于历史的原因,相当一部分FPGA 设计仍然在系统中起到胶合逻辑(Glue Logic)的作用,当然,如今的FPGA 中嵌入了高速串行收发器和嵌入式处理器等,早就不仅仅局限于系统设计的配角,反而成为了其中的主角甚至是明星。但数据接口的同步一直是 FPGA 设计中的常见问题,也是一个重点和难点,很多设计不稳定都是因为数据接口的同步有问题。

FPGA 的数据接口同步根据系统级设计方式来讲可以分为系统同步和源同步两种。

系统同步接口

系统同步接口(System Synchronous Interface)的构建相对容易,以FPGA 做接收侧来举例,上游器件仅仅传递数据信号到FPGA 中,时钟信号则完全依靠系统板级来同步。时钟信号在系统级上同源,板级走线的延时也要对齐。正因为这样的设计,决定了数据传递的性能受到时钟在系统级的走线延时和skew 以及数据路径延时的双重限制,无法达到更高速的设计要求,所以大部分情况也仅仅应用SDR 方式。

对系统同步接口做Input 约束相对容易,只需要考虑上游器件的Tcko 和数据在板级的延时即可。下图是一个SDR 上升沿采样系统同步接口的Input 约束示例。

设置和分析I/O 约束一定要有个系统级思考的视角,如上右图所示,Launch Edge 对应的是上游器件的时钟,而Capture Edge 则对应FPGA 的输入时钟,正因为是系统同步时钟,所以可以将其视作完全同步而放在一张图上分析,这样一来,就可以用一般时序分析方法来看待问题。

  1. 完整的时序路径,从源触发器的C 端开始,经过Tcko 和路径传输延时再到目的触发器的D 端结束。放在系统同步的接口时序上,传输延时则变成板级传输延时(还要考虑skew),所以上述 -max 后的数值是Tcko 的最大值加上板级延时的最大值而来,而-min 后的数值则是由两个最小值相加而来。

源同步

为了改进系统同步接口中时钟频率受限的弊端,一种针对高速I/O 的同步时序接口应运而生,在发送端将数据和时钟同步传输,在接收端用时钟沿脉冲来对数据进行锁存,重新使数据与时钟同步,这种电路就是源同步接口电路(Source Synchronous Interface)。

源同步接口最大的优点就是大大提升了总线的速度,在理论上信号的传送可以不受传输延迟的影响,所以源同步接口也经常应用DDR 方式,在相同时钟频率下提供双倍于SDR 接口的数据带宽。

源同步接口的约束设置相对复杂,一则是因为有SDR、DDR、中心对齐(Center Aligned)和边沿对齐(Edge Aligned)等多种方式,二则可以根据客观已知条件,选用与系统同步接口类似的系统级视角的方式,或是用源同步视角的方式来设置约束。

如上图所示,对源同步接口进行Input 约束可以根据不同的已知条件,选用不同的约束方式。一般而言,FPGA 作为输入接口时,数据有效窗口是已知条件,所以方法2 更常见,Vivado IDE 的Language Templates中关于源同步输入接口XDC 模板也是基于这种方法。但不论以何种方式来设置Input 约束,作用是一样,时序报告的结果也应该是一致的。

针对上图所示中心对齐源同步SDR 接口时序,分别按照两种方式来约束,需要的已知条件和计算方式虽然不同,但却可以得到完全一样的结果。

DDR接口的约束设置

DDR 源同步接口的约束稍许复杂,需要将上升沿和下降沿分别考虑和约束,以下以源同步接口为例,分别就输入接口数据为中心对齐或边沿对齐的方式来举例。

  • DDR 源同步中心对齐输入接口

已知条件如下: ü 时钟信号 src_sync_ddr_clk 的频率: 100 MHz ü 数据总线: src_sync_ddr_din[3:0] ü 上升沿之前的数据有效窗口 ( dv_bre ) : 0.4 ns ü 上升沿之后的数据有效窗口 ( dv_are ) : 0.6 ns ü 下降沿之前的数据有效窗口 ( dv_bfe ) : 0.7 ns ü 下降沿之后的数据有效窗口 ( dv_afe ) : 0.2 ns 可以这样计算输入接口约束:DDR 方式下数据实际的采样周期是时钟周期的一半;上升沿采样的数据(Rise Data)的 -max 应该是采样周期减去这个数据的发送沿(下降沿)之前的数据有效窗口值dv_bfe,而对应的-min 就应该是上升沿之后的数据有效窗口值dv_are ;同理,下降沿采样的数据(Fall Data)的 -max 应该是采样周期减去这个数据的发送沿(上升沿)之前的数据有效窗口值dv_bre,而对应的-min 就应该是下降沿之后的数据有效窗口值dv_afe 。 所以最终写入XDC 的Input 约束应该如下所示: set period 10.0; create_clock -period $period -name clk [get_ports src_sync_ddr_clk]; set_input_delay -clock clk -max [expr $period/2-0.7] [get_ports src_sync_ddr_din[*]] ; set_input_delay -clock clk -min 0.6 [get_ports src_sync_ddr_din[*]] ; set_input_delay -clock clk –max [expr $period/2-0.4] [get_ports src_sync_ddr_din[*]] -clock_fall -add_delay ; set_input_delay -clock clk -min 0.2 [get_ports src_sync_ddr_din[*]] -clock_fall -add_delay;

  • DDR 源同步边沿对齐输入接口

ü 时钟信号 src_sync_ddr_clk 的频率: 100 MHz

  • ü 数据总线: src_sync_ddr_din[3:0] ü 上升沿之前的数据skew (skew_bre ) : 0.6 ns ü 上升沿之后的数据skew (skew_are ) : 0.4 ns ü 下降沿之前的数据skew (skew_bfe ) : 0.3 ns ü 下降沿之后的数据skew (skew_afe ) : 0.7 ns 可以这样计算输入接口约束:因为已知条件是数据相对于时钟上升沿和下降沿的skew,所以可以分别独立计算;上升沿的 -max 是上升沿之后的数据skew (skew_are ),对应的-min 就应该是负的上升沿之前的数据skew (skew_bre );下降沿的 -max 是下降沿之后的数据skew (skew_afe ),对应的-min 就应该是负的下降沿之前的数据skew (skew_bfe )。 所以最终写入XDC 的Input 约束应该如下所示: create_clock -period 10.0 -name clk [get_ports src_sync_ddr_clk]; set_input_delay -clock clk -max 0.4 [get_ports src_sync_ddr_din[*]] ; set_input_delay -clock clk -min -0.6 [get_ports src_sync_ddr_din[*]] ; set_input_delay -clock clk -max 0.7 [get_ports src_sync_ddr_din[*]] -clock_fall -add_delay ; set_input_delay -clock clk -min -0.3 [get_ports src_sync_ddr_din[*]] -clock_fall -add_delay; 出现负值并不代表延时真的为负,而是跟数据相对于时钟沿的方向有关。请一定牢记set_input_delay 中-max/-min 的定义,即时钟采样沿到达之后最大与最小的数据有效窗口(set_output_delay 中 -max/-min 的定义与之正好相反)。 在这个例子中,数据是边沿对齐,只要有jitter 跟skew 的存在,最差情况下,数据有效窗口在到达时钟采样沿之前就已经结束,所以会有负数出现在-min 之后。因此,在实际应用中,FPGA 用作输入的边沿对齐DDR 源同步接口的情况下,真正用来采样数据的时钟会经过一个MMCM/PLL 做一定的相移,从而把边沿对齐变成中心对齐。 另外,在经过MMCM/PLL 相移后的采样时钟跟同步接口输入的时钟之间需要做set_false_path 的约束(如下述例子)而把那些伪路径从时序报告中剔除,这里不再详述。 set_false_path –setup –rise_from [get_clocks adc_dclk_p] –rise_to [get_clocks clk_outp0_adc_pll_1] set_false_path –setup –fall_from [get_clocks adc_dclk_p] –fall_to [get_clocks clk_outp0_adc_pll_1] set_false_path –hold –fall_from [get_clocks adc_dclk_p] –rise_to [get_clocks clk_outp0_adc_pll_1] set_false_path –hold –rise_from [get_clocks adc_dclk_p] –fall_to [get_clocks clk_outp0_adc_pll_1]

原文发布于微信公众号 - 瓜大三哥(xiguazai_tortoise)

原文发表时间:2016-12-31

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Youngxj

巅峰QQ百变聊天气泡V3.5 几百种气泡转变 炫彩聊天 逼格十足 永久免费

23030
来自专栏美团技术团队

人工智能在线特征系统中的生产调度

前言 在上篇博客《人工智能在线特征系统中的数据存取技术》中,我们围绕着在线特征系统存储与读取这两方面话题,针对具体场景介绍了一些通用技术,此外特征系统还有另一个...

614100
来自专栏数据科学与人工智能

【Python环境】Python可视化工具综述

简介 在Python的世界里,可视化你的数据有多种选择。由于这种多样性,决定何时使用哪一个确实是种挑战。这篇文章包含由更受欢迎的包中的一部分制作的示例,并说明如...

490100
来自专栏linux驱动个人学习

GPU与CPU的区别

18830
来自专栏用户画像

1.2.1计算机网络分层结构

两个系统中实体间的通信是一个很复杂的过程,为了降低协议设计和调试过程的复杂性,也为了便于对网络进行研究、实现和维护,促进标准化工作,通常对计算机网络的体系结构以...

11120
来自专栏Python中文社区

利用docker部署深度学习模型的一个最佳实践

讲道理,docker是天然的微服务,确实是能敏捷高效的解决深度学习这一块的几个痛点。

55210
来自专栏CSDN技术头条

使用TCP时序图解释BBR拥塞控制算法的几个细节

周六,由于要赶一个月底的Deadline,因此选择了在家VPN加班,大半夜就爬起来跑用例,抓数据……自然也就没有时间写文章和外出耍了,不过利用周日的午夜时间(不...

674100
来自专栏PPV课数据科学社区

【学习】Python可视化工具概述-外文编译

本文由 PPV课 - korobas 翻译,未经许可,禁止转载! 原文翻译链接:http://pbpython.com/visualization-tools...

42370
来自专栏小白课代表

一款小巧的去水印神器——Inpaint

23450
来自专栏腾讯移动品质中心TMQ的专栏

测试建模 :从尔康的鼻孔说开来,重要的用例写三遍

看完本文你会了解以下内容 1. 什么是SUT模型 2. 测试建模在工作中究竟是怎样一个过程 3. 从业务流程到测试用例我们忽略了什么 4. 测试建模会有哪些产出...

22350

扫码关注云+社区

领取腾讯云代金券