首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Vivado使用误区与进阶】XDC约束技巧—— I/O篇-1

Vivado使用误区与进阶】XDC约束技巧—— I/O篇-1

I/O约束的语法
XDC中可以用于I/O约束的命令包括set_input_delay / set_output_delay和set_max_delay / set_min_delay 。其中,只有那些从FPGA管脚进入和/或输出都不经过任何时序元件的纯组合逻辑路径可以用set_max_delay / set_min_delay来约束,其余I/O时序路径都必须由set_input_delay / set_output_delay来约束。如果对FPGA的I/O不加任何约束,Vivado会缺省认为时序要求为无穷大,不仅综合和实现时不会考虑I/O时序,而且在时序分析时也不会报出这些未约束的路径。
本文以下章节将会着重讨论XDC接口约束和时序分析的基础,介绍如何使用set_input_delay / set_output_delay对FPGA的I/O时序进行约束。
Input约束


上图所示set_input_delay的基本语法中,<objects>  是想要设定input约束的端口名,可以是一个或数个port;-clock 之后的 <clock_name> 指明了对 <objects>  时序进行分析所用的时钟,可以是一个FPGA中真实存在的时钟也可以是预先定义好的虚拟时钟;-max之后的  <maxdelay> 描述了用于setup分析的包含有板级走线和外部器件的延时;-min之后的  <mindelay> 描述了用于hold分析的包含有板级走线和外部器件的延时。
上述这些选项是定义Input约束时必须写明的,还有少数几个可选项,如 -add_delay 和 -clock_fall用于DDR接口的约束。
Output约束


上图所示set_output_delay的基本语法中,<objects>  是想要设定output约束的端口名,可以是一个或数个port;-clock 之后的 <clock_name> 指明了对 <objects>  时序进行分析所用的时钟,可以是一个FPGA中真实存在的时钟也可以是预先定义好的虚拟时钟;-max之上述这些选项是定义Output约束时必须写明的,还有少数几个可选项如 -add_delay 和 -clock_fall用于DDR接口的约束。
Setup/Hold时序分析
我们知道约束是为了设计服务,而设置好的约束必须在时序报告中加以验证。所以,怎样理解时序分析中的检查规则就成了重中之重,这一点对I/O约束来说尤为重要。理解时序分析工具如何选取路径分析的发送端(Launch)和接收端(Capture)时钟沿(Clock Edges),在Setup和Hold分析时又有怎样的具体区别,以及这些数字在时序报告中如何体现等等是设置正确I/O约束的基础。
更具体的时序分析方法以及如何深入解读时序报告等内容将会在后续另开主题文章详述,这里仅就Setup/Hold分析时对时钟边沿的选择加以描述,便于以下章节的展开。
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的输入时钟,正因为是系统同步时钟,所以可以将其视作完全同步而放在一张图上分析,这样一来,就可以用一般时序分析方法来看待问题。   
一条完整的时序路径,从源触发器的C端开始,经过Tcko和路径传输延时再到目的触发器的D端结束。放在系统同步的接口时序上,传输延时则变成板级传输延时(还要考虑skew),所以上述 -max 后的数值是Tcko的最大值加上板级延时的最大值而来,而-min后的数值则是由两个最小值相加而来。
返回列表