码规则。
图9 IMX122 LVDS模式输出时序
图10 IMX122 12-bit 2通道输出编码格式 2.3 设计思路和模块结构
Slave模式下工作的CMOS在XVS和XHS的同步下按照固定时序稳定输出LVDS图像数据。LVDS串行数据按照一定的方式进行编码,接收模块应先将串行数据解码恢复成为并行数据,再根据数据的排列方式格式化输出。因此,整个模块可以划分为时序同步、LVDS接收解码(串转并)和数据格式化输出三个部分。整个LVDS接收模块的结构如图11所示。
图11 LVDS接收模块顶层图
① CMOS输入参考时钟(INCK)为37.125MHz; ② CMOS输出LVDS数据为445.5MHz SDR型;
③ 时序发生器由74.25MHz发生30fps的XVS、XHS信号;
④ LVDS数据接收解码模块将数据恢复为8bit@55.6875MHz并行格式(DATA[7:0]);
⑤ 格式化输出模块通过搜索同步头的状态确定是否发出bit_slip,并根据CMOS的数据格式和同步信号格式化输出12bit@74.25MHz像素数据(PIX_DATA[11:0]);
⑥ IDELAYCTRL以Ref_clk为基准对整个IO BANK进行输入延时控制。 2.3.1 时序同步
同步时序由内部74.25MHz计数产生。按照图7所示时序即可。 2.3.2 LVDS接收解码
LVDS接收的主要工作是将串行的数据转为并行数据并进行自动相位调节,移位寄存器抽头调整(Bitslip)。Xilinx Artix7系列FPGA提供串转并模块ISERDES和IO延时模块IODELAYE2,ISERDES性能可在415Mb/s~1200Mb/s之间,IODELAYE2的延时参考时钟可以是200MHz(1tap≈78ps)或300MHz(1tap≈52ps)。
(1)Artix7 FPGA时钟特性
在Artix7系列器件里,MMCM可驱动BUFIO、BUFR、BUFH和BUFG,PLL只能驱动BUFH和BUFG。ZYNQ-7020采用Artix7 Speed-1器件,时钟网络的最高性能如下表5所示。 表5 Artix7 Speed-1 器件时钟性能
FPGA Artix7 Speed-1 (2)LVDS接收时钟选择 ①LVDS解码串行参考时钟选择
BUFG 464MHz BUFH 464MHz BUFR 315MHz BUFIO 600MHz 从表1可以知道,采用BUFG最高时钟性能为464MHz。IMX122 1080P串行模式下两通道LVDS每通道的输出数据率为445.5Mbps(SDR),接近BUFG的极限值,因此这里作一个变通处理,使用222.75MHz时钟按照DDR方式对串行数据进行采样。 ②IODELAYE2 延时参考时钟选择
延时参考时钟选择的原则是在LVDS数据时钟周期内,可调节的Tap数尽量的多。IMX122输出的数据周期为2.245ns,调节一个周期采用200MHz参考时钟需要28taps,采用300MHz参考时钟需要43个Taps,而IODELAYE2的调节Tap数为0~31,故只能选择200MHz的参考时钟。 (3)LVDS数据接收模块时钟
因CMOS IMX122不输出LVDS bit时钟,FPGA使用内部时钟来接收解码LVDS数据。如图12所示,与LVDS相关的时钟由同一个MMCM产生以保证其相位的一致性。其中: ① 37.125MHz,为CMOS工作参考时钟;
② 55.6875MHz,提供给IODELAYE2.C、ISERDES2.CLKDIV、补偿状态机及解码后的字节数据参考时钟; ③ 74.25MHz,产生30fps的CMOS同步参考时序和12bit像素参考时钟; ④ 222.75MHz,以DDR模式接收的DDR位参考时钟;
图12 LVDS数据接收模块结构
IMX122输出两路LVDS数据,每个通道的接收逻辑相同,对每一通道而言,数据流路径如下:
a)LVDS差分对通过IBUFDS_DIFF_OUT,得到位数据(记为Master)及与其反相的数据(记为Slave); b)Master和Slave分别进入各自的IODELAYE2和ISERDES2得到各自的并行数据送到补偿算法状态机进行动态相位调整并反馈各自的延时值到IODELAYE2。根据IMX122的LVDS编码特点,ISERDES2按照1:8作串并转换最为合适;
c)数据格式化输出模块根据查找Sync Code的情况调整bitslip; d)补偿模块根据数据调整的情况输出解码后的8-bit并行数据。 2.3.3 动态相位补偿 动态相位补偿原理如下:
① 初始化时,Master数据延时假定设为数据眼图的中间位置,Slave和Master的延时相隔半个数据周期。 ② 在Master和Slave的数据不全为零或不全为壹时启动动态相位补偿算法。相位补偿的基本原理是:如果Master和Slave采样到的数据相同,则说明采样太靠后,延时减少一个Tap(如图13[a]);如果Master和Slave采样到的数据不同,则说明采样点太靠前,延时增加一个Tap(如图13[b])。
图13采样点延时示意图
③如果延时Tap值为最小或最大位置时,则交换Master和Slave的的参考关系,同时输出数据作相应调整;
2.3.4 数据格式化输出
该模块的工作是将收到的串转并数据的基础上搜索Sync Code、并组织成12-bit的像素数据按照给定时序格式化输出。 (1)Sync Code搜索
Sync Code搜索采用的策略是,逻辑在不停的查找在一帧数据里是否存在图3-2所示的的特定数据,如果这些同步码都能找到,则表示接收逻辑串转并的输出位顺序正常,不再需要bitslip;若没有找到全部的同步码,则在下一帧开始的时候(XVS上升沿)给出一个bitslip脉冲调整输出,直到找到完整的Sync Code。
两路LVDS通道分别单独进行Sync Code搜索,若32次bitslip后任然没有找到Sync Code,则报告CMOS输出错误。 (2)格式化输出
格式化输出模块完成将CMOS输出的数据解码成12-bit Pixel数据并按照视频格式时序输出,结构如图14所示。
图14 格式化输出逻辑结构
对格式化输出的详细实现过程这里不赘述。 2.3.5 接收模块顶层文件描述
IMX122-LVDS接收模块由4个文件构成,分别是imx122_lvds_rev_v1_0、lvds_data_rx、rev_data_format_v1_0和imx122_slvsyn_timing_v1_0构成,它们的层析结构如图15所示。
图15 LVDS接收模块文件结构
注:蓝色的imx122_slvsyn_timing_v1_0不属于LVDS接收内容,但CMOS在SLAVE模式下必须由它提供同步信号后才能正常输出。