我是靠谱客的博主 舒服汽车,最近开发中收集的这篇文章主要介绍输入/输出延迟单元( IODELAY)简介,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

输入 / 输出延迟单元( 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-2 IDELAY 时序图
时钟事件 1
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 模块的相对位置。
1-5 :各 IDELAYCTRL 模块相对位置
IDELAYCTRL 用法及设计指导原则
本部分讲述
Virtex-5 IDELAYCTRL 模块的使用、设计指导原则和推荐用法。
例化无
LOC 约束的 IDELAYCTRL
当例化无 LOC 约束的 IDELAYCTRL 时,用户在 HDL 设计代码中必须只例化一个
IDELAYCTRL 实例。实现工具将 IDELAYCTRL 实例自动复制到整个器件,甚至复制到未
使用延迟单元的时钟区域中。这样做资源占用率较高,在每个时钟区域内都要使用一个全局
时钟资源,并且使用布线资源较多,因此功耗较大。
(注:在简单工程中对 IDELAYCTRL
基元是否制定 LOC 约束,通过用 XPOWER 工具对功耗进行估算对比发现,是否制定 LOC
对功耗影响不大或者几乎无影响,但在大规模工程中,会由于 LOC 约束的指定带来功耗的
额外增加)
已例化 IDELAYCTRL 实例的 RST REFCLK 输入端口和所复制 IDELAYCTRL
实例的对应输入端口相连接。
有两个特例:
1 、当忽略 RDY 端口时,所有被复制的 IDELAYCTRL 实例的 RDY 信号均不连接。
对于例化无
LOC 约束的 IDELAYCTRL 基元并且不连接 RDY 输出端口的情况,《库指南》
中提供了
VHDL Verilog 使用模型。
1-6 所示为例化 IDELAYCTRL 组件后形成的电路。
1-6 :例化无 LOC 约束的 IDELAYCTRL- 不连接 RDY
2 、当连接 RDY 端口时,例化一个宽度等于时钟区域数的与门,并且将例化和复制的
IDELAYCTRL 实 例 的 RDY 输 出 端 口 连 接 到 与 门 的 输 入 。 工 具 将 连 接 到 已 例 化
IDELAYCTRL 实例的 RDY 端口的信号名称赋予与门的输出。
对于例化无
LOC 约束的 IDELAYCTRL 基元并且连接 RDY 端口的情况,《库指南》中
提供了
VHDL Verilog 使用模型。图 1-7 所示为例化 IDELAYCTRL 组件后形成的电路。
1-7 例化无 LOC 约束的 IDELAYCTRL- 连接 RDY
例化有位置( LOC )约束的 IDELAYCTRL
使用 IDELAYCTRL 模块的最有效方法是定义并锁定设计中所用每个 IDELAYCTRL
例的位置。具体做法是例化有位置(
LOC )约束的 IDELAYCTRL 实例。用户必须在用延迟
单元时定义并锁定所有
ISERDES IDELAY 组件的位置。( IOBDELAY_TYPE 属性设置
FIXED VARIABLE 。)完成后,可以选择 IDELAYCTRL 的位置并指定 LOC 约束。
Xilinx 强烈建议使用有 LOC 约束的 IDELAYCTRL
(注:如图 1-5 所示,一个 IDELAYCTRL 基元可同时覆盖一个 clock region ,而一个 clock
region
包含不止一个 IOB ,在约束 IDELAYCTRL 基元 LOC 时,需要仔细定位该 IOB 属于
哪个
LOC IDELAYCTRL 。)
位置约束
每个
IDELAYCTRL 模块都有 XY 位置坐标( X :行, Y :列)。为了约束位置,
IDELAYCTRL 实例可以附带 LOC 属性。 IDELAYCTRL 位置坐标的命名规则与用来命名
CLB 位置的规则不同。这样做便于在各阵列之间传递 LOC 属性。
IDELAYCTRL 实例附加 LOC 属性有两种方法。
1 、在 UCF 文件中插入 LOC 约束
2 、在 HDL 设计文件中直接嵌入 LOC 约束
UCF 文件中插入 LOC 约束
下列语法用于在
UCF 文件中插入 LOC 约束。
INST instance_name LOC=IDELAYCTRL_X#Y#
HDL 设计文件中直接嵌入 LOC 约束
下列语法用于在
HDL 设计文件中嵌入 LOC 约束。
// synthesis attribute loc of instance_name is "IDELAYCTRL_X#Y#";
VHDL 代码中,用 VHDL 属性描述 LOC 约束。约束必须用下列语法声明后才能使
用:
attribute loc : string
声明之后,
LOC 约束可以指定为:
attribute loc of instance_name:label is "IDELAYCTRL_X#Y0#";
《库指南》包括用于例化有 LOC 约束的 IDELAYCTRL 基元的 VHDL Verilog 使用模型
模板。
1-8 所示为例化 IDELAYCTRL 组件后形成的电路。
1-8 :例化有 LOC 约束的 IDELAYCTRL
例化有 LOC 约束和无 LOC 约束的 IDELAYCTRL
在有些情况下,用户例化有 LOC 约束的 IDELAYCTRL 模块,但还例化无 LOC 约束的
IDELAYCTRL 模块。如果用无位置约束的 IDELAYCTRL 模块例化 IP 核,但还需要为设计
的另一部分例化无
LOC 约束的 IDELAYCTRL 模块,则实现工具会执行以下各项:
• 按“例化有位置(
LOC )约束的 IDELAYCTRL ”部分所述例化 LOC IDELAYCTRL
实例。
• 复制无位置约束的
IDELAYCTRL 实例,以便用一个 IDELAYCTRL 实例填充每个不
具备有位置约束
IDELAYCTRL 实例的时钟区域。
• 将无位置约束
IDELAYCTRL 实例的 RST REFCLK 输入端口和所复制
IDELAYCTRL 实例的对应输入端口相连接。
• 如果忽略无位置约束
IDELAYCTRL 实例的 RDY 端口,则同时忽略所复制
IDELAYCTRL 实例的所有 RDY 信号。
• 如果连接无位置约束
IDELAYCTRL 实例的 RDY 端口,则将无位置约束实例的 RDY
端口和所复制实例的 RDY 端口连接到一个自动生成的与门。实现工具将连接到无位置约束
实例的
RDY 端口的信号之名称赋予与门的输出。
• 有位置约束实例的所有端口(
RST REFCLK RDY )均相互独立并且独立于复制
的实例。
1-9 所示为例化 IDELAYCTRL 件后形成的电路。
1-9 IDELAYCTRL 单元的混合例化例化
例化多个无
LOC 约束的 IDELAYCTRL
禁止例化多个无 LOC 属性的 IDELAYCTRL 。如果发生这种情况,实现工具就会报错。
(注:若在一个工程中同时例化多个不同 DELAY_SRC 属性,且无 LOC 约束的 IODELAY
时,只需例化一个 IDELAYCTRL 模块,否则 map 会报错。举例在同一个工程中需要例化一
个固定
IDELAY_VALUE IODELAY_INST0 DELAY_SRC 属性设置为“ I ”,表示其输
入为
IDATAIN ,而同时需要例化另外一个固定 ODELAY_VALUE IODELAY_INST1
DELAY_SRC 属性设置为“ O ”,其输入为 ODATAIN ,但是 IODELAY_INST0
IODELAY_INST1 使用时均无 LOC 约束,在例化 IDELAYCTRL 基元时,只需例化一个
IDELAYCTRL 基元,无需因为例化两个不同属性的 IODELAY 基元而分别例化两个
IDELAYCTRL 基元,否则 map 会报错。)
参考文献
1 】: ug190-Virtex-5 用户指南
2 】: ds202- Virtex-5 Data Sheet: DC and Switching Characteristics
3 】: v5ldl-Virtex-5 Libraries Guide for HDL Designs
附图 1 tap 延迟精度及相关时序参数
Verilog Instantiation Template
// IODELAY: Input and Output Fixed/variable Delay Element
// Virtex-5
// Xilinx HDL Libraries Guide, version 9.1i
IODELAY # (
.DELAY_SRC ( "I" ), // Specify which input port to be used
// "I"=IDATAIN, "O"=ODATAIN, "DATAIN"=DATAIN
.IDELAY_TYPE ( "DEFAULT" ), // "DEFAULT", "FIXED" or "VARIABLE"
.IDELAY_VALUE ( 0 ), // 0 to 63 tap values
.ODELAY_VALUE ( 0 ), // 0 to 63 tap values
.REFCLK_FREQUENCY ( 200.0 ) // Frequency used for IDELAYCTRL
// 175.0 to 225.0
) IODELAY_INST (
.DATAOUT ( DATAOUT ), // 1-bit delayed data output
.C ( C ), // 1-bit clock input
.CE ( CE ), // 1-bit clock enable input
.DATAIN ( DATAIN ), // 1-bit internal data input
.IDATAIN ( IDATAIN ), // 1-bit input data input (connect to port)
.INC ( INC ), // 1-bit increment/decrement input
.ODATAIN ( ODATAIN ), // 1-bit output data input
.RST ( RST ), // 1-bit active high, synch reset input

.T ( T ) // 1-bit 3-state control input
);
// End of IODELAY_inst instantiation
工程实例:
IODELAY #(
.DELAY_SRC ( "O" ), //IODELAY
源是 ODATAIN
.IDELAY_TYPE ( "FIXED" ), //
静态延迟
.ODELAY_VALUE ( 16 ), // 固定延迟数为 16 tap
.REFCLK_FREQUENCY ( 200.0 ) //IDELAYCTRL
参考时钟频率: 200MHz
)IODELAY_INST (
.C ( 1'b0 ), //
可变模式下使用的时钟输入
.CE ( 1'b0 ), // 是否启动递增 / 递减功能
.DATAIN ( 1'b0 ), //
.IDATAIN ( 1'b0 ), //
.INC ( 1'b0 ), //tap
延迟的递增 / 递减选择
.ODATAIN ( qLED ), // 来自 OLOGIC/OSERDES 的信号
.RST ( 1'b0 ), // 将延迟单元次坏皆ど瓒 ǖ 闹,若没有预设定值则复位到 0
.T ( 1'b0 ), //
用作 ODELAY
.DATAOUT ( qLED_cld )
);
IDELAYCTRL IDELAYCTRL_inst (
.RDY ( RDY ), // 1-bit ready output
.REFCLK ( System_Clk ), // 1-bit reference clock input
.RST ( 1'b0 ) // 1-bit reset input
);
#INST "IDELAYCTRL_inst" LOC = IDELAYCTRL_X1Y2; (ucf
文件添加 )
OBUF obuf_qLED (
.I ( qLED_cld ),
.O ( qLED )
);

最后

以上就是舒服汽车为你收集整理的输入/输出延迟单元( IODELAY)简介的全部内容,希望文章能够帮你解决输入/输出延迟单元( IODELAY)简介所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部