打印
[FPGA]

Zynq高速串行CMOS接口的设计与实现[上]

[复制链接]
1755|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 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        XilinxIO资源
本节对用到的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接口描述
  
端口名
  
方向
位宽
描述
C
I
1
当使用VARIABLE, VAR_LOAD或  VAR_LOAD_PIPE模式下的时钟输入,必须是由BUFG或BUFR驱动,当使用SelectIO资源时,必须和它的时钟源相同。
REGRST
I
1
复位pipeline寄存器,仅在VAR_LOAD_PIPE模式下有效
LD
I
1
VARIABLE模式:加载预编程值;
  
VAR_LOAD模式:加载CNTVALUEIN值;
  
VAR_LOAD_PIPE模式:加载当前pipeline寄存器的值。
INC
I
1
INC/DEC增加,减少的Tap数
CE
I
1
使能INC和DEC功能,只在VARIABLE, VAR_LOAD或  VAR_LOAD_PIPE模式下有效;当CE保持为高的时候,每一个C周期都增加或减少一个TIDELAYRESOLUTION的时延。
CINVCTRL
I
1
动态翻转C的极性,当使用该功能时,需禁止IDELAY control引脚2个cycle。
CNTVALUEIN
I
5
来自FPGA逻辑的动态Tap值
IDATAIN
I
1
来自IBUF的数据输入,输出可驱动FPGA逻辑、ILOGICE和ISERDESE
DATAIN
I
1
来自FPGA逻辑的数据输入,输出不可驱动IOB
LDPIPEEN
I
1
使能pipeline寄存器加载数据
DATAOUT
O
1
延时输出的数据
CNTVALUEOUT
O
5
Tap值输出,用于FPGA监测


表(2)IDELAYE2逻辑参数描述
  
参数名
  
值域
默认值
描述
IDELAY_TYPE
String: FIXED,
  
VARIABLE,
  
VAR_LOAD或
  
VAR_LOAD_PIPE
FIXED
定义延时类型
DELAY_SRC
String: IDATAIN,
  
DATAIN
IDATAIN
选择延时源
IDELAY_VALUE
Integer: 0 to 31
0
固定延时值和其他模式的初值
HIGH_PERFORMANCE_MODE
Boolean: FALSE 或TRUE
TRUE
为TRUE的时候减少输出jitter,否则减少功耗
SIGNAL_PATTERN
String:DATA, CLOCK
DATA
指定时序分析工具按时钟还是数据路径进行分析
REFCLK_FREQUENCY
Real: 190 to 210 或290 to 310
200
设置静态时序分析的Tap值
CINVCTRL_SEL
Boolean: FALSE or TRUE
FALSE
设置是否动态转换C的极性
PIPE_SEL
Boolean: FALSE or TRUE
FALSE
选择是否使用Pipline模式
以下以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
  
端口名
  
方向
位宽
描述
Q[8:1]
O
8
并行寄存器数据输出,最先进入的串行数据出现在Q8
O
O
1
组合数据输出,DDLY或D未通过寄存器直接输出。
SHIFTOUT1
O
1
级联输出,连接到IOB或Slave的SHIFTIN1
SHIFTOUT2
O
1
级联输出,连接到IOB或Slave的SHIFTIN2
D
I
1
来自IOB的串行数据输入
DDLY
I
1
来自IDELAYE2的串行数据输入
CLK
I
1
高速时钟输入,用于采样高速串行数据流
CLKB
I
1
第二高速时钟输入,仅用于MEMORY_QDR模式
CE1, CE2
I
1/1
时钟输入使能,NUM_CE=1时,CE2不使用;当NUM_CE=2时,CE1使能ISERDESE2的前1/2的CLKDIV周期,CE2使能ISERDESE2的后1/2的CLKDIV周期
RST
I
1
高有效复位
CLKDIV
I
1
分频时钟输入,用于同步并行数据输出和控制信号
OCLK
I
1
高速时钟输入,用于高速存储器,只有在INTERFACE_TYPE为MEMORY时才有效
OCLKB
I
1
反相的高速数据输入,用于高速存储器,只有在INTERFACE_TYPE为MEMORY时才有效
BITSLIP
I
1
BitSlip调节脉冲
SHIFTIN1
I
1
级联模式下连接到Master的SHIFTOUT1
SHIFTIN2
I
1
级联模式下连接到Master的SHIFTOUT2
OFB
I
1
反馈输入,OLOGICE或OSERDESE的输出反馈
DYNCLKDIVSEL
I
1
动态选择CLKDIV的相位使能位
DYNCLKSEL
I
1
动态选择CLK/CLKB的相位使能位
表(4)ISERDESE2的参数描述
  
参数名
  
阈值
默认值
描述
DATA_RATE
String: SDRor DDR
DDR
定义输入的数据类型
DATA_WIDTH
DDR:4,6,8,10,14
  
SDR:2,3,4,5,6,7,8
4
定义转换位宽
DYN_CLKDIV_INV_EN
Boolean: TRUE或FALSE
FALSE
为真时使能DYNCLKDIVSEL反相和禁止CLKDIV的HDL反相
DYN_CLK_INV_EN
Boolean: TRUE或FALSE
FALSE
为真时使能DYNCLKDIVSEL反相和禁止CLK/CLKB的HDL反相
INTERFACE_TYPE
String: MEMORY,
  
MEMORY_DDR3,
  
MEMORY_QDR,
  
OVERSAMPLE或
  
NETWORKING
MEMORY
选择ISERDESE2的工作模型
NUM_CE
Integer: 1或2
2
定义使用时钟使能信号的个数
OFB_USED
Boolean: TRUE或FALSE
FALSE
定义是否使用OFB功能
SERDES_MODE
String: MASTER或SLAVE
MASTER
定义主从模式
INIT_Q1~Q4
Binary: 0 或1
0
设置采样寄存器的初始值
SRVAL_Q1~Q4
Binary: 0 或1
1
设置采样寄存器的复位值
(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功能是实现并行化数据对齐的关键。

使用特权

评论回复

相关帖子

沙发
zhangmangui| | 2020-1-15 21:52 | 只看该作者
请教一下   zynq接触摸屏的方案有吗

使用特权

评论回复
板凳
haoxingheng|  楼主 | 2020-1-16 22:56 | 只看该作者
zhangmangui 发表于 2020-1-15 21:52
请教一下   zynq接触摸屏的方案有吗

这个容易,米联客的开发板都有配套!

使用特权

评论回复
地板
zhangmangui| | 2020-1-17 10:18 | 只看该作者
haoxingheng 发表于 2020-1-16 22:56
这个容易,米联客的开发板都有配套!

好的  我看看  非常感谢

使用特权

评论回复
5
cooldog123pp| | 2020-1-26 12:54 | 只看该作者
最近也在学习这些。默默的关注楼主,多谢楼主分享这么好的帖子,新年快乐。

使用特权

评论回复
6
haoxingheng|  楼主 | 2020-2-6 14:10 | 只看该作者
cooldog123pp 发表于 2020-1-26 12:54
最近也在学习这些。默默的关注楼主,多谢楼主分享这么好的帖子,新年快乐。 ...

感谢关注

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:Hello,Panda

29

主题

63

帖子

5

粉丝