输入/输出延迟单元(IODELAY)简介
每个 I/O 模块包含一个可编程绝对延迟单元,称为 IODELAY。IODELAY 可以连接到
ILOGIC/ISERDES 或 OLOGIC/OSERDES 模块,也可同时连接到这两个模块。IODELAY 是
具有 64 个 tap 的环绕延迟单元,具有标定的 tap 分辨率(见附图 1)。IODELAY 可用于组
合输入通路、寄存输入通路、组合输出通路或寄存输出通路,还可以在内部资源中直接使用。
IODELAY 允许各输入信号有独立的延迟。通过在《Virtex-5 数据手册》中规定的范围内选
择 IDELAYCTRL 参考时钟,可以改变 tap 延迟分辨率。IODELAY 资源可用作 IDELAY、
ODELAY 或组合延迟。
1、当用作 IDELAY 时,数据从 IBUF 或内部资源输入,然后输出到 ILOGIC/ISERDES。
有三种可用操作模式:
• 零保持时间延迟模式(IDELAY_TYPE = DEFAULT)
这种操作模式允许向后兼容,以使用 Virtex-II、Virtex-II Pro 和 Virtex-4 器件中的零保
持时间延迟功能的设计。当在没有 DCM 的情况下使用全局时钟采集数据(引脚到引脚参数)
时,用这种延迟单元提供“非正保持时间”。在这种模式下使用时,不需要例化 IDELAYCTRL
基元。有关更多详情,请见“IDELAYCTRL 用法及设计指导原则”。
• 固定延迟模式(IDELAY_TYPE = FIXED)
在固定延迟模式下,配置时将延迟值预设置成由属性 IDELAY_VALUE 确定的 tap 数。
此值配置后不可更改。在这种模式下使用时,必须例化 IDELAYCTRL 基元。有关更多详情,
请见“IDELAYCTRL 用法及设计指导原则”。
• 可变延迟模式(IDELAY_TYPE = VARIABLE)
在可变延迟模式下,可以在配置后通过操控控制信号 CE 和 INC 来改变延迟值。在这
种模式下使用时,必须例化 IDELAYCTRL 基元。有关更多详情,请见“IDELAYCTRL
用法及设计指导原则”。
2、当用作 ODELAY 时,数据从 OLOGIC/OSERDES 输入,然后输出到 OBUF。有一种
可用操作模式:
• 固定延迟输出模式
在固定延迟输出模式下,配置时将延迟值预设置成由属性 ODELAY_VALUE 确定的 tap
数。此值配置后不可更改。在这种模式下使用时,必须例化 IDELAYCTRL 基元。有关更多
详情,请见“IDELAYCTRL 用法及设计指导原则”。
3、当用作双向延迟时,将 IOB 配置成双向模式。IODELAY 交替延迟输入通路和输出
通路上的数据。有两种可用操作模式:
• 固定 IDELAY(IDELAY_TYPE = FIXED)和固定 ODELAY 模式
在 这 种 模 式 下 ,IDELAY 和 ODELAY 的 值 都 是 在 配 置 时 预 设 置 , 分 别 由
IDELAY_VALUE 和 ODELAY_VALUE 属性确定。此值配置后不可更改。在这种模式下使
用时,必须例化 IDELAYCTRL 基元。有关更多详情,请见“IDELAYCTRL 用法及设
计指导原则”。
• 可变 IDELAY(IDELAY_TYPE = VARIABLE)和固定 ODELAY 模式
在这种模式下,只有 IDELAY 值可以在配置后通过操控控制信号 CE 和 INC 来动态更
改。IODELAY 基元中 T 引脚的逻辑级别动态确定模块是 IDELAY 模式还是 ODELAY 模式。
在这种模式下使用时,必须例化 IDELAYCTRL 基元。有关更多详情,请见“IDELAYCTRL
用法及设计指导原则”。
表 1-1 列出了 IODELAY 支持的配置。
表 1-1:IODELAY 支持的配置
IODELAY 基元
图 1-1 所示为 IODELAY 基元。
图 1-1:IODELAY 基元
表 1-2 列出了 IODELAY 基元中的可用端口。所有端口均为 1 位宽。
表 1-2:IODELAY 基元端口
IODELAY 端口
来自 IOB 的数据输入-IDATAIN
IDATAIN 输 入 由 相 应 的 IOB 驱 动 。 在 IDELAY 模 式 下 , 可 以 将 数 据 驱 动 到
ILOGIC/ISERDES 模块或直接驱动到 FPGA 内部资源中,也可以通过 DATAOUT 端口
按照由 IDELAY_VALUE 设置的延迟将数据同时驱动到这二者。
来自 FPGA 内部资源的数据输入-ODATAIN
ODATAIN 输入由 OLOGIC/OSERDES 驱动。在 ODELAY 模式下,ODATAIN 按照由
ODELAY_VALUE 设置的延迟驱动连接到 IOB 的 DATAOUT 端口。
来自 FPGA 内部资源的 IODELAY 的数据输入-DATAIN
DATAIN 输入直接由 FPGA 内部资源驱动,以提供一条可访问内部资源逻辑的延迟线。
数据按照由 IDELAY_VALUE 设置的延迟通过 DATAOUT 端口返回到内部资源中。
DATAIN 可以在芯片内反转。数据不能驱动到 IOB。
数据输出-DATAOUT
来自三个数据输入端口的延迟数据。DATAOUT 连接到内部资源(IDELAY 模式)或
IOB(ODELAY 模式),或同时连接到这二者(双向延迟模式)。如果在双向延迟模
式下使用,则 T 端口在 IDATAIN 和 ODATAIN 通路之间动态切换,根据来自 OLOGIC
模块的三态信号 T 所指示的方向交替提供输入/输入延迟。
三态输入-T
这是三态输入控制端口。对于双向操作,T 引脚信号还控制 OBUFT 的 T 引脚。
时钟输入-C
对 IODELAY 基元的所有控制输入(RST、CE 和 INC)均与时钟输入(C)同步。当 I
ODELAY 配置成可变模式时,必须将一个时钟连接到此端口。C 可以在芯片内反转。
模块复位-RST
IODELAY 复位信号 RST 将延迟单元复位到由 IDELAY_VALUE 或 ODELAY_VALUE
属性设置的值。如果未指定这些属性,则假定该值为零。RST 信号是高有效复位,与
输入时钟信号(C)同步。
表 1-3 概述了控制引脚的功能。
表 1-3:控制引脚描述
递增/递减信号– CE、INC
递增/递减由使能信号(CE)控制。当 IDELAY_TYPE = VARIABLE 时,此接口只可用
于 IDELAY 模式。
只要 CE 保持为 High,IDELAY 就会每时钟(C)周期按 IDELAYRESOLUTION 递增
或递减。INC 的状态确定 IDELAY 是递增还是递减:INC = 1 为递增,INC = 0 为递减,与
时钟(C)同步。如果 CE 为 Low,则通过 IDELAY 的延迟不变,与 INC 的状态无关。
当 CE 转为 High 时,在下一个时钟上升沿上开始递增/递减操作。当 CE 转为 Low 时,
在下一个时钟上升沿上停止递增/递减操作。
IODELAY 是环绕可编程延迟单元。当达到延迟单元的末尾(tap 63)时,随后的递增
功能就会返回到 tap0。同样的规则也适用于递减功能,即低于零的递减会转到 tap 63。表 1-4
概述了递增/递减操作。
表 1-4:递增/递减操作
IODELAY 属性
表 1-5 列出了 IODELAY 的属性。
表 1-5:IODELAY 属性概述
IDELAY_TYPE 属性
IDELAY_TYPE 属性设置所用延迟的类型。此属性的值是 DEFAULT、FIXED 和
VARIABLE。当设置成 DEFAULT 时,选择零保持时间延迟单元。当在没有 DCM 的情况下
使用全局时钟采集数据(引脚到引脚参数)时,用这种延迟单元提供非正保持时间。
当设置成 FIXED 时,tap 延迟值固定为由 IDELAY_VALUE 属性设置确定的 tap 数。此
值是预设置的,配置后不可更改。
当设置成 VARIABLE 时,选择可变 tap 延迟单元。Tap 延迟可以通过设置 CE = 1 和 INC
=1 递增,或通过设置 CE = 1 和 INC = 0 递减。递增/递减操作与输入时钟信号 C 同步。
IDELAY_VALUE 属性
IDELAY_VALUE 属性指定初始 tap 延迟数。可能的值是 0 到 63 之间的任意整数。默
认值是零。当 tap 延迟复位时,tap 延迟值恢复到 IDELAY_VALUE。在可变模式下,此属
性确定延迟线的初始设置。
ODELAY_VALUE 属性
ODELAY_VALUE 指定 tap 延迟数。可能的值是 0 到 63 之间的任意整数。默认值是零。
当 tap 延迟复位时,tap 延迟值恢复到 ODELAY_VALUE。
HIGH_PERFORMANCE_MODE 属性
当设置为 TRUE 时,此属性减少输出抖动。输出抖动减少导致 IODELAY 单元的功率
耗散略有上升。
SIGNAL_PATTERN 属性
SIGNAL_PATTERN 属性致使时序分析器计入数据或时钟通路中的相应延迟链抖动量。
IODELAY 时序
表 1-6 为 IODELAY 开关特性。
表 1-6:IODELAY 开关特性
图 1-2 所示为 IDELAY 时序图。假设 IDELAY_VALUE = 0。
时钟事件 1
图 1-2:IDELAY 时序图
在 C 的上升沿上检测到复位,致使输出 O 选择 tap 0 为 64 tap 链的输出(假设
IDELAY_VALUE = 0)。
时钟事件 2
在 C 的上升沿上检测到 CE 和 INC 的脉冲。这说明是递增操作。输出从 tap 0 到 tap 1
无毛刺变化。请见“递增/递减操作后的稳定性”。
时钟事件 3
至此,输出已经稳定在 tap 1,因而完成了递增操作。输出无限期地保持在 tap 1,直到
RST、CE 或 INC 引脚上有进一步活动。
递增/递减操作后的稳定性
图 1-2 显示了输出从一个 tap 向另一个变化时的不稳定时段。显然,当 tap 0 处的数据值
与 tap 1 处的数据值不同时,输出必须改变状态。然而,如果 tap 0 和 tap 1 处的数据值相同
(例如两者都是 0 或 1),则从 tap 0 到 tap 1 的过渡就不会在输出上造成毛刺或混乱。这一
概念可以通过设想 IODELAY 的 tap 链中的接收器数据信号来理解。如果 tap 0 和 tap1 都靠
近接收器数据眼的中心,则在 tap 0 处采样的数据应与在 tap 1 处采样的数据没有区别。在这
种情况下,从 tap 0 到 tap 1 的过渡不会引起输出变化。为了确保这种情况,IODELAY 的递
增/递减操作设计成了无毛刺操作。
在活动用户数据通过 IODELAY 单元时,用户可以实时动态调整 IODELAY 的 tap 设置,
不会扰乱活动用户数据。
当在时钟信号通路中使用 IODELAY 单元时,也适用无毛刺行为。调整 tap 设置不会在
输出上引起毛刺或混乱。可以调整时钟通路中 IODELAY 单元的 tap 设置,不会扰乱可能正
在该时钟上运行的状态机。
IDELAYCTRL 概述
如果用设置为 FIXED 或 VARIABLE 的 IOBDELAY_TYPE 属性例化 IODELAY 或
ISERDES 基元,则必须在代码中例化 IDELAYCTRL 模块。IDELAYCTRL 模块在其区域内
连续标定各延迟单元(IODELAY)(见图 1-5),以减少随工艺、电压和温度变化的影响。
IDELAYCTRL 模块使用用户提供的 REFCLK 标定 IODELAY。
IDELAYCTRL 基元
图 1-3 所示为 IDELAYCTRL 基元。
图 1-3:IDELYACTRL 基元
IDELAYCTRL 端口
RST-复位
复位输入引脚(RST)是 High 有效异步复位。IDELAYCTRL 在配置(以及 REFCLK
信 号 稳 定 ) 之 后 必 须 复 位 , 以 确 保 IODELAY 操 作 正 常 。 要 求 复 位 脉 冲 宽 度 为
TIDELAYCTRL_RPW(详见附图 1)。IDELAYCTRL 在配置后必须复位。
REFCLK-参考时钟
参考时钟(REFCLK)提供对 IDELAYCTRL 的时间参考,以标定同区域中的所有
IODELAY 模块。此时钟必须由全局时钟缓冲器(BUFGCTRL)驱动。REFCLK 必须是
FIDELAYCTRL_REF ±指定的 ppm 容差(IDELAYCTRL_REF_PRECISION),以保证指定
的 IODELAY 分辨率 (TIDELAYRESOLUTION)。REFCLK 可以由用户提供的信号源、PLL
或 DCM 直接提供,必须在全局时钟缓冲器上传输。
RDY-就绪
就绪(RDY)信号指示特定区域内的 IODELAY 模块标定完毕。如果 REFCLK 在一个
或几个时钟周期内保持为 High 或 Low,则 RDY 信号置为无效。如果 RDY 置为 Low 无效,
则 IDELAYCTRL 模块必须复位。实现工具允许不连接/忽略 RDY。图 1-4 所示为 RDY 与
RST 之间的时序关系。
IDELAYCTRL 时序
表 1-7 所示为 IDELAYCTRL 开关特性。
表 1-7:IDELAYCTRL 开关特性
如下图 1-4 所示,Virtex-5 RST 是边沿触发信号。
图 1-4:RDY 与 RST 之间的时序关系
IDELAYCTRL 位置
每个时钟区域的每个 I/O 列中都有 IDELAYCTRL 模块。一个 IDELAYCTRL 模块标定
其时钟区域内的所有 IDELAY 模块。图 1-5 所示为各 IDELAYCTRL 模块的相对位置。