LVDS系列14:Xilinx Ultrascale系可编程输入延迟(四)
本节讲解Ultrascale IDELAYE3的TIME模式仿真;
TIME模式下参数和时序:
必须例化IDELAYCTRL,IDELAYCTRL时钟频率与REFCLK_FREQUEMCY参数相同;
有温度电压补偿,EN_VTC在修改抽头值时拉低,修改完毕后拉高;
FIXED延时模式:
DELAY_TYPE设置为FIXED,TIME模式下DELAY_VALUE参数设置的值为延时值,单位为ps,设置范围Ultrascale器件01250,Ultrascale+器件01100,且配置后不能更改;
VARIABLE延时模式:
DELAY_TYPE设置为VARIABLE,选择可变抽头延迟线, INC=1&CE=1递增,INC=0&CE=1递减;
执行步骤:
1 设置EN_VTC=0;
2 等待至少10个时钟周期;
3 使用CE和INC端口来递增或递减延迟线;
4 等待至少15个时钟周期;
5设置EN_VTC=1;
VAR_LOAD延时模式:
DELAY_TYPE设置为VAR_LOAD,可以使用INC和CE来更改延迟线,还可以通过CNTVALUEIN总线端口更改抽头延迟线,通过CNTVALUEOUT可以读取当前使用的抽头数量;
执行步骤:
1 等待IDELAYCTRL原语的RDY接口拉高;
2 设置EN_VTC=0;
3 等待至少10个时钟周期;
4 读取CNTVALUEOUT值并加载到寄存器中;
5 检查是否需要更新延迟线;
6 计算要写入延迟线的新延迟值,延迟线每次更新的范围在1~8;
7 将新的延迟值放在CNTVALUEIN总线上;
8 等待1个时钟周期,将LOAD置1保持1个周期, 更新值稳定1个周期后再拉高LOAD;
9 若要多项更新执行该项,等待5个时钟周期;
10 若要多项更新执行该项,将新的延迟值放在CNTVALUEIN总线上;
11 若要多项更新执行该项,等待1个时钟周期,将LOAD置1保持1个周期;
12 若要多项更新执行该项,跳转至步骤9继续执行;
13 等待至少10个时钟周期;
14 设置EN_VTC=1;
TIME模式仿真:
FIXED模式:
IDELAYE3在仿真时,只有在EN_VTC拉低,也就是原语补偿功能关闭时,输出的CNTVALUEOUT值才是一个正常值,当EN_VTC拉高,补偿功能开启时,CNTVALUEOUT输出为红色的不定态的值,出现这种情况的原因大概是因为原语的仿真没有实现补偿功能,所以仿真时补偿功能开启就无法给出一个确定值,所以显示不定态;
但是IDELAYE3在实际板子上运行时,无论是否开启补偿功能,CNTVALUEOUT都能输出正常值;
DELAY_VALUE设置延时0ps:
延时0.144ns;
DELAY_VALUE设置延时1100ps:
延时1.244ns=1100ps+0.144ns;
想要查看两者此刻的抽头值,尝试拉低EN_VTC:
此时原语没有连接除en_vtc外的控制管脚;
0ps:
1100ps:
可以看到,0ps时抽头为0,延时0.144ns,1100ps时抽头为275,延时1.244ns;
可以看到在设置为0ps时,有一个固有的延时0.144ns,
仿真时每个抽头延时 (1.244ns-0.144ns)/(275-0)=4ps,
但是仿真不能实现TIME模式下的补偿功能,也没有实现前述的TIME模式下的时钟/数据对齐延迟Align_Dealy,而且单抽头值也不会受到工艺电压温度的影响变化,所以仿真仅作为时序的参考,仿真的延时数值不能作为具体参考;
VARIABLE模式:
递增:
递减:
单次:
可以看到单次递减这里,EN_VTC拉低,CNTVALUEOUT才输出正常值;
VAR_LOAD模式:
从初始延时0ps开始,抽头值每次设置增加50,
下一节讲解TIME模式的延时细节;
本文章由威三学社出品
对课程感兴趣可以私信联系