写在前面:IDELAY2有4种工作模式( FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE),本篇主要对“FIXED”模式即固定数值延迟模式进行说明,后面择机再出一篇聊聊剩余的3种模式,先解决“从无到有”的问题,再想着“从有到优”的问题。
本篇所说的IDELAY2与前代的IDELAY存在一些差异,具体可在Virtex-4 User Guide 中查阅
还是像之前一样,先抛出几个问题:
1.什么是 IDELAY2?IDELAY2的作用是什么?使用场景?
2. IDELAY2结构是什么样?都有哪些端口?端口属性都是什么?
3. IDELAY2原语结构,参数属性说明?
4. IDELAYCTRL
5. IDELAY2时序是什么样?
1.什么是 IDELAY2?IDELAY2的作用是什么?使用场景?
IDELAY2也即 input delay,用于在信号通过引脚进入FPGA芯片内部之前,进行延时调节,如下图,信号由PAD通过IOB后,经过IDELAY2后到达ILOGIC再到达FPGA内部或直接到达FPGA内部,用于由于器件差异或PCB走线较差导致的时钟和数据未对齐问题,从而进行微调。
2.IDELAY2结构是什么样?都有哪些端口?端口属性都是什么?
IDELAY2结构如下图:
端口说明:
C、REGRST、LD、CE、INC、CINVCTRL、CNTVALUE[4:0]、LDPIPEEN、CNTVALUEOUT[4:0]共9个端口用于VARIABLE,、VAR_LOAD,、VAR_LOAD_PIPE模式下,本篇不讨论;
IDATAIN:从IOB输出的延迟输入管脚;
DATAIN:从FPGA fabric侧输出的延迟输入管脚;
DATAOUT:延迟输出管脚。
3.IDELAY2原语结构,参数属性说明?
IDELAY原语如下:
(* IODELAY_GROUP = <iodelay_group_name> *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
IDELAYE2 #(
.CINVCTRL_SEL("FALSE"), // Enable dynamic clock inversion (FALSE, TRUE)
.DELAY_SRC("IDATAIN"), // Delay input (IDATAIN, DATAIN)
.HIGH_PERFORMANCE_MODE("FALSE"), // Reduced jitter ("TRUE"), Reduced power ("FALSE")
.IDELAY_TYPE("FIXED"), // FIXED, VARIABLE, VAR_LOAD, VAR_LOAD_PIPE
.IDELAY_VALUE(0), // Input delay tap setting (0-31)
.PIPE_SEL("FALSE"), // Select pipelined mode, FALSE, TRUE
.REFCLK_FREQUENCY(200.0), // IDELAYCTRL clock input frequency in MHz (190.0-210.0, 290.0-310.0).
.SIGNAL_PATTERN("DATA") // DATA, CLOCK input signal
)
IDELAYE2_inst (
.CNTVALUEOUT(CNTVALUEOUT), // 5-bit output: Counter value output
.DATAOUT(DATAOUT), // 1-bit output: Delayed data output
.C(C), // 1-bit input: Clock input
.CE(CE), // 1-bit input: Active high enable increment/decrement input
.CINVCTRL(CINVCTRL), // 1-bit input: Dynamic clock inversion input
.CNTVALUEIN(CNTVALUEIN), // 5-bit input: Counter value input
.DATAIN(DATAIN), // 1-bit input: Internal delay data input
.IDATAIN(IDATAIN), // 1-bit input: Data input from the I/O
.INC(INC), // 1-bit input: Increment / Decrement tap delay input
.LD(LD), // 1-bit input: Load IDELAY_VALUE input
.LDPIPEEN(LDPIPEEN), // 1-bit input: Enable PIPELINE register to load data input
.REGRST(REGRST) // 1-bit input: Active-high reset tap-delay input
);
参数说明:
IDELAY_TYPE:用于设置四种延迟模式的一种,默认FIXED,即固定延迟模式;
DELAY_SRC:用于选择延迟输入源端口,是IDATAIN或 DATAIN,默认IDATAIN;
IDELAY_VALUE:延迟数据,对于不同的参考时钟,每一拍代表的延迟时间不同;
HIGH_PERFORMANCE_MODE:TRUE用于减少抖动,FALSE用于减少功耗,默认TRUE;
SIGNAL_PATTERN:延迟输入信号类型,时钟或数据,默认为数据;
REFCLK_FREQUENCY:延迟数值IDELAY_VALUE的参考时钟,默认200MHz,即1个tap为78ps,具体参考7系列FPGA的数据手册;
CINVCTRL_SEL:动态改变时钟极性,默认FALSE;
PIPE_SEL:在VAR_LOAD_PIPE模式下,选择pipeline mode。
4.IDELAYCTRL:
IDELAYCTRL 和 IDELAYE 需要同时使用,IDELAYCTRL用于对 IDELAYE 延时进行校准:
REFCLK:参考时钟输入引脚,实际参考时钟频率与IDELAY_VALUE应相同;
RST:复位引脚;
RDY:校准完成信号。
原语:
(* IODELAY_GROUP = <iodelay_group_name> *) // Specifies group name for associated IDELAYs/ODELAYs and IDELAYCTRL
IDELAYCTRL IDELAYCTRL_inst (
.RDY(RDY), // 1-bit output: Ready output
.REFCLK(REFCLK), // 1-bit input: Reference clock input
.RST(RST) // 1-bit input: Active high reset input
);
通过IODELAY_GROUP将IDELAY和IDELAYCTRL关联起来
5.IDELAY2时序
Clock event 1:LD拉高,相当于复位IDELAY,输入直接到DATAOUT,未进行延迟;
Clock event 2:CE和INC同时拉高,tap值加1,即DATAOUT延迟于输入1拍;
Clock event 3:继续保持Clock event 2后的延迟拍数。文章来源:https://www.toymoban.com/news/detail-409726.html
注意:在FIXED模式下,延迟tap数在一开始就被 IDELAY_VALUE配置后定下来,不可改动,所以我们可以在VARIABLE或VAR_LOAD模式下进行动态调整,当调整结束后,再使用FIXED模式将程序固定下来。文章来源地址https://www.toymoban.com/news/detail-409726.html
到了这里,关于FPGA结构分析——IDELAY2,网口储备点3的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!