本帖最后由 haoxingheng 于 2020-1-12 23:08 编辑
Zynq高速串行CMOS接口的设计与实现作者:hello,panda
[受论坛对发帖的字数限制,本文分为上下两部分,本篇为上部分]。现在CMOS传感器的分辨率越来越大,对应的,对数据传输接口的要求也越来越高。根据熊猫君有限的实现和调试经验,基本上遇到了:①多通道HiSPi接口:主要是Aptina(现已经被安森美收购),常用的有1080P60的AR0331(3.1M),3664×2748P15的MT9J003,3984×2712P80(开窗输出最高可达1200fps)的AR1011等;②多通道LVDS接口:主要有索尼系列、安森美的Python系列、国产如长光辰芯和德国viimagic系列等,至少熊猫君用过的IMX172/IMX122/IMX185/IMX236、安森美Python全系列和VII9222等都是LVDS输出;③MIPI接口:多用于手机,一些监控用的CMOS如Sony IMX185、OV14810等也带;④CCIR656:一般低分辨率的会带CCIR656接口,也有一些厂家的高分摄像头也带,比如OV14810;⑤并行接口:较早设计的CMOS许多都是直接并口输出,比如Aptina的MT9M031、MT9J003都带有并口输出;熊猫君在这里想讨论的是前三种接口的实现,它们是业界应用最广泛而且对FPGA资源有着共性要求。无论是HiSPi、LVDS还是MIPI,其核心思想就是要实现将高速串行信号恢复成并行数据。这将会用到XilinxFPGA IOB上的一个重要的资源——ISERDES。实现串行信号的并行化,光有ISERDES还不行,还需要用到IOBANK上的延时模块IDELAYCTRL和IOB上的IODELAYE以及相关的相位训练算法。
1 Xilinx的IO资源本节对用到的IO资源作简要的介绍。
1.1 IDELAYCTRL资源在电压、温度等因素变化时,可能会影响到系统的时序,此时IDELAYCTRL模块就可以连续补偿时钟域内所有个体的delay taps (IDELAY/ODELAY)。如果使用了IOB上的IDELAY或ODELAY资源,那么就必须使用IDELAYCTRL资源。请注意,整个IO BANK里面只有一个IDELAYCTRL。IDELAYCTRL很重要的一个输入项就是参考时钟REFCLK,补偿时钟域内所有模块的时序参考,这个时钟必须由BUFG或BUFH驱动。REFCLK必须保证在FIDELAYCTRL_REF+IDELAYCTRL_REF_PRECISION(MHz)ppm才能保证IDELAY/ODELAY的延时分辨率:(TIDELAYRESOLUTION=1/(32x 2 x FREF))
1.2 IDELAYE2逻辑IDELAYE2逻辑是一个31抽头的循环延时补偿模块,对输入的信号进行指定分辨率的延时,FPGA可以直接访问。Tap延时分辨率由IDELAYCTRL的参考时钟提供持续补偿。图(1)是IDELAYE2接口示意图,表(1)是对这些接口的描述,表(2)是对逻辑参数的描述。
图(1)IDELAYE2接口示意图。
表(1)IDELAYE2接口描述 端口名 方向位宽描述CI1当使用VARIABLE, VAR_LOAD或 VAR_LOAD_PIPE模式下的时钟输入,必须是由BUFG或BUFR驱动,当使用SelectIO资源时,必须和它的时钟源相同。REGRSTI1复位pipeline寄存器,仅在VAR_LOAD_PIPE模式下有效LDI1VARIABLE模式:加载预编程值; VAR_LOAD模式:加载CNTVALUEIN值; VAR_LOAD_PIPE模式:加载当前pipeline寄存器的值。INCI1INC/DEC增加,减少的Tap数CEI1使能INC和DEC功能,只在VARIABLE, VAR_LOAD或 VAR_LOAD_PIPE模式下有效;当CE保持为高的时候,每一个C周期都增加或减少一个TIDELAYRESOLUTION的时延。CINVCTRLI1动态翻转C的极性,当使用该功能时,需禁止IDELAY control引脚2个cycle。CNTVALUEINI5来自FPGA逻辑的动态Tap值IDATAINI1来自IBUF的数据输入,输出可驱动FPGA逻辑、ILOGICE和ISERDESEDATAINI1来自FPGA逻辑的数据输入,输出不可驱动IOBLDPIPEENI1使能pipeline寄存器加载数据DATAOUTO1延时输出的数据CNTVALUEOUTO5Tap值输出,用于FPGA监测
这个容易,米联客的开发板都有配套!
一周热门 更多>