FPGA设计约束技巧之XDC约束之I/O篇 (上) - FPGA/ASIC技术 -
《XDC约束技巧之时钟篇》中曾对I/O约束做过简要概括,相比较而言,XDC中的I/O约束虽然形式简单,但整体思路和约束方法却与UCF大相径庭。加之FPGA的应用特性决定了其在接口上有多种构建和实现方式,所以从UCF到XDC的转换过程中,最具挑战的可以说便是本文将要讨论的I/O约束了。
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 的基本语法中, 是想要设定 input 约束的端口名,可以是一个或数个 port;-clock 之后的 指明了对 时序进行分析所用的时钟,可以是一个 FPGA 中真实存在的时钟也可以是预先定义好的虚拟时钟;-max 之后的 描述了用于 setup 分析的包含有板级走线和外部器件的延时;-min 之后的 描述了用于 hold 分析的包含有板级走线和外部器件的延时。
上述这些选项是定义 Input 约束时必须写明的,还有少数几个可选项,如 -add_delay和 -clock_fall 用于 DDR 接口的约束。
Output 约束
上图所示 set_output_delay 的基本语法中, 是想要设定 output 约束的端口名,可以是一个或数个 port;-clock 之后的 指明了对 时序进行分析所用的时钟,可以是一个 FPGA 中真实存在的时钟也可以是预先定义好的虚拟时钟;-max 之后的 描述了用于 setup 分析的包含有板级走线和外部器件的延时;-min之后的 描述了用于 hold 分析的包含有板级走线和外部器件的延时。
上述这些选项是定义 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(不论是中心对齐还是边沿对齐)都一样。