FPGA的IO约束如何使用

时间:2025-11-01  作者:Diven  阅读:0

  set_input_delay属于时序约束中的IO约束,我之前的时序约束教程中,有一篇关于set_input_delay的文章,但里面写的并不是很详细,今天我们就来详细分析一下,这个约束应该如何使用。

FPGA的IO约束如何使用

FPGA时序约束理论篇之IO约束

首先还是需要明确一点,这个约束没有延迟的作用,如果需要对输入信号做延迟,就要使用IODELAY这种原语。

什么是input_delay?

input_delay是指输入的数据到达FPGA的pad时相对于时钟边沿的延迟有多大,单位是ns,数值可以是正,也可以是负。

image-20220820220754710

假设时钟是没有skew的,那么上图中的input_delay就等于Clock to Out+Trace Dealy,即上游器件的时钟到触发器输出的延时+PCB上的布线延迟,即Tco+Tdelay

但我们实际的应用,碰到的大多数情况都是随路时钟,也就是说上游器件输出数据的同时也会输出时钟给FPGA,就像下图所示:

image-20220821194158470

set_input_delay语法

set_input_delay [‑clock ] [‑reference_pin ] [‑clock_fall]    [‑rise] [‑fall] [‑max] [‑min] [‑add_delay] [‑network_latency_included]    [‑source_latency_included] [‑quiet] [‑verbose]  
NameDescription
[-clock]Relative clock
[-reference_pin]Relative pin or port
[-clock_fall]Delay is relative to falling edge of clock
[-rise]Specifies rising delay
[-fall]Specifies falling delay
[-max]Specifies maximum delay
[-min]Specifies minimum delay
[-add_delay]Don't remove existing input delay
[-network_latency_included]Specifies network latency of clock already included
[-source_latency_included]Specifies source latency of clock already included
[-quiet]Ignore command errors
[-verbose]Suspend message limits during command execution
Delay value
List of ports

下面来详细说明一下:

-clock:input_delay一般是相对时钟而言的,而且默认是相对于上升沿,我们可以通过clock_fall参数来指定下降沿,这里的时钟可以是虚拟时钟;

-reference_pin:指定相对于某个pin上的时钟边沿,跟-clock的参数其实是一个意思,毕竟时钟也是通过pin输入进来的;

-clock_fall:指定相对于时钟下降沿

-rise:指定端口的上升转换的输入延迟

-fall:指定端口的下降沿的输入延迟

-max:最大延迟

-min:最小延迟,我们做input delay主要就是约束这两个参数

-add_delay:以增量的方式添加延迟,如果不加该参数,默认行为是替换现有的延时

-network_latency_included:表示参考时钟的网络延迟也包含在延迟中

-source_latency_included:跟上一个参数类似的含义,该参数表示时钟的源端延迟包含在延时中

-quiet:忽略指令的错误信息,即便指令错了也依然返回TCL_OK

-verbose:命令执行期间忽略消息数量的限制,就是说会返回该指令的所有的message

delay:延迟值

objects:端口列表

Vivado Timing Constraints Wizard

很多约束时钟vivado中的Timing Constraints Wizard工具会方便很多,对于input delay的约束,界面如下:

image-20220904205339367

我们需要设置的就是数据相对于时钟的最大和最小的延时,trce_dly_mintrce_dly_max是指布线的延迟,一般随路时钟跟数据都会采用等长布线的方式,因此可以设置为0即可。

在设置完成后,下面的Tcl Command Preview中就会出现约束的tcl语法,这种方式对于该约束是很了解或者懒得手写约束的朋友来说非常的方便。

image-20220904205430995

Examples

1.输入数据比时钟延迟3ns的delay:

create_clock -name clk -period 10 [get_ports clk_in]set_input_delay -clock clk 3 [get_ports DIN]

2.输入数据相对于时钟的下降沿有2ns的delay:

set_input_delay -clock_fall -clock clk 2 [get_ports DIN]

3.复位管脚相对于BUFG输出的时钟有2ns的delay:

set_input_delay -clock wbClk 2 -reference_pin [get_pin wbClk_IBUF_BUFG_inst/O] [get_ports reset]

4.时钟虚拟时钟的约束

