FPGA IO延迟的约束与脚本

FPGA IO延迟的约束与脚本

FPGA的时序分析,关键的部分有两点:1是对时钟的约束方法,时钟对数字电路设计很重要,约束情况多而复杂;2是 I/O约束,IO的约束相对简单,主要包括管脚电气约束与延迟约束。本文主要讲述的是IO约束相关的脚本与用法。IO延时约束用于定义输入信号和输出信号之间的时序关系。延时约束在高速数字电路设计自动化(EDA)中起着至关重要的作用,它可以确保设计满足时序要求,提高系统性能和可靠性。本文对IO延时约束的概念、类型、设置方法进行了深入探讨,以帮助读者更好地理解和应用IO延时约束,从而优化设计。

IO管脚的电气约束

IO管脚电气约束比较简单, 管脚约束就是指管脚分配,需要指定管脚的PACKAGE_PIN和IOSTANDARD两个属性的值,前者指定了管脚的位置,后者指定了管脚对应的电平标准。

在vivado中,使用如下方式在xdc中对管脚进行约束。

set_property -dict {PACKAGE_PIN AJ16 IOSTANDARD LVCMOS18} get_ports "data_valid"

Vivado对整个工程的时序进行分析时,只能分析内部的时序信息,对于外部的时序信息Vivado无法提供,在设计中要精确建模外部时序信息,必须为输入和输出端口提供输入输出延迟信息,而I/O延迟约束就是告知Vivado集成设计环境(IDE)FPGA管脚外部的输入输出延迟信息。IO约束指令只有两条:

set_input_delay:输入延迟约束;

set_output_delay:输出延迟约束

IO输入输出延迟约束

set_input_delay命令设定输入端口上相对于设计接口时钟边沿的输入路径延迟。输入延迟既指数据从外部芯片经过板级传输到FPGA输入管脚间的相位差,也指相对参考板级时钟间的相位差。输入延迟值可以是正的,也可以是负的,由时钟和数据在FPGA接口处的相对相位决定。约束时的相对时钟可以是一个设计时钟,也可以是一个虚拟时钟。

输入延迟命令的选项包括:

-min和-max:-min设定的值用于最小延迟分析(保持时间、移除时间);-max设定的值用于最大延迟分析(建立时间、恢复时间)。如果约束命令中没有使用这两个选项,输入延迟值会同时应用于min和max。

-clock_fall:用于指定由相对时钟的下降沿启动的时序路径上的输入延迟约束。如果没有这个选项,Vivado只假定使用相对时钟的上升沿。

-add_delay:该选项通常用于约束与多个时钟沿相关的输入端口(比如DDR接口),而且必须已经存在一个最大或最小输入延迟约束,设计者使用该命令为同一端口设置其它相对时钟沿的最大或最小输入延迟约束。

输入延迟约束只能应用于输入端口或双向端口(不包括时钟输入端口),不能用于设计内部的管脚。下面给出几个使用输入延迟约束的典型例子。

create_clock -name sysClk -period 10 get_ports CLK0

set_input_delay -clock sysClk 2 get_ports DIN

以上命令定义了一个主时钟sysClk作为输入延迟的相对时钟,设定的值同时作为最小值(min)分析和最大值(max)分析。

create_clock -name clk_port_virt -period 10

set_input_delay -clock clk_port_virt 2 get_ports DIN

该命令约束目的与上例相同,只是相对时钟换为一个虚拟时钟。使用虚拟时钟的好处是可以在不改变内部设计时钟的情况下,设定任意的抖动和延迟。

create_clock -name sysClk -period 10 get_ports CLK0

set_input_delay -clock sysClk -max 4 get_ports DIN

set_input_delay -clock sysClk -min 1 get_ports DIN

该命令最小值分析和最大值分析采用不同的输入延迟值。

create_clock -name sysClk -period 10 get_ports CLK0

set_input_delay -clock sysClk 4 get_ports DIN

set_output_delay -clock sysClk 1 get_ports DOUT

如果两个I/O端口之间仅有组合逻辑路径,没有任何时序单元,必须相对于虚拟时钟为I/O端口定义输入与输出延迟。该命令中DIN和DOUT之间的组合逻辑路径约束为 5ns(10-1-4)。但是就很少会有这种情形,IO端口之间仅有组合逻辑,为避免走线延时过长,需要对IO进行输入输出延迟约束。

