本帖最后由 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接口描述 端口名 | | | | | | | 当使用VARIABLE, VAR_LOAD或 VAR_LOAD_PIPE模式下的时钟输入,必须是由BUFG或BUFR驱动,当使用SelectIO资源时,必须和它的时钟源相同。 | | | | 复位pipeline寄存器,仅在VAR_LOAD_PIPE模式下有效 | | | | VARIABLE模式:加载预编程值; VAR_LOAD模式:加载CNTVALUEIN值; VAR_LOAD_PIPE模式:加载当前pipeline寄存器的值。 | | | | | | | | 使能INC和DEC功能,只在VARIABLE, VAR_LOAD或 VAR_LOAD_PIPE模式下有效;当CE保持为高的时候,每一个C周期都增加或减少一个TIDELAYRESOLUTION的时延。 | | | | 动态翻转C的极性,当使用该功能时,需禁止IDELAY control引脚2个cycle。 | | | | | | | | 来自IBUF的数据输入,输出可驱动FPGA逻辑、ILOGICE和ISERDESE | | | | | | | | | | | | | | | | |
表(2)IDELAYE2逻辑参数描述 参数名 | | | | | String: FIXED, VARIABLE, VAR_LOAD或 VAR_LOAD_PIPE | | | | | | | | | | | | | | 为TRUE的时候减少输出jitter,否则减少功耗 | | | | | | Real: 190 to 210 或290 to 310 | | | | | | | | | | |
以下以VAR_LOAD模式为例说明延时的时序动作,如图(2)所示。
图(2)延时时序动作模型 a)Clock Event 0: 在LD有效前,CNTVALUEOUT输出为未知值; b)Clock Event 1: 在C的上升沿采样到LD有效,此时DATAOUT延时CNTVALUEIN指定的延时Taps,改变tap Setting到Tap2,CNTVALUEOUT更新到新的Tap值; c)Clock Event 2: INC和CE有效,此时指定了增量操作,Tap值加1,DATAOUT输出从Tap2更新到Tap3,CNTVALUEOUT更新到新的Tap值; d)Clock Event 3 LD有效,DATAOUT输出延时更新到Tap10,CNTVALUEOUT更新到新的Tap值。 1.3 ISERDESE2逻辑输入串转并逻辑可以看做是OSERDESE2的逆过程,在SDR模式下可支持2-、3-、4-、5-、6-和7-的串并转换,在DDR模式下可支持2-、4-、6-、8-的串并转换,级联DDR模式下还可扩展到10-和14-。每一个ISERDESE2包括: a)专门的串并转换器; b)Bitslip子模块用于源同步接口; c)专用的可支持strobe-based的存储接口。 图(3)是ISERDESE2的结构示意图。表(3)是ISERDESE2接口描述,表(4)示ISERDESE2的参数描述。 图(3)ISERDESE2结构示意图 表(3) ISERDESE2 端口名 | | | | | | | | | | | | | | | 级联输出,连接到IOB或Slave的SHIFTIN1 | | | | 级联输出,连接到IOB或Slave的SHIFTIN2 | | | | | | | | | | | | | | | | | | | | 时钟输入使能,NUM_CE=1时,CE2不使用;当NUM_CE=2时,CE1使能ISERDESE2的前1/2的CLKDIV周期,CE2使能ISERDESE2的后1/2的CLKDIV周期 | | | | | | | | | | | | 高速时钟输入,用于高速存储器,只有在INTERFACE_TYPE为MEMORY时才有效 | | | | 反相的高速数据输入,用于高速存储器,只有在INTERFACE_TYPE为MEMORY时才有效 | | | | | | | | | | | | | | | | 反馈输入,OLOGICE或OSERDESE的输出反馈 | | | | | | | | |
表(4)ISERDESE2的参数描述 参数名 | | | | | | | | | DDR:4,6,8,10,14 SDR:2,3,4,5,6,7,8 | | | | | | 为真时使能DYNCLKDIVSEL反相和禁止CLKDIV的HDL反相 | | | | 为真时使能DYNCLKDIVSEL反相和禁止CLK/CLKB的HDL反相 | | String: MEMORY, MEMORY_DDR3, MEMORY_QDR, OVERSAMPLE或 NETWORKING | | | | | | | | | | | | | | | | | | | | | | |
(1) 时钟方案 CLK和CLK_DIV必须是严格对齐的时钟,虽然允许使用BUFIO/BUFR,但任然有可能存在相位问题。图(5)时采用BUFIO/BUFR的方案。
图(5)采用BUFIO/BUFR的时钟方案 一般的,根据接口类型的差异,时钟必须满足以下的约束: ①networking interface a)CLK→BUFIO;CLKDIV→BUFR; b)CLK→MMCM/PLL;CLKDIV→和CLK相同的MMCM/PLL的CLKOUT[0:6]的输出,使用MMCM时CLK和CLKDIV必须使用相同的驱动BUF; c)CLK→BUFG;CLKDIV→BUFG。 ②MEMORY Interface Type a)CLK→BUFIO, OCLK→BUFIO,或CLKDIV→BUFR; b)CLK→MMCM或PLL, OCLK→MMCM,或CLKDIV由同一个MMCM/PLL的CLKOUT[0:6]驱动; c)CLK→BUFG,CLKDIV→不同的BUFG。 OCLK和CLKDIV的输入相位必须是严格对齐的,CLK和OCLK之间不要求相位关系。From CLK to OCLK的时钟域必须进行补偿。 其他接口类型的时钟方案参考文档UG471。 (2) BitSlip子模块 BitSlip用于调整并行寄存器输出串行数据的位置。在SDR模式下,每一个BitSlip脉冲让输出pattern的数据左移1bit;在DDR模式下,第一个BitSlip右移1bit,第二个BitSlip左移3bit,依次进行,移动规律如图(6)所示。BitSlip一定是和CLKDIV同步的一个脉冲。
图(6)BitSlip训练移位规律 在上面所介绍的资源中,IDELAYE2是动态相位对其训练的神器,ISERDESE2实现串并转换,其Bitslip功能是实现并行化数据对齐的关键。
|