高速视频信号的光纤传输系统设计.docx
《高速视频信号的光纤传输系统设计.docx》由会员分享,可在线阅读,更多相关《高速视频信号的光纤传输系统设计.docx(12页珍藏版)》请在冰豆网上搜索。
高速视频信号的光纤传输系统设计
高速视频信号的光纤传输系统设计
2007-10-1714:
36
摘 要:
针对1000帧/秒高速摄影传输系统需实现数据输出速率600MBps的长距离传输难题,提出了采用CIMT编码方式的光纤数字化传输设计方案。
整个系统主要包括数字信号的多路复用、解复用以及PCI数据传输卡三部分。
详细阐述了系统的原理及硬软件实现方法,设计实现了两路高速视频数字化信号的15公里远距离传输和计算机实时显示。
高帧频的视频信号不同于普通视频信号,如果采用模拟信号方式传输,它的模拟带宽达到了几十兆甚至一两百兆,这样很难实现远距离传输。
而光纤传输容量大、质量高和不易受干扰等特点,在高速数字传输系统中得到了广泛应用。
目前国内外针对普通视频信号的光纤传输系统已相当多[1,5],而对非标准的高帧频视频信号光纤传输系统少有报道,特别是两路或多路高帧频视频的单根光纤传输实现则未见报道。
在本文中需要实现两路256×256像素每秒1000帧高速视频信号远距离传输。
对于高帧频摄像机,由于它帧频很高,通常采用多路并行的信号输出方式降低数据率,最后通过复用合成为视频信号[2]。
为实现远距离传输,文中提出采用数字光纤的复用、解复用和计算机PCI技术实现两路高帧频视频设备产生的15MBps×40路数字信号的传输与视频信号的合成及计算机实时显示。
1系统原理和结构
高速视频信号的光纤传输系统主要包括复用、光发射、光接收、解复用、控制电路和PCI传输接口等部分。
图1为系统光发射部分工作原理图。
从高速视频采集获得的40路15MBps的数据首先经过XC9572内的2:
1复用,形成20路30MBps的二级复用数据提供给HDMP-1022,由其完成信道编码,转换成600MBps的PECL串行数据,驱动光发射模块,完成数据的光纤发射。
图2为光接收部分原理图。
解复用芯片HDMP-1024从光纤接收模块接收到的600MBpsPECL数据中提取出20路的并行数据和30MHz的时钟信号,再由XC9572完成二级解复用,同时也为FIFO及PLX9052组成的PCI传输卡提供时序信号,计算机通过PCI总线获得实时高速视频采集数据,并予以显示和处理。
2硬件设计
系统的硬件设计主要包括光纤传输单元、PCI传输单元和控制单元三部分。
2.1数字光纤传输单元设计
数字光纤传输单元主要完成串并行数据的复用与解复用功能。
设计中采取数据通信中的CIMT(Conditional-InvertMasterTransition)信道编码方式对数据进行编码。
图3显示CIMT码的格式。
CIMT码有三种帧形式:
数据帧、控制帧和填充帧。
数据帧和控制帧的格式如图3(a)所示,可以发送任意需要传送的数据和控制信息,每一帧都以C-Field(CodingField)开始,其后接着D-Field(DataField)。
其中D-Field组成的数据位可以是十六位或二十位,本系统采用二十位数据;控制位(C-Field)由四位数据码组成,接收端可以此提取并锁定数据的类型与状态。
填充帧是在发射端没有数据信号时以及发射端和接收端建立连接时产生。
在三种帧的主瞬变点处是接收端恢复时钟信号的参考点。
本系统中选用Aglient公司的HDMP-1022和HDMP-1024作为CIMT码的复用与解复用主要芯片,HFCT-5208作为光发射和光接收器来实现点对点的光纤传输设计。
在光发射端设计中采用HDMP-1022的Double-Frame模式实现40路数据的传输,通过二级复用扩展其并行数据的容量为40路。
数据在同一时钟控制下同时被复用成一路的高速信号,同时生成另一路按位取反的信号,最后通过其CIMT编码器输出推动光发射器。
图4为以Double-Frame方式复用发射的时序图。
其中CLOCK(15MHz)是单路数据采集时钟,FLAG表示奇偶场,CAV和DAV表示数据帧和控制帧的控制位,C0~C39表示输入的40路信号,D0~D19是CIMT码的D-Field数据,STRBOUT(30MHz)为芯片锁相后的倍频时钟。
在光接收端部分光接收器将获得的光信号转变为高速电信号并发送给HDMP-1024,由它解复用后提取参考时钟信号STRBOUT(30MHz)、数据信号C0~C39,以及其他的状态控制信号和数据时钟RCLK(15MHz)。
图5为Double-Frame光接收端时序图。
2.2PCI传输单元设计
为实现高速视频信号的实时记录,设计中利用了PCI总线技术,PCI控制芯片采用PLX9052,它与FIFO相结合可以实现最高数据传输速率120MBps数字量输入。
PLX9052符合PCI2.1规范,支持低成本从属适配器。
内部包括一个64字节的写FIFO和一个32字节的读FIFO,通过读写FIFOs,可实现高性能的突发式数据传输;其局部总线与PCI总线的时钟相互独立,局部总线的时钟频率范围为0~40MHz,PCI的时钟频率范围为0~33MHz;可以通过串行EEPROM提供PCI总线和局部总线的部分重要配置信息。
PLX9052支持突发式内存映射传输和单周期的内存或I/O映射传输,利用32字节的直接从设备读FIFO和64字节的直接从设备写FIFO,映射在PCI内存和I/O空间中的地址由PCI基址寄存器设置。
而且,局部映射寄存/b器允许将PCI地址空间转换为局部地址空间。
图6是PLX9052与FIFO相互连接的电路图,FIFO采用IDT公司的IDT72205。
2.3控制单元设计
整个设计的时序控制单元均由CPLD完成,在光发射端主要提供40路信号的2?
押1复用、数据的锁存及系统工作的时序信号;在光接收端主要为解复用、FIFO和PLX9052提供相应的时序逻辑。
本设计选用Xilinx公司的XC9572作为控制单元的核心芯片,结合它的在线编程功能,完成整个系统的时序调试与设计。
结合Verilog语言与原理图(sch)方法,较好地实现了整个系统时序的设计。
以下是40路数字信号8?
押1复用Verilog语言设计代码。
Moduleparrelserial(Data,clock,EN,OutData);
input[0:
8]Data;inputclock;inputEN;
outputOutData;reg[0:
8]Data;
reg[0:
3]count;regOutData;
always@(posedgeclock)
begin
if(EN)
count=0;
else
begin
OutData=Data[count];
count=count+1;
if(count>8)count=0;
end
end
endmodule
3软件设计
整个系统软件主要包括PCI传输单元的驱动程序和系统应用程序设计。
Windows下的PCI驱动程序不仅仅包括物理设备的驱动程序,也包括为文件系统等非物理设备编写的虚拟设备驱动程序。
在设计中主要针对Windows2000下PCI驱动程序设计。
由于Windows2000禁止用户模式的程序访问I/O端口(Windows95/98则允许用户程序直接访问I/O端口),直接控制物理设备的驱动程序均为内核模式。
而本设计的PCI驱动程序要求对各种硬件资源访问,所以应该选择工作在零级的驱动程序模式。
开发设备驱动采用的主要开发工具是JUNGO公司提供的软件包Windriver。
这个软件包提供开发PLX9052有关设备的文档、编译需要的头文件和库文件、调试工具和程序范例。
利用其内部定义的可以调用的系统底层服务,如DMA服务、中断服务、内存管理服务、可安装文件系统服务等,结合VC++完成整个PCI设备驱动程序。
本设计包括以下几个方面:
(1)PCI设备初始化
PCI设备驱动程序首先实现识别PLX9052器件、寻址PLX9052器件的资源和对PLX9052器件中断的服务。
主要调用Windirver软件包内以下函数:
WD_Open(hWD);
PCI_Get_WD_handle(&hWD);
PLX_LocateAndOpenBoard(0x10b5,0x9052,UseInt);
(2)PCI端口地址操作
PCI总线是32位的总线标准,在进行I/O操作时通常要进行双字(DWORD)操作,而在Windows2000下,系统不允许处于优先级3的用户程序和用户模式驱动程序直接使用I/O指令。
任何对I/O的操作都需要借助内核模式驱动来完成。
笔者主要调用Windirver软件包内两个函数来完成。
IO_ReadByteString(DWORDdwIOAddr,PBYTEpBuf,DWORDdwBytes);
IO_WriteByteString(DWORDdwIOAddr,PBYTEpBuf,DWORDdwBytes);
(3)内存的读写
PLX9052与计算机进行数据通信主要采取DMA方式,在Windriver中提供了相应内存读取两个函数,通过对它的调用可实现PLX9052与计算机内存的数据交换。
IO_Read32BitRegister(DWORDdwAddr);
IO_Write32BitRegister(DWORDdwAddr,DWORDdwData)?
鸦
整个系统的应用程序研制都基于微软公司的VC++开发设计,可用于Windows2000操作系统下。
整个光纤传输系统利用复用、解复用,结合PCI技术实现了高速视频数字化信号远距离传输及控制、实时显示等功能,传输距离15km,可记录数据量为128K字节。
目前已将设计用到相关的测试项目中,并将进一步改进扩大数据的容量及稳定性。
参考文献
1Asada,HideyukiYamada,TakashiRabou.Opticalfiberdigitaltransmissionofmultiplexedvideoandaudiosignalssuitableformultimediaapplications[J].IEEETransactionsonConsumerElectronics.1998;44
(2):
273~279
2P.A.Levine,D.J.Sauer,F.V.Shallcrossetal.HighFrameRateMulti-PortCCDImagerandCamera[J].SPIE,1992;1952:
257~267
3AglientTechnologyInc.LowCostGigabitRateTransmit/ReceiveChipSetWithTTLI/Os[M].2002
4PLXTechnologyInc.PCI9054DataBookV2.0[M].1999
5刘颖,王春悦.数字通信原理与技术[M].北京:
北京邮电大学出版社,2002
6张宝富,刘忠英.现代光纤通信与网络教程[M].北京:
人民邮电出版社,2002
雷达技术的不断发展,需要对大容量的数据进行实时的处理,这就对通信速率提出了很高的要求。
本设计将作为一个大型雷达信号处理系统与外部的数据接口板,实现数据的高速记录与回放。
板上集成的4个光口,有效数据传输率理论上可达到10Gbit/s,能够充分满足系统对通信速率的要求。
ROCKETIO简介
RocketIO为Xilinx公司的VirtexIIpro及VirtexIV系列FPGA中的一个内嵌模块。
它是一种高速的串行收发器,采用两对差分对来进行数据的发送和接收,可以实现两个单工或一对全双工的数据传输。
通信码率可以达到600Mbit/s~3.125Cbit/s。
RocketIO收发器发送和接收串行差分信号,工作于2.5V的直流电压下,采用CML(CurrentModeLogic)模式,内部带有50Ω或75Ω的匹配电阻。
RocketIO采用了预加重技术,可以补偿传播媒质中的高频损耗。
RocketIO包括PMA(PhysicalMediaAttachment)和PCS(PhysicalCodingSublayer)两个子层。
其中PMA子层中集成了SERDES,发送和接收缓冲,时钟发生器及时钟恢复电路。
SERDES是一个串并转换器,负责FPGA中本地的32位并行数据(也可以是16位或8位)与RocketIO接口的串行数据之间的转换。
采用串行数据收发,可以在高频条件下很好的避免数据间的串扰。
时钟发生器及时钟恢复电路用于将时钟与数据绑定发送及将时钟从接收到的数据流中恢复出来,从而避免了在高速传输条件下时钟与数据分开传输所带来的时钟抖动等问题。
PCS子层负责8B/10B编码解码和CRC校验,并集成了负责channel绑定和时钟修正的弹性缓冲。
8B/10B编码可以避免数据流中出现连0连1的情况,便于时钟的恢复。
channel绑定通过在发送数据流中加入P字符来将几个RocketIO通道绑定成一个一致的并行通道,从而来提高数据的吞吐率。
最多支持24个通道的绑定。
弹性缓冲可以解决恢复的时钟与本地时钟的不一致问题,并进行数据率的匹配,从而使得channel绑定成为可能。
对RocketIO模块的配置,可以通过下面两种方式进行:
静态特性可以通过HDL代码设置;动态特性可以通过RocketIO的原语端口进行配置。
RocketIO收发器的框图1所示
系统方案介绍
该光纤数据传输板基于PCI总线规范和PMC接口规范。
系统框图如图2所示。
光纤数据传输板组成
光纤数据传输板上集成3个光口,每个光口对应1个RockelIO收发器。
另有一个RocketIO连接到PMC的PN4上,以便通过母板提供与背板上其他设备进行高速串行通信的通道。
光口收发模块采用LNL-STllH。
光纤数据传输板上的数据存储采用Micron公司的synchronousDRAMMT48LC32M16A2,每片容量512Mh,共4片。
4片SDRAM由4套独立的地址数据总线连入FPGA,从而可以实现4片SDRAM读写的独立工作。
对于光口数据在SDRAM中的存放方式,可以通过FPGA中的代码灵活没置,因此大大增加了系统的通用性。
PCI桥芯片采用QuickLogic的5064,可以在localbus端达到最高100MHz的时钟速率。
本系统中应用66M/64bit的PCI总线标准。
该芯片带有PCIcore可以在PCI总线端实现master和slave两种模式,而芯片的localbus部分是可编程的,可以实现与FPGA的无缝连接,本设计中localbus部分采用80MHz的时钟。
QL5064中的数据发送和接收FIFO可以对数据进行缓冲,从而匹配两端的速率。
本系统的核心为Xilinx公司的VirtexIIpro系列FPGAXC2VP20。
对FPGA型号的选择主要基于对userIO数量和RocketIO数目的考虑。
该款FPGA带有8个RocketIO,可以与光纤模块进行无缝连接。
FPGA内部的功能模块包括SDRAM控制器,与QL5064交互的控制模块及两个与QL5064进行通信所用的FIFO(分别用于数据的发送和接收),3个RocketIO控制器,每个RocketIO控制器中包括一个RxFIFO和一个TxFIFO。
板内数据存储及流动方式
光纤数据传输板可以工作于如下几种模式:
光纤数据记录模式
三个光口的数据经由FPGA和QL5064直接传送到PCI总线上,仔放到主机的存储空间上。
三个光口之间可以独立工作。
光纤数据回放模式
主机将数据通过PCI总线传送到光纤板上,经过QL5064和FPGA,从三个光口发送出去。
同样,三个光口是独市的。
经过板内缓冲的数据记录模式
光口数据先存储在板内的SDRAM中,再经由FPGA和5064传送到PCI总线上,从而将数据存储到主机的存储空间中。
三个光口可以同时工作,每个光口的最高波特率为2Gbit/s。
经过板内缓冲的数据回放模式
主机端发送来的数据通过PCI总线,经由5064和FPGA存储到SDRAM上,再经由光口发送出去。
三个光口可以同时工作,每个光口的最高波特率为2Gbit/s。
以上四种工作模式,可以任选其中的一种或几种,因此该光纤数据传输板具有了较强的通用性,可以被灵活的应用于不同的场合。
ROCKETIO的实现
FPGA中的ROCKETIO控制模块
在FPGA中实现对三个RocketIO的控制,3个RocketIO可以独立工作。
本设计中的RocketIO在物理层之上采用aurora协议,在aurora协议中不采用channel绑定,每个rocketIO传送数据采用framing格式,工作于全双工模式,支持流控。
RocketIO接口采用交流耦合(ACcoupling)模式,单个RocketIO控制模块的工作原理框图如图3所示。
图3中的RocketIOtransceiver模块是由Xilinx公司的COREGenerator生成的一个IPCore,内部实现了RocketIO收发器的功能以及上层协议aurora。
该模块的功能包括8B/10B编码,串并转换,时钟与数据流的绑定以及时钟恢复,CRC差错检测,流量控制等。
发送接收通道各具有一个16K的FIFO,以便对发送或接收的数据进行缓冲,容量为一个数据包的大小,从而可以在PCI总线较长时间忙的情况下不至于造成数据的丢失。
由于RocketIO工作于2Gbit/s下,FIFO的设置可以防止数据的溢出,匹配RocketIO和SDRAM及PCI之间的速率差异。
Poll模块负责FPGA内部各个模块的协同工作及相互之间的数据交互,此处POLL模块根据不同的操作要求进行RocketIO与SDRAM或QL5064之间的数据传送。
关于参考时钟,RocketIO不能使用经过数字时钟管理(DCM)倍频的参考时钟,因为DCM倍频会引入过大的时钟抖动,在RocketIO的高速数据传输条件下会引起不必要的错误。
当RocketIO工作于2.5Gbit/s以上时,建议使用差分时钟(本设计虽然工作于2.5Gbit/s以下,但还是采用了差分时钟,以期获得更好的性能)。
RocketIO的时钟由差分时钟输入后,只经过一级缓冲,然后直接连入到RocketIO的参考时钟引脚上。
PCB设计中需要注意的问题
为了使得RocketIO能够稳定可靠的工作,在PCB设计中需要注意如下一些问题。
电源
每个RocketIO有5个电源引脚,它们都对噪声敏感,因此需要良好的电源滤波网络。
应选用线性电源模块,RocketIO应使用独立的供电电源,从而避免和其他电路部分混用电源而引起的噪声。
高速差分信号对的布线
RocketIO的发送和接收信号对之间的匹配电阻阻值是可编程的,为50Ω或75Ω(50Ω用于芯片间互连,75Ω用于电缆连接)。
差分对应布线在中间层,两边由地层保护,避免过孔。
每个差分对的长度应尽量相等(长度差异应<50mils),以减少共模噪声和辐射,避免抖动和时序错误。
尽量避免过长的走线,并增加差分对与其他信号线的距离以避免串扰。
ROCKETIO性能测试
为了测试该光纤板RocketIO的工作性能,测试中将两个RocketIO用多模光纤互连,设置成全双工工作方式,带有流控,RocketIO工作于2Gbit/s的波特率,由于使用8B/10B编码,实际有效数据率为1.6Gbit/s。
RocketIOA发送数据,B接收。
测试步骤如下:
(1)主机端将要发送的数据放到PCI总线上;
(2)光纤板的QL5064启动PCI端的DMA,将总线上的数据写入到QL5064内部的FIFO里;
(3)启动QL5064的LocalDMA,将FIFO中的数据写入FPGA;
(4)FPGA将从QL5064接收到的数据放人SDRAM_A中;
(5)FPGA将SDRAM_A中的数据通过RocketIOA连续发送出去,同时RocketIOB对这批数据进行接收,接收到的数据写入到SDRAM_B中;
(6)通过启动QL5064的LocalDMA,FPGA将SDRAM_B的数据发送到QL5064的FIFO中;
(7)QL5064启动PCI端的DMA,将数据送给主机;
(8)主机将收到的数据与发送的数据比较,以确定RocketIO是否能够正常的工作。
测试了100MByte的数据,结果表明本设计中的RocketIO能够准确无误的进行数据的传输。
本文给出了一种基于RocketIO的光纤数据传输板的设计方案,通过PMC背板与主机交互,使用PCI协议。
光口波特率最高可以达到2Gbit/s,可以实现三个光口数据的记录和同放,数据的流动方式可以在FPGA中灵活配置,在实践中RocketIO可以稳定有效地工作