Ultrascale 系的输出原语ODELAYE3可以对任何输出信号进行延迟,这些输出信号可以直接从器件逻辑进行转发,或是使用单沿SDR或双沿DDR时钟寄存在触发器或是OSERDES中,可以延迟的范围较广;
ODELAYE3原语与IDELAYE3原语一样包含512个抽头延迟线,抽头分辨率的范围也与IDELAYE3一致,Ultrascale系列,抽头分辨率为2.5ps~15ps,Ultrascale+系列,抽头分辨率为2.1ps~12ps;
ODELAYE3同样有两种模式:
COUNT模式:不使用IDELAYCTRL组件,延时线不校准,没有电压温度补偿,延迟线只用抽头进行计数,不使用ps进行计数,参数DELAY_VALUE用抽头数量表示,0-511;
TIME模式:使用IDELAYCTRL组件,延时线按请求的时间进行校准,电压温度补偿确保延时线的延迟值不随时间变化,参数DELAY_VALUE用ps表示;
l ODELAYE3原语:
框图:
例化模板:
ODELAYE3 #(
.CASCADE('NONE'), // Cascade setting (MASTER, NONE, SLAVE_END, SLAVE_MIDDLE)
.DELAY_FORMAT('TIME'), // (COUNT, TIME)
.DELAY_TYPE('FIXED'), // Set the type of tap delay line (FIXED, VARIABLE, VAR_LOAD)
.DELAY_VALUE(0), // Output delay tap setting
.IS_CLK_INVERTED(1'b0), // Optional inversion for CLK
.IS_RST_INVERTED(1'b0), // Optional inversion for RST
.REFCLK_FREQUENCY(300.0), // IDELAYCTRL clock input frequency in MHz (200.0-2667.0).
.SIM_DEVICE('ULTRASCALE'), // Set the device version (ULTRASCALE)
.UPDATE_MODE('ASYNC') // Determines when updates to the delay will take effect (ASYNC, MANUAL, SYNC)
)
ODELAYE3_inst (
.CASC_OUT(CASC_OUT), // 1-bit output: Cascade delay output to IDELAY input cascade
.CNTVALUEOUT(CNTVALUEOUT), // 9-bit output: Counter value output
.DATAOUT(DATAOUT), // 1-bit output: Delayed data from ODATAIN input port
.CASC_IN(CASC_IN), // 1-bit input: Cascade delay input from slave IDELAY CASCADE_OUT
.CASC_RETURN(CASC_RETURN), // 1-bit input: Cascade delay returning from slave IDELAY DATAOUT
.CE(CE), // 1-bit input: Active high enable increment/decrement input
.CLK(CLK), // 1-bit input: Clock input
.CNTVALUEIN(CNTVALUEIN), // 9-bit input: Counter value input
.EN_VTC(EN_VTC), // 1-bit input: Keep delay constant over VT
.INC(INC), // 1-bit input: Increment/Decrement tap delay input
.LOAD(LOAD), // 1-bit input: Load DELAY_VALUE input
.ODATAIN(ODATAIN), // 1-bit input: Data input
.RST(RST) // 1-bit input: Asynchronous Reset to the DELAY_VALUE
);
端口:
CASC_OUT、CASC_IN、CASC_RETURN三个端口用于级联操作,如果不级联,将这几个端口悬空即可;
CLK为控制接口的同步时钟;
CE、INC端口的功能与IDELAYE3相同,用于抽头递增递减操作;
LOAD、CNTVALUEIN、CNTVALUEOUT三个端口用于动态加载抽头值;
DATAOUT端口连接到IOB将信号输出到FPGA外部;
参数:
CASCADE:不级联设置为NONE,使用级联时需从这三种MASTER, SLAVE_END, SLAVE_MIDDLE
选择中选择对应的位置,下一节将对级联进行仿真验证;
DELAY_TYPE:延时类型,共有FIXED, VARIABLE, VAR_LOAD三种类型,与IDELAYE3的三种类型的操作逻辑基本一致;
DELAY_VALUE:初始延迟值,在COUNT模式下表示抽头数量,范围0-511,在TIME模式下表示延时ps值,Ultrascale器件范围0-1250,Ultrascale+器件范围0-1100;
REFCLK_FREQUENCY:参考时钟,COUNT模式下设置为300即可,TIME模式下需要与IDELAYCTRL的时钟频率相对应;
DELAY_FORMAT:延时模式,TIME或是COUNT,与IDELAYE3中的延时模式逻辑一致;
使用COUNT模式时,不使用IDELAYCTRL,不校准延迟线,REFCLK_FREQUENCY设置未默认的300MHz,保持EN_VTC端口为低以防止校正逻辑工作;使用抽头数量表示延迟线的延迟,共512个抽头,CNTVALUEIN、CNTVALUEOUT总线表示抽头数量;
使用TIME模式时,使用IDELAYCTRL,REFCLK_FREQUENCY时钟频率必须与IDELAYCTRL的时钟频率相同,在修改延迟线时必须先拉低EN_VTC管脚,在校准逻辑未工作的情况下进行延迟线的修改,修改完毕后EN_VTC置高;
UPDATE_MODE:更新模式,与IDELAYE3的更新模式相同,保持默认的的ASYNC即可;
l ODELAYE3使用:
---DELAY_FORMAT为COUNT:
FIXED模式:
固定延迟模式,原语加载DELAY_VALUE种的值作为抽头值,范围0-511,工作时EN_VTC保持为低电平,不补偿校准;
VARIABLE模式:
可变延迟线模式,可以使用INC=1&CE=1递增抽头,INC=0&CE=1递减抽头;
操作步骤如下,首先保持EN_VTC为低电平:
1 等待至少10个周期;
2 使用CE和INC递增递减延迟线;
3 等待至少5个时钟周期;
VAR_LOAD模式:
可从CNTVALUEOUT总线读取抽头数量,可以通过INC&CE或LOAD&CNTVALUEIN更改延迟;
具体通过LOAD&CNTVALUEIN更改延迟执行步骤可以参照前述IDELAYE3种COUNT模式下VAR_LOAD模式的更改延迟线的操作步骤,两者可通用;
---DELAY_FORMAT为TIME:
FIXED模式:
固定延迟模式,原语加载DELAY_VALUE种的值作为总延时,单位为ps,工作时EN_VTC保持为高电平,一直开启补偿校准;
VARIABLE模式:
可变延迟线模式,可以使用INC=1&CE=1递增抽头,INC=0&CE=1递减抽头;
操作步骤如下:
1 拉低EN_VTC管脚,关闭补偿校准;
2 等待至少10个周期;
3 使用CE和INC递增递减延迟线;
4 等待至少15个时钟周期;
5 拉高EN_VTC管脚,开启补偿校准;
VAR_LOAD模式:
可从CNTVALUEOUT总线读取抽头数量,可以通过INC&CE或LOAD&CNTVALUEIN更改延迟;
具体通过LOAD&CNTVALUEIN更改延迟执行步骤可以参照前述IDELAYE3种TIME模式下VAR_LOAD模式的更改延迟线的操作步骤,两者可通用;
l 仿真查看:
ODELAYE3的延时逻辑基本可以使用之前IDELAYE3的延时逻辑,
COUNT模式下:
递增:
递减:
动态加载:
抽头0延时0.144ns:
抽头500延时2.144ns,仿真单tap延时4ps;
同样,COUNT模式实际使用时,只看抽头数量,由于没有补偿校准,所以延时时间没有办法确定;
TIME模式下:
仿真结果与COUNT模式基本一致;
这里上板看下抽头数量:
使用VU+的芯片,设置TIME模式,FIXED模式,
从上述图中可以看出,
延时0ps,抽头值为0,
延时500ps,抽头值为145,
延时1100ps,抽头值为323,
Tap延时 = 1100/323 = 3.4056ps
Tap延时 * 145 = 493ps ,接近500ps;
当延时0ps时可以看到,抽头值为0,而之前IDELAYE3设置0ps延时的时候,抽头值会有一个45-65的抽头值Align_Delay,可以看到ODELAYE3没有这个Align_Delay了,
由于输入延迟执行BISC时,需要消除内部偏差并补偿***个捕获触发器的输入路径的时钟和数据插入延迟之间的内部偏差,也就是IDELAYE3的输入数据和内部捕获时钟是异步的,两者的路径有偏差,需要align_delay去补偿,这样采样时才能更稳定,
而ODELAYE3的输入数据是在fpga内部产生的,是同步的,不需要添加额外的补偿align_delay即可直接被驱动输出;
本文章由威三学院出品
对课程感兴趣可以私信联系

京公网安备11022902000513号
