简介
大多数存储器接口都是源同步接口,从外部存储器器件传出的数据和时钟/ 选通脉冲是边沿对齐的。在 Virtex-4 器件采集这一数据,需要延迟时钟/ 选通脉冲或数据。利用直接时钟控制技术,数据经延迟,并与内部 FPGA 时钟实现中心对齐。在这个方案中,内部 FPGA时钟采集传出的数据。存储器传出的时钟/ 选通脉冲用于决定与数据位相关的延迟值。因此,与选通脉冲相关的数据位的数量不受限制。由于无需将选通脉冲分配给相关数据位,所以不需要其他时钟资源。
时钟/ 选通脉冲和数据位使用的 Virtex-4 资源是一条 64-tap 绝对延迟线。该 64-tap 绝对延迟线可利用 IDELAY 和 IDELAYCTRL primiTIve 实现。时钟/ 选通脉冲和数据位均通过此 64-tap绝对延迟线来布线。虽然选通脉冲不 用于采集数据,但它用于确定数据与内部 FPGA 时钟实现中心对齐所需的 tap 数量。以下部分将详细解释直接时钟控制技术方案的设计及实现。
选通脉冲边沿检测
与时钟/ 选通脉冲相关的数据位的延迟值就是内部 FPGA 时钟上升沿与时钟/ 选通脉冲中心之间的相位差。假设时钟/ 选通脉冲和数据实现了边沿对齐。要确定这个相位差,时钟/ 选通脉冲通过 IOB 内的 64-tap 绝对延迟线输入,并利用内部 FPGA 时钟在增量 tap 输出端对其进行采样。
要确定时钟/ 选通脉冲的中心,至少需要检测到时钟/ 选通脉冲的两个边沿或转换。检测出第二次转换所需的 tap 数(即第二个边沿的 tap)和检测出第一次转换所需的 tap 数(即第一个边沿的 tap)之差,即为时钟/ 选通脉冲宽度。这个差值的二分之一就是脉冲中心(即脉冲中心的 tap)。从内部 FPGA 时钟上升沿到时钟/ 选通脉冲中心之间的 tap 数,即为第一个边沿的tap 数与脉冲中心的 tap 数之和。
图1 说明了通过使数据延迟相应的 tap 数,让数据与内部 FPGA 时钟实现中心对齐的两种情况。第 1 种情况所示为,由于时钟/ 选通脉冲的下降沿是被检测到的第一个边沿,因此内部FPGA 时钟的上升沿位于延迟数据的中心。第 2 种情况所示为,由于时钟/ 选通脉冲的上升沿是检测到的第一个边沿,因此内部 FPGA 时钟下降沿位于延迟数据的中心。
实现选通脉冲边沿检测由于具有专用的 IDELAY 和 IDELAY_CTRL 电路,所以可以轻松地在 Virtex-4 器件中实现确定延迟值的电路。实现确定延迟值电路的结构图如图2 所示。
利用一个简单的算法检测存储器时钟/ 选通脉冲的边沿。将初始值为 0 的时钟/ 选通脉冲输入IDELAY 模块。时钟/ 选通脉冲将不停地增加 1 tap 的延迟,直到检测到第一个边沿。然后记录下检测出第一个边沿所需的 tap 数。在检测到第二个边沿之前,时钟/ 选通脉冲仍然不停地增加 1 tap 的延迟。然后记录下检测出第二个边沿所需的 tap 数。根据两次记录的值,计算出脉冲宽度。在用 tap 数确定时钟/ 选通脉冲宽度后,除以 2 即得到中间值。中间值与检测出第一个边沿所需的 tap 数之和为延迟数据所需的tap 数。
IDELAY 模块可用的 tap 总数为64。因此,当频率为 200 MHz 或以下时,将无法检测出两个边沿。如果在 64 tap 结束后仅检测出一个边沿,那么延迟数据所需的 tap 数应为,检测出第一个边沿所需的 tap 数减去 16 tap (约 1.25 ns,每个 tap 的延时约为 75 ps)。一个 200 MHz 时钟/ 选通脉冲周期的四分之一约为 16 tap。根据时序分析,该值也适用于更低的频率,最低可达 110 MHz。当频率低于 110 MHz 时,如果在 64 tap 结束后未检测出任何边沿,那么延迟数据所需的 tap 数应为 32 tap(约 2.5 ns,每个 tap 的延时约为 75 ps)。该值足以使内部 FPGA时钟边沿位于数据窗口内。
检测第一个和第二个边沿仅需一个小型状态机。只有在为确定数据延迟 tap 数而发出的虚读操作过程中,才启用该状态机。在正式工作之前,发送至外部存储器器件的虚读操作命令包含多条背靠背读命令。状态机将控制输入 IDELAY 电路的信号,即DLYRST、DLYCE 和 DLYINC。
DLYRST - 延迟线复位信号,将延迟线中的 tap 数重设为按 IOBDELAY_VALUE 属性设置的值。本设计中被设为 “0”。
DLYCE - 延迟线使能信号,确定何时激活延迟线递增/ 递减信号。
DLYINC - 延迟线递增/ 递减信号,可增加或减少延迟模块中的 tap 数。表2 描述了延迟线的运行模式。
用于控制这些延迟模块输入的状态图如图3 所示。该状态机的四种状态分别为:DELAY_RST、IDLE、DELAY_INC 和 DETECT_EDGE。
DELAY_RST
该状态是发起虚读操作时启用的状态机的第一个状态。在这种状态下,延迟模块被重设为“0”tap。该状态之后是多个 IDLE 状态。
IDLE
在这种状态下,延迟模块保持“无变化”运行模式。除 IDLE 状态之外,每种状态结束后都会出现数个 IDLE 状态, 以便处理 tap 输出值。IDLE 状态之后是另一个 IDLE、DELAY_INC 或DETECT_EDGE 状态。
DELAY_INC
这个状态使延迟模块tap 数加 1。该状态之后是数个IDLE 状态。
DETECT_EDGE
在这种状态下,比较延迟模块的输出及其上一个值,用于检测信号边沿或转换,同时,延迟模块tap 数加 1。该状态之后是数个 IDLE 状态。
在确定了延迟数据所需的 tap 数后,将启用数据 IDELAY 电路,并增加到这一数值。按照所需的 tap 数,使数据 IDELAY 电路增加相同的时钟周期。数据 IDELAY 电路的读/ 写数据通路结构图如图4 所示。
数据采集与二次采集
如图4 所示,利用内部FPGA时钟,在输入 DDR 触发器中采集延迟数据。然后,把这些触发器的输出存储到两个FIFO 中;一个代表上升沿数据,另一个代表下降沿数据。这些FIFO 是利用LUT RAM 实现的,其写使能操作由控制器生成的读使能信号提供,并在数据格式校准的基础上与采集的读取数据对齐。
DDR2 SDRAM 器件并未随读取数据一同提供读有效或读使能信号。因此,控制器将根据 CAS延迟和突发长度,生成这个读使能信号。在开始执行读取操作时,必须令该读使能信号有效,并在选通脉冲的最后一个上升沿结束后使其无效。在IDDR 触发器的输出端,该读使能信号必须与采集到的读取数据对齐。为了实现读使能对齐,在数据与FPGA 时钟对齐后,将已知数据格式写入存储器。然后读回已知数据格式,并在读使能信号与采集到的读取数据对齐之前,利用移位寄存器延迟读使能信号。每字节数据都会生成一个读使能信号。图5 为读使能对齐的时序图。
读时序分析
这一部分介绍了利用直接时钟控制技术实现的读时序分析。直接在FPGA 时钟域内采集读取数据,因此,用于数据有效窗口分析的存储器参数就是存取时间 (TAC)。下面简要介绍了此时序分析中使用的各个参数。
此时序分析中考虑的外部存储器参数有:
TAC - 读取数据 (DQ) 的存取时间(以FPGA 传递给存储器的时钟为参照)
TDCD - DCM 输出占空比失真
利用FPGA 时钟而非存储器时钟/ 选通脉冲(DQS),来采集读取数据(DQ) ;因此,该分析考虑了TAC (以时钟为参照的数据存取时间)。在此分析中,未考虑DQS - DQ 存储器参数,如TDQSQ 和TQHS,因为 TAC 比这两个参数更重要。
此时序分析中考虑的FPGA 参数有:
TCLOCK_TREE-SKEW - 紧密放置在该组中的 IOB 触发器的全局时钟树歪斜
TPACKAGE_SKEW - 特定器件/ 封装的封装
歪斜
TSAMP - Virtex-4 源同步数据手册中规定的采样窗口
TIDELAYPAT_JIT - Virtex-4 数据手册中规定的每个 IDELAY tap 的数据格式抖动
通过检测 DQS 边沿,计算出与 DQS 相关的数据位延迟。利用全局时钟在 I/O 触发器中采集DQS 来进行检测。因此,最终得到的数据延迟值已经包含了 I/O 触发器的建立时间和保持时间。在进行最差情况分析时,需要考虑 I/O 触发器固有的建立时间和保持时间。
此外,计算数据位和相关选通脉冲之间的歪斜也需要考虑 PCB 布局歪斜。
表3 所示为在205 MHz 频率下,对DDR2 接口执行的读时序分析。全部参数单位均为皮秒。
TDATA_PERIOD 是时钟周期的二分之一减去TMEM_DCD。TDATA_PERIOD 与不确定值之和的差,就是有效数据窗口 (43 ps)。因此,在 205 MHz 频率下,-11Virtex-4 器件将产生 43 ps 的余量。
参考设计
存储器接口生成器 (MIG) 工具中集成了直接时钟控制数据采集技术的参考设计。该工具已被集成到 Xilinx Core Generator 工具中。最新版参考设计,可从 Xilinx 网站下载 IP 更新:http://www.xilinx.com/cn/xlnx/xil_sw_updates_home.jsp
结论
Virtex-4 I/O 架构增强了源同步存储器接口的实现。本应用指南及参考设计中使用的架构特性包括:
IDELAY 模块 - 连续校准的 tap 延时很小的延迟元件。
FIFO16 primitive - 用作 FIFO 的 Block RAM,无需使用生成状态标志所需的其他 CLB 资源。
高速差分全局时钟资源提供了更好的占空比。差分时钟减少了参考设计所需的全局时钟资源数量。
责任编辑:gt
评论
查看更多