文献标识码:A
文章编号: 0258-7998(2015)02-0065-03
0 引言
随着图像采集、传输和处理技术的发展,在很多领域中对图像数据实时采集后的传输和处理提出了更高的要求,尤其是高分辨率、高频帧相机的广泛使用,对高带宽的需求更加迫切,传统的总线技术PCI、PCI-X、AGP等已很难胜任,而串行总线PCIe,由于利用时钟恢复和高速差分信号克服传统并行总线中的诸多限制,达到了更高的数据传输速率,因此一定程度上满足了高数据带宽的需求。PCIe总线使用数据包进行端到端的数据传输,理论上PCIe 1.0能达到2.5 Gbps/lane,2.0能达到5.0 Gbps/lane,但由于采用8b/10b编码以及数据包头和控制数据包的占用,有效数据速率会低于理论值的80%[1-2]。
利用PCIe总线的高带宽优势,设计了一种基于PCIe总线的多路实时传输系统,采用Bus MasterDMA方式实现与PC之间的高速传输,以满足多路图像数据实时采集后传输和处理的高带宽需求。
1 系统结构及工作原理
基于可编程逻辑器件FPGA的设计相比ASIC具有更好的灵活性和可配置性,因此本文所设计的基于PCIe总线的多路实时传输系统采用了Xilinx XC6VLX240T FPGA来实现。本系统主要包括PCI Express Core(EP)、DDR3 MIG模块、PCIe Bus Master DMA(BMD)模块以及DDR3读写控制模块四部分,结构如图1所示。
本系统的主要工作原理是由DDR3缓存相机采集PC处理后的图像数据,通过PCIe总线实现与PC之间高速数据传输。两路相机采集后的图像数据经相机接口模块前期处理后传入DDR3读写控制模块,由MIG模块存入DDR3,然后DDR3中的数据被读入发送缓存,同时PCIe BMD模块发送MSI报文给PC使其配置BMD相应寄存器,BMD模块会读取发送缓存中的数据组成存储器写请求报文经PCIe总线传给PC。对两路图像数据进行基于对象的特征提取后,PC配置BMD相应寄存器使其发送存储器读请求报文,然后PC端将处理后的图像数据组成CPLD数据包发向PCIe EP Core,BMD模块会将收到的CPLD TLP中的有效数据存入接收缓存,最后DDR3读写控制模块读取接收缓存中的数据,存入DDR3以待DVI 接口模块读取输出显示。结构图中FIFO除了缓存的作用外主要是解决位宽及跨时钟域的问题[3],而DMA FIFO接口模块的作用主要是负责BMD模块与FIFO间的信号连接及控制。
2 主要模块设计
本系统的设计主要是DDR3读写控制模块和PCIe BMD模块的设计,而PCI Express Core(EP)和MIG可以通过Xilinx CORE Generator按需求的配置生成,其中PCIe配置成×4、gen2,利用Virtex6集成的PCIe IP实现,MIG配置成DDR3控制器、400 MHz。
2.1 DDR3读写控制模块
DDR3读写控制模块由读写控制模块和仲裁模块两部分组成,如图2所示。
读写控制模块通过UI接口与MIG连接,按照MIG的时序要求进行读写操作。并且为了读写管理方便,将DDR3按容量划分为两份,分别用于存储采集的两路源图像数据和经PC处理后用于输出的图像数据。
仲裁模块主要负责多个设备访问DDR3时的总线切换。由于本系统不同设备读写DDR3所用时间不同,为避免采用轮询机制所带来的带宽利用率的降低,采取仲裁机制,负责对各个设备的访问请求做出应答和总线的切换,效率更高[4],原理如图2所示。设计时,为避免几个设备同时请求带来不确定性,仲裁模块采用Round Robin仲裁模式,使得各设备能公平得到响应机会。综合考虑带宽利用率和实时性,将十行以内图像像素点的读写时间作为时间宽度,保证本系统的高效可靠。
2.2 PCIe BMD模块
PCIe BMD模块主要由三部分构成,包括DMA 控制/状态模块、发送模块以及接收模块,结构如图3所示。
2.2.1 DMA控制/状态模块
DMA控制/状态模块包括控制/状态寄存器和控制模块。控制/状态寄存器主要寄存BMD模块的控制及状态信息。PC端采用数据包的形式将配置需求通过PCIe总线传输到EP端,BMD接收模块识别配置数据包(有效数据大小为1DW的存储器写请求TLP),并根据TLP的地址段将数据写入相应的控制寄存器。PC端也可以发送读控制/状态寄存器的请求,接收模块识别到该类数据包(请求数据大小为1DW的存储器读请求TLP)后,产生CPLD请求,发送模块将根据该TLP的地址读取对应控制/状态寄存器的值,生成CPLD TLP发向PC端。
控制模块根据控制/状态寄存器的配置值发送相应的控制信号给发送及接收模块,还与DDR3读写控制模块相连,控制原图像数据的读取和处理后图像数据的写入,并配合读取操作发送MSI请求[5],使PC配置BMD模块相应的控制寄存器以进行存储器写请求TLP的发送。
2.2.2 发送/接收模块
发送模块作为BMD模块的发送部分,主要负责在接收模块收到读写控制/状态寄存器的请求后完成报文的发送,在发送模块收到MSI请求后MSI TLP的发送,以及根据PC端所配置的寄存器参数进行存储器读/写请求TLP的发送,其中存储器写请求TLP的有效数据来自TX FIFO。
接收模块主要负责接收各种数据包并作出相应操作:当收到配置数据包时,将有效数据写入对应控制寄存器;当收到读控制/状态寄存器的请求,通知发送模块读取对应控制/状态寄存器值组成CPLD TLP发向PC端;当收到CPLD TLP,其中的数据段就是发送模块发送的存储器读请求TLP所请求的数据,然后对这些数据进行校验并读入RX FIFO等待存入DDR3。
2.2.3 PCIe BMD全双工模式
对于本系统与PC之间的数据传输,单一时间段内只进行读或者写比较简单,但为了满足系统需要以及传输效率的提高,大部分情况下,需要读写数据同时进行。对于发送模块而言,则需要合理安排存储器写请求TLP和存储器读请求TLP的发送,这里采用动态加权循环调度算法(Dynamic Weighted Round Robin,DWRR)。普通的加权循环调度算法(Weighted Round Robin,WRR)是通过设置两个计数器分别记录当前写请求和读请求已经发送的个数,并根据传输特性给两者配置相应的权重值。传输开始后,当某一请求次数达到它的权重值,则将该请求的计数器清零,再跳转到另一请求,如此循环往复直到传输结束。由于读请求的周期数要远小于写请求,如果读写请求的权值设置好后就保持不变,读请求的过快发送会快速消耗PCIe EP CORE的发送缓存从而造成拥堵,使发送模块长期处于等待状态,降低传输速率。本系统根据这一特性对WRR算法进行了优化,开始阶段由于发送缓存为空,为了充分利用总线,将读请求权值设为发送缓存大小3/4,写请求设为其1/4,优先发送读请求,再发送写请求,然后根据写请求个数达到权值后发送缓存的可用数设置读请求的权值,当发送缓存的可用数小于写请求权值一半时,重新设读写请求权值都为1,使读写请求逐个间隔发送直到读请求优先完成,再发送剩余的写请求。在这过程中读写请求权重值根据发送缓存的可用数动态变化,调整读写请求的发送组合,在保证读取速率的情况下尽量减少了拥堵时间,从而提高整体传输速率。
3 设计实现及测试验证
本设计采用Xilinx XC6VLX240T FPGA定制开发板作为开发平台,并结合对应的驱动程序和处理程序进行测试验证。
3.1 设计实现
整个设计采用Xilinx ISE14.7作为FPGA的开发工具,利用Verilog HDL进行程序设计。根据图1的结构图在顶层模块中例化各个模块,并进行相应的优化。为了满足测试验证的需求,顶层模块中还需要例化ChipScope测试核。设计完成后,通过ISE综合、映射、布局布线,最后生成可供下载的bit文件。综合后整个设计占用Register资源9 317(3%),占用LUT资源11 214(7%),占用Bram资源12(2%)。
3.2 测试验证
将开发板与PC主板的PCIe插槽相连接,下载bit文件,结合ChipScope软件进行测试。两路相机参数同为1 920×1 080,60 FPS,DVI显示参数也为1 920×1 080,
60 FPS。DDR3 SDRAM时钟400 MHz,物理位宽64 bit,读写控制时钟200 MHz,数据位宽256 bit。PCIe配置成×4,gen2。理论上,DDR3的读写速率和PCIe的传输速率满足多路图像的采集和输出要求。根据仲裁模块的设计,测试时间宽度分别为1、2、4、8行图像像素点读写时间下的性能,其中7.5 KB对应一行图像像素点的数据量。PCIe BMD单工情况下的测试结果如表1所示,并将表1的测试结果换算为gen1×8模式,与文献[6]的结果进行对比,如图4所示。
对比测试结果,文献[6]在gen1×8模式时的最高传输速率为写1 311 MB/s,读1 002 MB/s,而本传输系统在相同模式下能达到的最高传输速率为写1 632 MB/s,读1 557 MB/s,相比文献[6]写入速率提高24.5%,读取速率提高55.4%,并且表现出传输数据量越大,传输速率越高,超过60 KB之后趋于稳定。如果PCIe BMD一直工作在单工模式,是不能满足每秒写入和读取900 MB数据量的要求,因此本系统中PCIe BMD只在每帧图像的开始和结束像素行传输时工作在单工模式,其余时间工作在全双工模式。对于PCIe BMD的全双工方式,发送模块采用WRR算法和DWRR算法的测试结果如图5所示。
对比该测试结果,可以看出对于不同数据量的传输,采用DWRR的传输速率都高于WRR,写入速率最大提高3.4%,读取速率最大提高9.6%,最高传输速率能达到写1 478 MB/s,读1 438 MB/s,保证了图像数据传输到PC后有充足的时间进行运算处理,满足本系统的传输需求。根据PCIe BMD单双工测试结果,综合考虑整个系统的传输效率、总线切换频率及实时性,传输系统仲裁模块中的时间宽度设为4行图像像素点的读写时间为佳。
4 结论
大数据量采集后的高速传输对于一个采集系统而言至关重要,高性能的传输系统能为大数据量的存储、处理等后期各种操作提供保障。本文设计了一种基于PCIe总线的多路实时传输处理系统,并且通过FPGA验证了该系统的可行性。实际测试表明该系统能达到单工写1 632 MB/s、读1 557 MB/s和全双工写1 478 MB/s、读1 438 MB/s的传输速率,完全满足本系统高速数据传输的需求,并且对于其他高速传输系统的设计有一定的借鉴作用。
参考文献
[1] PCI express base specification revision 2.1[S].PCI-SIG.,Mar 4,2009.
[2] KAVIANIPOUR H,BOHM C.High performance FPGA-basedscatter/gather DMA interface for PCIe[C].IEEE NSS/MIC,2012,N19-3,1517-1520.
[3] LI H,LIU Y A,YUAN D M,et al.A wrapper of PCI express with FIFO interfaces based on FPGA[C].IEEE ICICEE,2012,145,525-529.
[4] 樊博,王延杰,孙宏海,等.FPGA实现高速实时多端口图像处理系统的研究[J].液晶与显示,2013,28(4):620-625.
[5] 雷雨,任国强,孙健,等.基于PCIE的高速光纤图像实时采集系统设计[J].电子技术应用,2013,39(10):136-138.
[6] 侯杭呈,王忆文,李辉.一种基于PCI Express总线的DMA高速传输系统[J].微电子学,2013,43(3):383-386.