基于FPGA的LVDS高速数据通信卡设计
扫描二维码
随时随地手机看文章
摘要 基于FPGA、PCI9054、SDRAM和DDS设计了用于某遥测信号模拟源的专用板卡。PCI9054实现与上位机的数据交互,FPGA实现PCI本地接口转换、数据接收发送控制及DDS芯片的配置。通过WDM驱动程序设计及MFC交互界面设计,最终实现了10~200 Mbit·s-1的LVDS数据接收及10~50 Mbit·s-1任意速率的LVDS数据发送。
关键词 PCI9054;LVDS;DDS:FPGA
某遥测信号模拟源是用于产生模拟信号处理器、遥测组件测试和交付测试的前端输入信号的专用设备。该信号源生成各种类型的信号,输入给待测产品,测试时比对遥测信号模拟源生成的信号和其经过待测产品以后的信号,以判断产品的功能是否正常。设计中的板卡为该遥测信号模拟源的组成部分,主要用于测试产品的LVDS总线协议的功能是否正常。由于待测信号的特殊应用,要求板卡能够接收200 Mbit·s-1内的高速串行数据并能发送10~50 Mbit·s-1的任意速率LVDs数据。因PCI总线速度高、兼容性好、可靠性高且成本低,使其在各种与主机通信的总线技术中优势明显。FPGA资源丰富、速度快、开发方便快捷,因此在高速数据通信中应用广泛。DDS频率合成技术通过频率控制字、相位控制字及参考时钟的控制来实现输出信号的调频调相,并且输出信号具有频率转换快、频率分辨率高和相位噪声低等优点。综合上述特点,设计运用PCI9054实现PCI总线接口,FPGA实现数据接收发送控制及接口实现,DDS芯片AD9851产生任意LVDS数据发送时钟,最后使用MFC实现板卡的交互界面并对板卡实现测试。
1 硬件设计
数据接收系统是将目标信号进行采集、处理并存储,形成计算机可以处理的数据格式,即包含信号输入单元、信号处理单元和信号输出单元。数据发送系统是将目标数据传送给下位机,下位机进行数据格式处理,然后按照数据协议形式通过信号输出单元发送出去。除此之外整个系统还需要缓冲区、时钟以及电源等相关模块支持。图1所示为本板卡的硬件设计框图。
1.1 PCI接口设计
PCI总线是由Intel等公司制定的具有严格规范的外部设备互联总线,是目前计算机中广泛采用的局部总线,它的信号线包括32根地址数据复用线、仲裁、接口控制线、总线命令字节允许复用线和系统复位等。PCI接口设计一般采用两种方法:(1)利用CPLD/FPGA实现,这种方法可以针对自己的需要定制功能,设计灵活性大。(2)用通用的接口芯片,如AMCC公司的S5933、PLX公司的PCI9054等。因PCI总线协议复杂,自行设计接口费时费力,而PCI接口芯片具有设计简单、功能强大、可靠性好等特点,从而大大减少开发工作量。综上所述,设计选用PCI90 54,C从模式工作,本地总线端输入时钟50 MHz,配置芯片为Mierochip Technology公司的93LC56串行EEPROM。
1.2 LVDS接口设计
低压差分信号(Low Voltage Differential Signaling,LVDS)采用极低的电压摆幅高速差动传输数据,可以实现点对点或一点对多点的连接。文中采用Cyclone I系列EP1C6Q240FPGA,它支持高速LVDS接口,利用其I/O的LVDS驱动器把FPGA内部逻辑信号转换为低压差分信号对,经过传输线传送到对方差分接收电路。在Cyclone I系列FPGA中,使用LVDS接口只需在其配套的Quartus II软件的MegaWizard中调用Alt lvds并进行定制即可。
LVDS接口电路的设计如图2所示,FPGA发送端通过LVDS发送差分信号,在差分线上分别串接一个120 Ω电阻,再在其间并接一个170 Ω电阻,削弱差分信号的幅值,防止信号产生震荡;FPGA接收端在差分线间并接一个100 Ω的终端电阻,电流主要通过终端电阻形成回路,从而在接收器的输入端形成差分接收的信号电压;PCB布线时防止LVDS高速信号串扰和互扰,避免其他信号耦合到LVDS传输线上,应尽量将LVDS信号和其他信号分别布在两个信号层上。
1.3 其他接口设计
为满足PCI总线的DMA传输特性,需要在硬件上加入缓冲区。输入的LVDS速率越高,需要的缓冲区容量越大,以保证不丢失数据。因此设计选用Micron公司提供的MT48LC2M32 SDRAM作为缓冲区,它是一款64 MB全同步SDRAM。另外,输出的LVDS信号要求10~50 MHz频率范围内任意可调,因此选用AD公司采用CMOS技术生产的直接数字合成器AD9851,它的最高工作时钟为180 MHz,内部除了完整的高速DDS外,还集成了时钟6倍频器和一个高速比较器,并且它的接口控制简单,可以用8位并行口或串行口直接输入频率、相位等控制数据。设计中通过FPGA中PLL输出30 MHz时钟,倍频器将参考时钟倍频至180 MHz,控制接口采用并行口传输。
除此之外,时钟模块采用有源晶振为系统提供50 MHz时钟,SDRAM时钟由FPGA内部PLL合成。电源模块采用外围电路简单的LDO(Low Dropout Regulator)提供3.3V及1.5V电源电压。
1.4 FPGA内部结构设计
FPGA内部结构的逻辑设计是本板卡设计的核心部分,图3所示为本系统FPGA内部结构框图。
LVDS信号接收器接收外部的LVDS数据帧,检出帧头,并将帧数据传送给双口RAM进行处理,一个数据帧包含32 bit的帧头和256×32 bit的帧数据。接收的双口RAM实现数据的乒乓存储,写数据的宽度为1 bit,读数据的宽度为32 bit,以此来实现数据的串并转换,同时实现数据时钟域的转换。LVDS接收数据控制模块用于产生双口RAM和SDRAM控制器的地址总线、数据总线和控制总线,实现各接收模块联合控制和数据转移,同时它还负责从SDRAM控制器读取数据送至FPGA内的FIFO缓冲区,用于PCI总线交互。
LVDS信号发送部分由LVDS发送数据控制、双口RAM、FIFO缓冲、LVDS信号发送器和DDS控制器组成。LVDS发送数据控制用于产生各模块的地址、数据和控制总线,实现数据转移和交互。双口RAM实现并串转换和乒乓存储。LVDS信号发送器为数据帧添加包头,并连同帧数据以AD98 51产生的发送频率串行发送出去。
另外,SDRAM控制器是FPGA内用于外部SDRAM控制的模块,PCI本地总线控制器是FPGA内用于控制PCI9054本地总线交互的模块,DDS控制器是FPGA内用于外部AD9851控制的模块。PLL是Ahera FPGA内提供的模拟延迟锁相环模块,可以实现系统时钟的倍频、分频及延迟等时钟控制操作。通过该模块可以实现系统内不同时钟域的时钟分配。
2 软件设计
系统设备的驱动程序采用Windows下的WDM(Windows Driver Model)驱动程序。目前开发WDM驱动程序通常有3种工具,即Windows DDK、DriverStudio和WinDriver。由于DriverStudio包含完善的源代码生成工具以及相应的类库和驱动程序样本,提供了在VC++下进行驱动程序开发的支持,因此设计中使用DdverStudio来开发WDM驱动程序。
设计的上层应用程序采用Microsoft Virtual Studio作为开发平台,通过MFC设计了人机交互界面,主要用于完成接收数据显示存储、发送数据载入、发送频率控制字以及PCI控制命令等功能。其程序面板如图4所示。
3 结果测试
在Ahium Designer 2009平台上进行板卡硬件原理图和PCB图设计,FPGA芯片采用Altera公司的EP1C6Q240C6,使用Quartus II 9.0开发系统实现编程和仿真,完成对电路设计的功能仿真和时序仿真。
在Quartus II中进行引脚分配并编译完工程后,将设计文件下载到FPGA的配置芯片中。在硬件上将LVDS的发送端和接收端连接以实现自发自收。在PC机的应用程序中设置发送频率为50 MHz,然后点击“发送频率控制字”按钮发送频率控制字,载入从0开始的连续累加数字,点击“开始发送”按钮发送数据,然后点击“开始接收”按钮接收数据。从图4所示的发送与接收数据显示可以发现,接收到的LVDS数据与发送的LVDS数据完全一致,系统的发送功能与接收功能符合设计要求。
4 结束语
介绍了基于FPGA和PCI9054的LVDS数据通信卡的设计,通过FPGA实现了LVDS数据的接收发送控制、PCI9054实现了与上位机的数据交互,实现了10~200 Mbit·s-1速率的LVDS数据接收以及10~50 Mbit·s-1任意速率的LVDS数据发送。此板卡的设计,可以有效地应用于某遥测模拟信号源,并对待测设备的LVDS总线协议进行全面测试。