虚拟失踪的具体时钟方式可以参考另一篇文章

FPGA的虚拟时钟如何使用?

外部IO的参考时钟比设计中主时钟的路径上多了一个BUFFER

image-20220904211616829
create_clock -name sysclk -period 10 [get_ports clkin]create_clock -name virtclk -period 10set_clock_latency -source 1 [get_clock virtclk]set_input_delay -clock virtclk -max 4 [get_ports dina]set_input_delay -clock virtclk -min 2 [get_ports dina]

5.双沿时钟的约束,对上升沿和下降沿都需要进行约束

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_delayset_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

具体案例

比如某器件手册的输出时钟与数据的setup和hold要求如下图:

image-20220904232921974

该时钟双沿采样,在时钟边沿到来后,结合input_delay的最大最小延迟的定义,可以知道:

  • 最小延迟就是hold time,因为如果比hold time还小了,那保持时间就不满足了,即1.2ns
  • 最大延迟是时钟周期-setup time,这里上下沿之间的间隔是4ns,因此max delay是2.8ns

因此input delay的约束如下:

set_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD0] -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD1] -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD2] -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD3] -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXC] -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD0] -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD1] -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD2] -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD3] -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXC] -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD0] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD1] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD2] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXD3] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -min 1.200 [get_ports RXC] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD0] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD1] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD2] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXD3] -clock_fall -add_delayset_input_delay -clock [get_clocks rx_clk] -max 2.800 [get_ports RXC] -clock_fall -add_delay

只要记住:

  • min_delay就是上游器件的hold time
  • max_delay是时钟周期-上游器件的setup time
  • 如果是双沿的话,就是半个时钟周期,而且还需要对时钟的下降沿进行约束

 

  审核编辑:汤梓红


猜您喜欢

贴片电阻上的数字和字母,如同神秘代码,代表着它的阻值。学会解读这些代码,就能快速识别电阻大小。一般来说,三位数的编码遵循以下规则:前两位数字表示有效数字,第三位...
2024-11-26 11:30:03

电子测量和信号处理领域,电阻采样是一种常用的技术,尤其是在电流和电压的测量中。单电阻采样和三电阻采样是两种主要的采样方法,各自具有独特的优缺点和适用场景。本文将...
2025-03-19 05:01:38

数字电路基础知识——组合逻辑电路(数据选择器MUX、也即多路复用器) 本次介绍数据选择器的相关知识,数据选择器在电路设计中尤为重要,尤其是对于在Verilog中...
2022-10-20 17:12:00

凸轮轴位置传感器的功能1. 监测凸轮轴位置凸轮轴位置传感器的主要功能是监测凸轮轴的旋转位置。通过这种方式,它可以提供关于发动机气门开闭时间的精确信息,这对于发动...
2024-12-05 09:25:00

对于各种不同的数据中心工作负载,FPGA 可以显著提高性能,最大程度减少附加功耗并降低总体拥有成本 (TCO)。例如,英特尔合作伙伴 Swarm64 使用英特...
2018-07-07 10:38:00

太阳诱电(TAIYO YUDEN)作为一家全球知名的电子元器件制造商,其电位器产品在市场上享有盛誉。电位器,作为调节电压、电流或信号强度的关键组件,应用于各类电...
2019-08-14 23:08:22

复位监控电路中的复位引脚,简单来说,就像电子设备的启动按钮。输出一个特定的信号,确保设备在启动时能够正常工作。想象一下,您的电脑或手机在开机时,需要把所有程序和...
2024-11-06 00:00:00

安全柜是用于存储危险化学品和易燃物品的重要设备,确保实验室和工作环境的安全。根据不同的使用需求,安全柜可以分为以下几类:化学品安全柜专门用于存放各种化学试剂,具...
2008-08-09 00:00:00

电位器作为调节电阻的重要元件,在电路设计中是不可少的配件。而立隆(LELON)作为国内知名的电子元器件制造品牌,其电位器产品因品质优良、种类丰富而受到市场青睐。...
2013-05-26 08:39:31

现代科技迅速发展的时代,各种设备的配件成为了提升性能和使用体验的重要因素。本文将重点介绍“Accessories_10.5X4.7MM_TM”这一配件,分析其在...
2025-04-24 17:00:03