吕波+张涌+石永彪+黄侃
摘 要: 在Xilinx的Virtex5系列FPGA中,基于高速串行通信技术的GTP_DUAL硬核包含了两个收发器,而Xilinx提供的Aurora IP软核代码如果只例化一个通道,将占用整个硬核资源,造成另外一个通道不能再被使用,致使FPGA资源利用率降低。通过对Aurora IP软核代码分析,在GTP封装代码中对未使用的通道添加和修改相应信号,并追加时钟模块、发送模块和接收模块等,实现了一个GTP_DUAL中两个收发器的独立使用,从而提高了FPGA资源利用率,降低了开发成本。该方案已在某重大军工项目中得到了应用。
关键词: Virtex5 FPGA; GTP硬核; 串行通信; 收发器; Aurora协议
中图分类号: TN911?34; TN79+1 文献标识码: A 文章编号: 1004?373X(2017)14?0124?04
Abstract: In Xilinx Virtex5 FPGA, the GTP_DUAL hardcore based on high?speed serial communication technology (Rocket IO) contains two transceivers. When the Aurora IP code provided by Xilinx is instantiated with a single channel, it will occupy the whole hardcore resources, and make the other channel no longer used and the utilization of FPGA resources reduced. Based on analysis of the Aurora IP code, some corresponding signals are added and modified in the unused channel in the GTP packaging code, and then clock module, sending module, receiving module and so on are added for independent application of the two transceivers in GTP_DUAL hardcore, utilization improvement of FPGA resources and reduction of development cost. The scheme has been applied to a major military defense project.
Keywords: Virtex5 FPGA; GTP hardcore; serial communication; transceiver; Aurora protocol
0 引 言
由于传统的并行I/O技术走线多、PCB布线难、信号间串扰大等缺陷而无法突破自身的速度瓶颈,正在被拥有更高传输速率且只需少量信号线的高速串行技术所取代[1]。Xilinx公司为使其FPGA芯片与串行传输技术更好地结合以满足市场需求,在Virtex系列FPGA中,集成了基于高速串行通信技术硬核(Rocket I/O)的多个GTP或GTX收发器模块,并在此硬核基础上开发了一款可自由使用且相对简便的点对点链路层Aurora协议[2] ,该协议支持的通信码率高達3.75 Gb/s。
在Virtex5平台上,原来的GTP收发器被集成了两个GTP收发器通道的GTP_DUAL所取代,其优点在于两个收发器共享一些资源,减少了资源占用面积和功耗。然而,在Aurora工程中,由于例化单通道时占用了整个硬核资源而导致另外一个GTP通道不能再被使用,使GTP_DUAL的利用率大大降低。比如,笔者所在研究室参与研发的某重大军工项目,其中对于红外分系统设备中的视频接口板,首先从红外成像仪接收红外图像数据,并通过GTP收发器通道分别向一块综合处理板和四块信号处理板发送图像数据进行处理,最后将处理后的图像数据输出到视频显示设备上显示,这样一块视频接口板至少需要7个GTP收发器通道。结合当前使用的FPGA芯片,内嵌4个GTP_DUAL,虽然含有8个GTP收发器通道,但由于不能单独使用,最多只能连接四块电路板。所以一般来讲,需要进行追加芯片数量,或者使用包含更多GTP_DUAL收发器通道的芯片,这无疑增加了开发成本和系统开发难度。
为此,本文针对上述缺陷,在Virtex5硬核和Aurora协议的基础上,提出一种改进方案。通过对Xilinx提供的Aurora IP软核代码进行修改,使两个GTP收发器能够独立使用并可以传输不同的协议数据,以提高FPGA资源利用率和降低系统成本。目前,该改进方案已经应用到了一些重大工程项目中。
1 GTP_DUAL硬核模块
GTP_DUAL高速串行硬核在发送端将时钟与数据合并传输,在接收端提取时钟和数据,解决了并行传输带来的时钟抖动和偏斜的问题,提高了数据传输速率,发挥了FPGA逻辑配置灵活和片内互联电磁性能优异的特点,实现了高性能、低成本的设计[3]。
在Virtex5系列FPGA中,一个GTP_DUAL硬核结构图如图1所示[4]。
两个GTP收发器GTP0和GTP1分别具有各自独立的发送模块和接收模块,并且共享包括PLL、高速串行时钟、复位控制和电源控制等重要资源,不占用FPGA其他逻辑与片上存储资源,从而减少了资源占用的面积和功耗[5]。
每个收发器由物理媒质适配层(PMA)和物理编码子层(PCS)两部分组成[6]。从应用上讲,GTP_DUAL硬核处于数据传输协议的物理层,实现最基本的数据通信。其工作过程为,在发送端按照一定的计算规则产生CRC校验码并插入到预发送的并行数据中,经过8 B/10 B编码写入发送FIFO,最后通过并/串转换器将其转换成差分数据发送出去。在接收端将接收的串行差分数据首先恢复出用于串并转换的时钟信号,并在comma检测和对齐模块的作用下,将数据进行对齐和串/并转换,最后将转换后的并行数据经过8 B/10 B解码和CRC模块校验并行输出[7]。
2 Aurora IP核双收发器独立使用
2.1 Aurora协议及其IP核
Aurora协议是一个开放、免费的链路层协议,可为私有上层协议或标准上层协议提供透明接口的串行互联协议,可用来进行点到点的串行数据传输,具有传输数据高效和简单易用的特点,为系统设计人员提供了所需要的灵活性[8]。
Aurora IP核是在Aurora协议和高速串行收发器GTP_DUAL硬核基础上研发出来的。该IP核包含了GTP_DUAL模块,且提供了简单的用户接口,极大地方便了信号的可操作性[9]。通过使用Aurora IP核,用户不必对复杂的GTP_DUAL硬核部分进行操作,而只要处理好与Aurora IP核的用户接口即可。如图2所示,Aurora IP核可以方便地实现器件间的单通道通信或多通道绑定通信。
在实际应用中,可能需要GTP0和GTP1传输不同的数据,但在当前Xilinx实现中,例化一个GTP通道的Aurora IP核后,再例化另外一个,则综合布线时会提示GTP_DUAL硬核资源已被使用而不能通过。所以本文通过生成一个单通道的参考用Aurora IP核实例,并修改相關代码以达到两个收发器能独立使用且传输不同数据的目的。
2.2 Aurora IP核实例结构
为了便于说明实现过程,本文通过Xilinx公司开发的软件工具CORE Generator 14.4,生成Aurora IP核的一个实例作为基础[10],并将参数设置为全双工模式、单通道、线速度为1.25 Gb/s,输入参考时钟为100 MHz,用户时钟62.5 MHz,发送和接收位宽都为16 b,采用帧模式的数据传输,所选通道为GTP_DUAL_X0Y4的GT0。其硬件设计工具ISE 14.4的实例层次结构如图3所示。
实例TOP层下面有6个模块,分别为clock_module,standard_cc_module,reset_logic,frame_gen,frame_check和aurora_module。其中前3个模块用于提供时钟、时钟补偿和复位等功能,frame_gen模块用于数据发送,frame_check用于数据接收,这5个模块都属于应用层,用户可以根据实际情况进行修改。aurora_module模块为物理层和链路层,实现GTP_DUAL硬核双收发器的功能,也是整个逻辑程序的核心部分,一般不允许用户修改。
2.3 Aurora IP核实例修改
由第2.2节可知,aurora_module模块实现的是GTP_DUAL硬核模块功能,是整个逻辑程序的关键,其一个GTP收发器逻辑结构如图4所示。aurora_module模块包括了5个部分,分别为TX LocalLink,RX LocalLink,Aurora_Lane,Global_Logic和GTP_Wrapper。其中,TX LocalLink模块的功能是通过LocalLink链路接口将用户数据转化为Aurora 8 B/10 B数据,然后送入Lane;RX LocalLink模块的功能是通过Lane将接收到的数据转化为LocalLink链路数据,并发送给用户接口;Aurora_Lane模块的功能是一个GTP收发器传输通道的连接,包括Lane初始化、特殊字符的产生、错误检测译码等;Global_Logic模块功能包括通道绑定、通道识别、通道错误管理和Idle空字符生成等;GTP_Wrapper模块封装了GTP_DUAL两个收发器的硬核功能模块,Xilinx只提供了该硬核的接口,具体实现逻辑属于Xilinx的商业机密。
由于生成实例时系统参数选择为单通道,收发器选择GTP0,所以在GTP_Wrapper模块中,GTP0收发器的相关信号接口已被使用,而GTP1收发器的相关信号,有的信号被空置,有的信号与一个XX_unused的寄存器连接,有的信号被连接至tied_to_ground_i或者tied_to_vcc_i。因此,实现GTP_DUAL双收发器的独立使用,就必须将GTP1收发器的相关信号建立起来。
综合以上分析,实现两个收发器独立使用必须同时将GTP0和GTP1两个收发器从GTP_Wrapper模块中连接出来,而TX LocalLink,RX LocalLink,Aurora_Lane和Global_Logic四个模块是GTP_DUAL硬核与用户接口之间的数据转换过程,故将这4个模块绑定形成一个大模块,并例化两个分别与两个GTP收发器连接。最终实现GTP_DUAL硬核GTP双收发器的aurora_module模块结构框图如图5所示。
实例修改的具体实现过程如下:
(1) 修改GTP_Wrapper模块。对GTP_Wrapper逻辑进行整理分析,把GTP0接口、GTP1接口和共享模块接口各自的信号及其相关状态和控制信号进行归整,将GTP1模块的相关信号参照GTP0模块通过追加、修改、删除等操作建立起来,并添加到输入/输出接口中。
(2) 添加aurora_transmission_unit模块。该模块由TX LocalLink,RX LocalLink,Aurora_Lane和Global_Logic四个子模块组成,主要作用是作为用户接口和一个GTP收发器的数据传输通道。
(3) 修改aurora_module模块:该模块由两个aurora_transmission_unit模块和一个GTP_Wrapper模块组成,主要作用是将每个GTP收发器与其各自的数据传输通道连接起来。
(4) 修改用户层reset_logic模块。该模块的主要目的是将板上的复位按钮进行消抖,并把消抖后的复位等信号传输给各个GTP收发器。由于复位按钮只有一个,所以在此模块中添加一个复位信号,用于GTP1收发器。
(5) 修改TOP顶层模块。TOP顶层模块实现的是整个系统功能,所以每个GTP收发器独立地与外界进行数据接收和发送,就需要配套的时钟模块clock_module、时钟补偿模块standard_cc_module和用于数据接收和发送的用户接口模块frame_gen和frame_check。这四个模块用户可以根据自己实际需要进行修改。
通过以上步骤修改后的GTP_DUAL双收发器独立数据传输的结构如图6所示。
2.4 系统测试
本测试系统以实验室自行设计的两块信号处理板为测试平台,其测试方案如图7所示。通过两根单纤双向传输型光纤将GTP_DUAL_X0Y4的两个GTP收发器连接起来,在全双工模式下相互通信。在每一个传输通道中,两边各自在frame_gen程序中分别发送一定数据,并通过光纤传输,由frame_check程序接收后,并检测数据,如果接收数据正确,则点亮一个LED灯,表示通信成功。
测试结果实物图如图8所示,由图8可以看出两个LED灯均已点亮,表示两路光纤通信正常,程序的修改达到预期目标。图9和图10分别通过ChipScope[11]抓取两块信号处理板的数据信号。图9是信号处理板1通过GTP0和GTP1发送的测试数据。图10是信号处理板2通过GTP0和GTP1接收信号处理板1的测试数据。可见数据发送和接收都正常。
3 结 语
在实际工程中,经常需要传输多路高速数据,而Virtex5为了节省资源,将2个GTP收发器通过共享资源合并成1个GTP_DUAL,当所需通道多于GTP_DUAL个数时,一般需要升级芯片或追加芯片数量,增加了成本。另外,如果GTP_DUAL只使用一路GTP收发器,将造成另外一路不能被使用,这又导致资源浪费。针对这些情况,并根据GTP_DUAL硬核和Aurora协议相关知识,本文对Xilinx公司提供的Aurora IP核进行修改,以达到每个GTP收发器通道都能独立传输数据。根据实验结果以及在某军工项目上的应用表明,本文实现的修改方法达到了提高FPGA资源利用率的目的,降低了系统开发的成本。
参考文献
[1] 杜旭,于洋,黄建.基于FPGA的高速串行传输接口的设计与实现[J].计算机工程与应用,2007,43(12):94?96.
[2] 李维明,陈建军,陈星锜.基于Aurora协议的高速通信技术的研究[J].电子技术应用,2013,39(12):37?40.
[3] 曾瀚,周国忠.多路高速光纤图像传输系统设计及实现[J].半导体光电,2013,34(2):326?329.
[4] Xilinx Inc.Virtex5 FPGA RocketIO GTP transceiver user guide UG196(v2.1) [EB/OL]. [2012?12?03]. http://www.xilinx.com.
[5] 李大鹏,陈长胜,王世奎,等.基于FPGA的高速串行传输接口研究与实现[J].航空计算技术,2008,38(2):100?103.
[6] 李敏,徐建城,李键.基于Rocket I/O接口的高速互连应用研究与实现[J].现代电子技术,2012,35(6):11?14.
[7] 苏秀妮,陈建春,那彦.基于RocketIO自定义传输协议在高速串行通信中的设计与实现[J].微电子学与计算机,2013,30(9):90?93.
[8] 张琳琳,张涌.Aurora协议在红外告警系统中的应用[J].科学技术与工程,2012,12(21):5308?5311.
[9] 岳振,吕波,张涌,等.基于Aurora协议的高速图像传输和通信平台设计[J].电子技术应用,2014,40(8):7?9.
[10] Xilinx Inc. LogiCORE IP Aurora 8 B/10 B user guide UG353(v5.3) [EB/OL]. [2012?01?18]. http://www.xilinx.com.
[11] Xilinx Inc. ChipScope Pro tutorial: using an IBERT core with ChipScope Pro Analyzer UG811 (v13.1) [EB/OL]. [2014?04?28]. http://www.xilinx.com.