乐于分享
好东西不私藏

Xilinx IDELAY2使用说明

Xilinx IDELAY2使用说明

各位小伙伴在FPGA设计中一定遇到过需要输入的多条数据线与随路时钟对齐的情况。为了解决这一问题,xilinx向用户提供了IDELAYE2模块,可以用来调整数据与时钟之间的相位关系。下面我们将对IDELAYE2如何使用做出说明。

1IDELAYE2模块

模块接口如上图所示,调用原语如下所示:

首先为大家介绍一下原语调用时各个属性和接口的含义:

1)、属性

IDELAY_TYPE :用于设置模块工作模式,分为四种:

属性

含义

FIXED

延时为固定值,通过延时值IDELAY_VALUE属性设置,一旦配置完成不能改变

VARIABLE

需要通过LDIDELAY_VALUE初始值加载,延时值可通过CE、INC信号进行增减

VAR_LOAD 

需要通过LDCNTVALUEIN信号表示的初始值加载,延时值可通过CE、INC信号进行增减(LD有效时CNTVALUEIN必须是稳定的)

VAR_LOAD_PIPE

需要通过LDPIPEEN将CNTVALUEIN信号表示的初始值先放置在Pipeline寄存器,当LD有效时将Pipeline寄存器加载,延时值可通过CE、INC信号进行增减(此模式下CNTVALUEIN值可以预先写入,相隔一段时间LD有效加载延时值)

IDELAY_VALUE :用于设置延时初始值,范围为0-31,默认值为0。(VAR_LOAD VAR_LOAD_PIPE模式下此属性无效)

HIGH_PERFORMANCE_MODE:设置为TRUE时,会减少信号抖动,但是会增加模块功耗。

SIGNAL_PATTERN :时钟信号与数据信号具有不同的电气特性,因此在通过IDELAY链时会累积不同程度的抖动。通过设置 SIGNAL_PATTERN 属性,用户可让时序分析器在计算时序时恰当地考虑抖动效应。模块处理的是DATA信号时,此属性设置为DATA,模块处理的是DATA信号时,此属性设置为CLOCK。

DELAY_SRC:选择输入数据来自端口IDATAIN还是DATAIN。

REFCLK_FREQUENCY:设置参考时钟频率,频率范围原语模块后面注释有标注。

CINVCTRL_SEL:是否允许通过外部引脚CINVCTRL动态翻转控制时钟(C)的极性

PIPE_SEL:VAR_LOAD_PIPE模式时设置为TRUE。

2)、引脚

IDATAIN:模块输入,信号源来自IOB;

DATAIN:模块输入,信号源来自FPGA逻辑;

DATAOUT IDATAIN或DATAIN经过延时处理后的输出,可以驱动到ILOGICE2/ISERDESE2 或者ILOGICE3/ISERDESE2以及FPGA逻辑;

C:参考时钟,所有控制信号(REGRST, LD, CE,INC) 与它都是同步的。

LD:延时值加载信号,高有效,使用在IDELAY_TYPE属性介绍已经讲过。

CINVCTRL:时钟极性翻转信号,有效后两个时钟周期IDELAYE2模块不能使用。

CNTVALUEIN:用于动态加载延时值。

CNTVALUEOUT:表示当前延时值为多少。

LDPIPEEN:高有效,CNTVALUEIN信号表示的初始值先放置在Pipeline寄存器。

REGRST:高有效,将Pipeline寄存器复位为0。

CE, INC:用来增减当前延时值。

介绍完毕后,那么我们现在举一个例子,在千兆网 RGMII 接口中我们常常会用到IDELAYE2来调整时钟和数据之间的相位关系,故以此为大家举例:

这就是一个完整的千兆网的接收端数据延时采样的程序,这里使用的为FIXED模式。

大家阅读过程中有什么问题欢迎留言。