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博客

相关推荐
ALINX技术博客10 小时前
ALINX 亮相 2026 WAIC 世界人工智能大会,展示 AI 视觉 FPGA+GPU 异构计算与电子后视镜解决方案
人工智能·ai·fpga·世界人工智能大会·电子后视镜
仲南音1 天前
Xilinx FPGA——时钟IP核MMCM、PLL
fpga开发
I'm a winner2 天前
基于Xilinx FPGA的LVDS高速串行通信系统(三)--数据训练及握手机制【文末源码】
fpga开发
upper20202 天前
coremark移植坑之-nostartfiles -nostdlib参数
学习·fpga开发·coremark移植·riscv设计
Eloudy2 天前
Vivado 纯命令行构建 FPGA 项目教程
fpga开发
Rambo.xia2 天前
AXI跨时钟域与数据一致性——CDC FIFO深度不够、写后读冒险、多Master仲裁、乱序返回,出了Bug根本查不出来
fpga开发·bug
upper20202 天前
FPGA部署卷积神经网络识别MINST图片
fpga开发·卷积神经网络·minst·minst识别·部署神经网络·神经网络识别图片
你是我的解忧王子3 天前
嵌入式 ADC采样 原始数据分析上层(平均值 波动率 正态分布 线性补偿 系统误差)
fpga开发·数据挖掘·数据分析
Eloudy3 天前
RFSoC 4x2 参考手册
fpga
9527华安3 天前
FPGA纯verilog代码ISP图像处理培训教程,基于IMX214,提供工程源码+视频教程+FPGA开发板
图像处理·fpga开发·isp·imx214·mipi