李雁
摘要:介绍了基于XILINX公司FPGA的12G-SDI收发器的实现,接收的是SDI信号,发送的是光纤信号。使用FPGA内部的GTH实现高速串并转换,使用FPGA中的RAM实现数据缓存,使用GTH的TX Phase Interpolaror PPM Controller实现发送时钟调整。
关键词:FPGA;12G-SDI;GTH;时钟调整
中图分类号:TN929.11 文献标识码:A 文章编号:1007-9416(2020)06-0022-02
0 引言
SDI接口是数字分量串行接口,是由SMPTE组织制定的一种数字视频接口标准。SMPTE组织在2015年正式发布了串行数据接口的6G-SDI和12G-SDI。6G-SDI面向2160p30的应用,对应每秒30帧画面的刷新。而12G-SDI面向2160p60的应用,对应着每秒60帧画面的刷新。使用12G-SDI进行较高速的数据传输会增加传输介质中的损耗,并且减少视频源与接收端之间的总可支持电缆长度。因此需要其它方式实现远距离的传输[1]。为此。本文介绍了一种12G-SDI信号的光纤传输方案。
1 FPGA内部实现架构
FPGA采用XILINX公司的XCKU035-FBVA676-2,该芯片的GTH高速串行收发器能支持我们系统所需的11.88G速率,12G-SDI信号經过TI公司的LM1219电缆均衡器后送入FPGA,在FPGA中必须使用高速串行收发器对高速串行信号进行串并转换,时钟恢复[2]。转换出来的并行数据缓存在内部BLOCK RAM中,由发送GTH的时钟进行读取。由于发送GTH的本地晶振与接收GTH恢复的时钟不同源,所以需要对发送GTH的时钟进行相位调整,以便收发时钟同步。发送GTH的输出连接到SFP进行电光转换,最终通过光纤连接到远端。系统框图如图1所示。
2 FPGA内部详细设计
2.1 高速串行接口设计
使用VIVADO2018.3进行逻辑开发,在IP Catalog里选择UltraScale FPGA Transceivers Wizard,在向导中选择GTH-12G_SDI,向导会根据12G-SDI的数据结构对GTH内部进行配置。包括链路速率11.88G,参考时钟148.5M,并行数据位宽40bit,编码模式(无编码)。一般很多高速串行链路在编码模式时会使用8B/10B编码,这是因为串行数据变成并行数据后需要字符边界对齐,并且8B/10B可以把原始数据里的连续长时间0或连续长时间1编码成具有丰富时钟边沿的短时间0或1。由于SDI原始数据中有加扰器。所以不会造成长时间0或1,且8B/10B会使得带宽额外消耗25%,所以SDI系统没有使用8B/10B编码。
2.2 数据缓存设计
数据缓存在本设计中使用RAM,而不是FIFO。因为后续模块要根据读写地址差值进行发送时钟调整。同调用GTH类似,在IP Catalog里选择Block Memory Generator,设置数据深度和数据宽度,再此数据深度设置为256,数据宽度设置为40bit。只有地址控制需自行编写代码设计。首先只允许写。不允许读,当写地址写到RAM缓存的一半时,才允许读。这样做是为了拉开读写地址距离,避免收发时钟抖动造成同时读空或写满。类似的做法还有乒乓操作,但需要两个RAM。
2.3 时钟调整设计
设计思路是当数据缓存读写地址差值拉大时,说明写时钟快,读时钟慢,此时就应该加快读时钟,反之就应该减缓读时钟。由于读写时钟域不同,直接对两者进行比较会出现亚稳态,即采样时钟采集到数据的跳变沿。这样会带来数据判断错误,从而误判读写地址差值。例如二进制11111111加1变为00000000的时候,每个bit都在跳变,所以可能被采集判断成任何一个8位二进制数,误差不可控。由于时钟域不同,所以出现这种采集到跳变沿的情况是不可避免的。但是可以采用格雷码进行补救。格雷码的特点是每次二进制自然码增加1,格雷编码后只有一个bit位翻转。先对写地址进行格雷编码,然后使用读地址进行采集,这样即使采集到写地址跳变沿,也只会造成1个偏差,即采集值为真实地址加1或减1。之后在读时钟域对写地址进行格雷解码,转换为自然二进制码。从而在读时钟域比较读地址和写地址的差值,误差仅为1。
时钟调整设计采用状态机实现,如图2所示。
由于我们的RAM深度是256,且当写入128个数据后才允许读,所以读写差值理想状态是128。由于接收GTH恢复的时钟(RAM写时钟)本身会抖动,所以即使收发时钟同源,读写差值也不会永远为128,所以不能简单地以读写差值不为128就进行发送GTH时钟(RAM读时钟)调整。当读写地址差值大于192时,偏移了理想差值64个时钟,此时应该进行加快读时钟的操作,且留有64个时钟的余量。以免调整不够迅速,导致RAM写满。通过加快读时钟后,读写地址差值会逐渐减小,回到理想差值128,此时状态机跳回idle,不再进行速率调整。随着时间积累,读写差值会重新变大,状态机跳转重复上述过程。当写时钟比读时钟慢时,读写地址差值逐渐变小,小于64时,进行发送时钟减缓状态,地址差值逐渐恢复到128后,回到idle状态,不再进行时钟调整。同理,随着时间积累,读写差值会重新变小,状态机跳转重复上述过程。
2.4 GTH发送时钟控制器
GTH模块中有个TX Phase Interpolaror PPM Controller,通过该控制器能调节发送时钟,当前级状态机进入到时钟加快状态时,设置该控制器的时钟加快功能,从而使得发送时钟变快,在前级状态机进入到时钟减慢状态时,设置该控制器的时钟减慢功能,从而使得发送时钟减慢。在前级状态机进入idel状态时,关闭该控制器,使之进入power down状态,减小耗电。
3 结语
利用FPGA的GTH实现收发器,省去了外部收发器芯片,且利用GTH时钟控制器,省去了外部PLL芯片,整个系统硬件得以简化,从而设备可以做成一个小盒子,方便携带。内部RAM的缓存空间可根据实际场景增大或者减小。增大RAM能允许更大的时钟抖动,且对发送时钟进行更加细微的调整,使得接收机恢复的时钟更为稳定。减小RAM能降低系统延时,使用分布式RAM来节省FPGA资源消耗,更为节能。
参考文献
[1] 嘉恒图像,真4K(12G/60Hz SDI)信号的采集压缩传输技术[Z].https://www.sohu.com/a/324469589_120200283,2019-07-03.
[2] Jamille Estonilo,Three things to consider when upgrading to 4K Ultra HD 12G-SDI interfaces[Z].http://e2e.ti.com/blogs_/b/analogwire/archive/2016/04/13/three-things-to-consider-when-upgrading-to-4k-ultra-hd-12g-sdi,2016-04-13.