文献标识码:A
DOI:10.16157/j.issn.0258-7998.182003
中文引用格式:王红亮,王柳明. 基于MLVDS和USB3.0的多节点数据传输系统设计与实现[J].电子技术应用,2019,45(1):42-45,50.
英文引用格式:Wang Hongliang,Wang Liuming. Design and implementation of multi-node data transmission system based on MLVDS and USB3.0[J]. Application of Electronic Technique,2019,45(1):42-45,50.
0 引言
在各种测试现场中,数据采集单元往往分布在不同的地方,数据采集具有速度快、数据量大的特点,且对采集系统的实时性要求越来越高。为了将分布在多处的传感器采集的大量数据进行统一的分析和管理,需要实现多节点的高速互连通信[1]。MLVDS支持多节点互连的拓扑结构,可提供较高的数据传输速率(理论上高达500 Mb/s)和更低的功耗[2],实现多节点采集数据的可靠传输;USB3.0接口作为计算机的通用接口,其理论传输速率(5 Gb/s)是USB2.0接口的10倍[3]。设计中采用赛普拉斯USB3.0接口芯片CYUSB3014作为FPGA同计算机通信的桥梁,采用SN65MLVD203接口芯片完成多节点数据传输,在此基础上实现了多节点数据采集系统与计算机之间高速传输。
1 系统总体框架设计
本文设计的MLVDS和USB3.0接口数据传输系统结构框图如图1所示。该传输系统主要由USB3.0模块、FPGA主控模块、MLVDS通信模块模块组成,系统硬件结构主要包括:FPGA、DDR3缓存芯片、USB3.0接口芯片、MLVDS接口芯片,选用Xilinx公司的Spartan-6系列可编程逻辑器件6slx16csg324芯片为核心控制器,完成对传输系统整体逻辑的控制。
系统上电后,FPGA主控模块对MLVDS总线线上各节点的采集模块进行初始化配置,并启动发送数据包进程与接收数据包进程来监测多个节点的运行状态。各节点采集的数据经过编帧之后将数据缓存到采集模块的DDR3中,当主节点需要读取某个节点的数据时,从节点通过MLVDS通信模块将数据传输到MLVDS接口芯片,再通过总线将数据发送至主节点,主节点完成数据解析后将有效数据存入DDR3中。同时,USB3.0通信模块读取DDR3中的缓存数据后,通过USB3.0接口上传到上位机。在此过程中,上位机负责指令的下发和采集数据的分析与处理以及各节点上传的状态字的分析,指令下发过程与数据上传过程类似,数据通过USB3.0接口下发至USB3.0接口芯片,然后经FPGA接收数据,发送至MLVDS通信模块,最后再将数据发送至各个节点,各个节点会同时接收到数据,各节点接收到数据后只响应属于自己的指令。
2 硬件电路设计
2.1 MLVDS接口电路设计
MLVDS驱动接收器、数字隔离器、信号连接器件三部分组成了MLVDS多节点总线传输硬件电路,根据需求,选用ADI公司推出的ADN4693E全双工通信芯片作为MLVDS驱动接收器,数字隔离芯片和电源隔离芯片分别选用的是ADuM3442和ADuM5000,以此来降低来自其他电路的影响。
ADN4639E是ADI公司发布的全双工MLVDS驱动接收器,内置驱动器和接收器且互不干扰,最高可支持200 Mb/s的数据速率,可应用于时钟信号传输、背板数据传输等应用中[4]。MLVDS总线传输结构示意图如图2所示,在传输节点间通过异步串行通信方式实现数据位同步,数据通过差分信号传输,每个从节点都可以同时接收主节点发送的指令,各个从节点只会对属于自己的指令做出响应,如某个从节点收到传数据指令,则打开驱动器使能端来驱动总线,每一个时刻,各个从节点中只有一个驱动器有效,这样就避免了多个从节点同时驱动总线所引起的主节点接收数据乱码。
本设计中,采用ADuM3442芯片实现对各个节点上MLVDS芯片驱动器和接收器的单端与控制器引脚之间的数字隔离,防止电路文波对接口电路造成的电平漂移,其硬件原理图如图3所示。
设计采用ADuM5000对MLVDS总线通路提供电源隔离电路,该电路实现了数据与电源的完整隔离,保证该电路能够应对高电压瞬变的影响,隔离电路如图4所示。
2.2 USB3.0接口电路设计
USB3.0接口芯片选用的是赛普拉斯公司推出的FX3系列CYUSB3014芯片,其灵活性高,具备通用可编程接口GPIF II,能保证其与绝大多数控制器大容量数据的高速通信。不仅如此,其还具备一个UART接口[5]。本设计中,UART接口用于指令的下发和状态字的上传,GPIF II用于高速大容量数据的上传。
设计中将GPIF II接口配置成同步从FIFO工作模式,主控器FPGA与GPIF II接口的数据、地址和控制总线对接。FPGA可通过GPIF II接口对FX3的内部缓冲区的数据进行读写操作,满足大容量数据高速传输的要求。同时,系统中的指令和状体字可通过UART 接口进行传输,FX3与FPGA的连接框图如图5所示。
3 逻辑程序设计
系统硬件逻辑程序设计主要完成系统初始化、USB3.0传输、MLVDS总线通信块以及数据转换等功能。
3.1 USB3.0传输模块
为了实现下位机与上位机的通信,FPGA通过GPIF II接口和UART接口来访问FX3内部的数据缓冲区,GPIF II接口信号说明如表1所示。
FPGA通过GPIF II接上传数据时,首先发送FX3内部缓冲区的地址,然后拉低片选信号SLCS#使GPIF II端口处于选通状态,当PCLK上升沿来临且FLAGB是高电平状态时,使SLWR#信号处于低电平状态,同时把有效数据驱动到并行总线上,数据就可实现写入操作,数据写入结束后,将SLWR#信号和SLCS#信号拉高。当需要传输短数据包时,在最后一个数据时钟将PKTEND#拉低,数据传输完成后再拉高即可。FPGA读取GPIF II接口数据过程与上传数据过程类似,读取过程中需要将SLOE#拉高,在此系统中GPIF II口主要作为上传大容量数据使用。FX3还具备一个串口通道,当下发指令和上传状态字时,可使用此通道。
3.2 MLVDS通信模块
MLVDS总线接口简单,只规定了总线物理层的电气特性,并没有涉及高层协议,MLVDS通信控制模块利用FPGA实现MLVDS总线通信协议的数据链路层以及物理层的数据传输设计。在物理层中完成传输数据的编码、解码、位同步以及帧同步等功能,按照MLVDS通信协议在数据链路层中完成数据封装拆装、总线仲裁、差错控制、报文滤波以及时序控制等方面的功能及实现[6]。
在执行通信流程时,有效数据将在MLVDS通信模块中根据自定义通信协议打包和解包。数据包中的标识符表示对底层节点设备操作,分为数据的上传和命令的下发。数据包中的目的地址表示传输从节点的地址信息。ADN4693E芯片把串化数据转化为差分信号传输到MLVDS传输总线,保证数据在底层总线上传输的可靠性。
MLVDS通信模块向总线上发送的数据包由以下7个字段构成,各字段的含义如表2所示。
3.3 数据转换模块
数据转换模块主要实现USB3.0传输模块和MLVDS通信模块之间的数据转化。上位机发送命令时,数据通过USB3.0接口传输到数据转换器,FPGA通过GPIF II接口检测标志位判断到USB3.0通信模块已接收到数据后,将数据读到数据转换模块中,并将有效数据转化为8 bit数据,数据写入命令缓存FIFO中实现数据跨时钟的同步。在FIFO读信号上升沿时将数据从FIFO中读入到MLVDS通信模块中,在命令解析模块中通过比对命令寄存器组中值,确定命令的执行功能、对象、触发机制等,重新生成命令数据帧。在总线管理器中按MLVDS总线通信协议添加起始、仲裁场、校验位、终止位组成MLVDS数据包格式,然后转为串行数据发送至MLVDS接口模块,在该模块中调用实现 MLVDS的发送模块,数据通过发送端口经ADN4693E芯片发送给目标底层设备,完成一次发送。
接收上传数据时,当MLVDS的接收模块端口检测到数据起始位有效时开始接收,在物理信令层中完成传输数据的同步后,将数据转化为并行数据传输给MLVDS总线管理模块。对MLVDS接收的传输数据进行CRC校验正确后,有效数据在数据有效标志信号为高的条件下传输到DDR3缓存模块中,将有效采集数据、节点信息及通道地址信息写入DDR3中,实现大量数据缓存,使回传数据速率处于可控范围。接着USB3.0通信模块从DDR3缓存模块中读出数据,并组成32 bit数据传输至USB3.0芯片,在 FPGA 的控制下,将数据上传到上位机。
4 测试结果
系统测试平台由数据源、MLVDS-USB3.0转换器以及上位机搭建而成,在测试过程中,信号源产生8 bit递增数,通过从节点MLVDS驱动器后将差分串行数据驱动到数据总线上,然后主节点通过MLVDS接收器接收总线差分信号。上位机通过CYUSB3014的UART接口下发数据读命令,下位机解码指令后,将MLVDS接收器接收的数据通过CYUSB3014的GPIF II接口上传给上位机。通过ChipScope Pro抓取的GPIF II接收数据的时序图如图6所示。
当cnt_state=6,此时FPGA通过USB_DQ[31:0]将数据写入内部数据缓存区,cnt为写入数据的计数器,第一个32 bit数据(cnt=01时)表示多链路数据传输的地址信息,其中,“0xB0”和“0x16”分别为地址信息的起始标识和终止标识。第二个32 bit数据(cnt=02时)表示此包数据地址信息和有效数据的长度和。其中,数据包起始标识为“0xA2”,通信双方的地址信息为“0xC1”和“0xD2”,“0xFF”表示此数据包长度为255 B。第三个32 bit数据为数据包正文,每16 B嵌入一个“0x55”作为为同步信息字,检验数据是否传输正确。
上位机将上传的数据保存后,用EmEditor软件打开数据文件如图7所示,通过上传数据和数据源对比,上传的数据和MLVDS总线系统传输的数据一致,且没有明显误码现象,上位机与下位机的通信正常。
在测试过程中,为了对数据传输速率进行评估,在上位机中加入时间触发模块和流量计,从而可以计算出一定时间内上位机接收到的数据量,即可计算出传输速率。随机抽取20组测试结果,绘制出数据传输速率曲线如图8所示,从曲线图可以看出,数据传输速率稳定在100 Mb/s~120 Mb/s之间,满足设计要求。
5 结束语
本文介绍了一种基于FPGA的MLVDS-USB3.0转换器设计方案,并进行了实验验证。上位机通过MLVDS—USB3.0转换器转换功能,实现控制多节点采集设备与上位机间的采集数据的高速上传和指令的下发。该转换器可在不改变硬件系统构架的前提下灵活实现多种传输协议,具有硬件电路简单、通用性强、传输稳定等特点。实践证明,该转换器可以应用于多节点数据采集系统。
参考文献
[1] 阿永嘎.多位串行MLVDS高速网络式仪器总线的研究[D].杭州:浙江大学,2010.
[2] 张法全,李宗敏,王国富,等.分布式多通道同步采集系统设计[J].电视技术,2015,39(23):35-39.
[3] 陈一波,杨玉华,王红亮,等.基于FPGA的USB3.0-光口转换器设计与实现[J].仪表技术与传感器,2016(11):19-22.
[4] 朱保琨,刘广文.USB3.0通信端口FPGA设计与实现[J].计算机工程与设计,2016,37(9):2292-2298.
[5] SONG K,LI C,YE L,et al.Signal integrity optimization of MLVDS based multi-master instrument bus[C].IEEE International Symposium on Electromagnetic Compatibility.IEEE,2014:433-437.
[6] 田耘,徐文波.Xilinx FPGA开发实用教程[M].北京:清华大学出版社,2008.
作者信息:
王红亮,王柳明
(中北大学 电子测试技术重点实验室,山西 太原030051)