IODelay是Xilinx FPGA IO结构内,一个很有用途的单元,至少从Spartan6/Virtex5年代开端,就现已集成了这一技能,在许多高速接口互联时,咱们都或许找到IODelay的用武之地。在最新的Ultrascale系列FPGA中,IODelay这一单元的详细用法,跟7Series中比较产生了一些改变。本文总结下,供读者参阅。
1. 7Series FPGA中IODelay的用法
在7Series中,IODelay都需求合作IOdelayCtrl来运用。其推迟步进阶数总共为64个Taps,每个Tap精度是tREFCLK/64。REFCLK供给3种设置,分别是200Mhz,300Mhz,和400Mhz,所以相对应的推迟精度分别为:5ns/64=78ps,3.333ns/64=52ps,2.5ns/64=39ps。
2.在Ultrascale FPGA中
比较7Series,最大的区别是,IODelayCtrl补偿时,针对的是整个delayline,而不是单个的delay tap element。
IODelay供给了2种运用形式供用户挑选,分别是TIME Mode和COUNT Mode
在TIME Mode中,推迟是加入了温度补偿的,因而推迟值比较准确。在COUNT Mode中,不合作运用IDelayCtrl,每个TAP的推迟值在2.5ps-15ps之间随机不固定。一般咱们都会运用TIME Mode,因而要点说下这个Mode的运用办法。
在TIME Mode下,咱们能够在IP装备初始时指定推迟的详细数值,单位是ps,规模是0-1250ps。这种形式对应的DELAY_TYPE特点是FIXED。
如果在TIME Mode下,咱们想动态的调整IODELAY的推迟值该怎么办呢?办法如下,首要需求把DELAY_TYPE特点装备成VARIABLE或许VAR_LOAD,然后遵从以下过程:
①. Deassert (Low) the EN_VTC pin.
②. Wait a minimum of 10 clock cycles.
③. Use the CE and INC ports to increment or decrement the delay line.
④. Wait a minimum of 5 clock cycles.
⑤. (Option for multiple updates) Increment or decrement of the delayline needs to be performed. Go to step 3, or else proceed to step 6.
⑥. Wait a minimum of 10 clock cycles.
⑦. Assert the EN_VTC pin.