create_clock -name clk_ddr -period 6 get_ports DDR_CLK_IN

set_input_delay -clock clk_ddr -max 2.1 get_ports DDR_IN

set_input_delay -clock clk_ddr -max 1.9 get_ports DDR_IN -clock_fall -add_delay

set_input_delay -clock clk_ddr -min 0.9 get_ports DDR_IN

set_input_delay -clock clk_ddr -min 1.1 get_ports DDR_IN -clock_fall -add_delay

这里相对时钟为DDR的时钟,最小值分析和最大值分析采用不同的输入延迟值。约束的一端是器件外部时钟的上升沿和下降沿启动的数据,另一端是器件内部同时对上升沿和下降沿敏感的触发器的输入数据。

set_output_delay命令设定输出端口上相对于设计接口时钟边沿的输出路径延迟。输出延迟既指数据从FPGA的输出管脚通过板级传输到另一个器件间的相位差,也指相对参考板级时钟间的相位差。输出延迟值同样也可以是正的或负的,由时钟和数据在FPGA器件外的相对相位决定。输出延迟命令的选项基本与输入延迟约束相同, 下面给出几个使用输出延迟约束的典型命令示例。

create_clock -name sysClk -period 10 get_ports CLK0

set_output_delay -clock sysClk 6 get_ports DOUT

create_clock -name clk_port_virt -period 10

set_output_delay -clock clk_port_virt 6 get_ports DOUT

定义一个主时钟sysClk/虚拟时钟virt作为输出延迟的相对时钟,设定的值同时作为最小值(min)分析和最大值(max)分析。

create_clock -name clk_ddr -period 6 get_ports DDR_CLK_IN

set_output_delay -clock clk_ddr -max 2.1 get_ports DDR_OUT

set_output_delay -clock clk_ddr -max 1.9 get_ports DDR_OUT -clock_fall -add_delay

set_output_delay -clock clk_ddr -min 0.9 get_ports DDR_OUT

set_output_delay -clock clk_ddr -min 1.1 get_ports DDR_OUT -clock_fall -add_delay

这里相对时钟为DDR的时钟,最小值分析和最大值分析采用不同的输出延迟值。约束的一端是器件外部时钟的上升沿和下降沿启动的数据,另一端是器件内部同时对上升沿和下降沿敏感的触发器的输出数据。

作者水平有限, 相关IO约束查阅了网络上的部分资源与自己的工程实际经验。

如果想要对静态时序分析与时序更加了解,可以查阅这2篇文章FPGA静态时序分析------IO口时序(Input Delay /output Delay) - 屋檐下的龙卷风 - 博客园 (cnblogs.com)

FPGA时序分析与约束_STATEABC的博客-CSDN博客

Vivado FPGA开发中的XDC约束入门_vivado xdc-CSDN博客

相关推荐
X_xcccc16 小时前
2026年嵌入式智能核心,从异构计算到敏捷开发的硬核指南
fpga开发·敏捷流程·zynq-7000·fpga板卡定制
9527华安18 小时前
FPGA实现GTX Transceivers Wizard传输2路视频,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
fpga开发·aurora·gtx·高速接口·高速收发器·transceivers
泛联新安20 小时前
VHawk-CDC:国内首款自主可控跨时钟域分析验证工具,破解FPGA设计CDC验证难题
fpga·跨时钟域·验证工具
ALINX技术博客20 小时前
【黑金云课堂】FPGA技术教程Linux开发:摄像头GPU渲染显示/Qt OpenGLES使用
linux·qt·fpga开发·gpu
S&Z346320 小时前
SZ901下载器烧写国产Flash指南
fpga开发
liuluyang53020 小时前
Verilog-1995风格,reg变量声明两次
fpga开发
cjie2211 天前
安路好用的调试工具VPI
fpga开发
chenlance2 天前
基于FPGA的激光器多通道数据采集与波形控制系统设计
fpga开发
9527华安2 天前
FPGA实现GTP高速收发器2路视频传输,基于aurora 8b10b编解码架构,提供4套工程源码和技术支持
图像处理·fpga开发·aurora·高速收发器·8b10b·derdes
cjie2212 天前
lanczos插值引起的振铃现象
计算机视觉·fpga开发