杨 峰, 秦兆涛
(1北京遥感设备研究所 北京 100854 2北京航空航天大学 北京 100191)
在现代信息社会,数据通信占据着重要的地位,对实时通信数据的存储也不可或缺。很多电子产品都通过HDLC协议[1]进行通信,然而PC机上却没有与之对应的接口,所以需要一种“转换”设备将依该协议通信的数据存储于PC机中。本文所论述的正是这种“转换”设备:基于FPGA设计和实现的USBHDLC协议转换器。通过该系统,便可将RS-485接口转换为USB端口,实现外设与PC机的数据通信。
以往的转换器系统采用的是专用芯片+单片机+接口电路的结构,由专用ASIC芯片实现HDLC协议[2],但存在如下问题:ASIC器件出于专用性目的难以通用不同版本,缺乏灵活性;器件片内存储器容量有限,不适合大数据量传输;为追求功能完备,芯片控制复杂[3]。本文系统采用FPGA的单片解决方案,可有效利用片内硬件资源,无需外围电路,高度集成且操作简单,能够兼顾速度和灵活性。FPGA既适合完成计算控制,又适合完成接口协议的编写,所以本文通过FPGA硬件编程,实现了单片高度集成的USBHDLC协议转换系统。
本文系统主要包括FPGA控制器、HDLC模块和USB模块三部分。系统由FPGA芯片控制实现HDLC通信协议,通过RS-485接口与外接设备进行通信。系统配备USB端口,通过FPGA编程配置USB芯片实现系统与PC机的通信,进而实现对数据的读取、存储和事后分析,亦或将PC机上的指令和数据发送出去。
本文系统设计简单、灵活,可靠性高,较易实现HDLC通信协议,USB接口通用性强,具有较强的兼容性和广泛的适用性,能够很好地应用于各种中小型通信设备[4]。
高级数据链路控制规程HDLC[5](High-Level Data Link Control Procedures)是一种面向比特位的同步数据链路层协议,由国际标准化组织ISO制定,广泛应用于数据通信领域。该协议使用统一的帧格式,运用方便;采用零比特插入法,易于硬件实现,且支持任意的位流传输,实现信息的透明传输;全双工通信,吞吐率高,在未收到应答帧的情况下,可连续发送信息帧,提高数据链路传输的效率;采用CRC帧校验序列,可防止漏帧,提高信息传输的可靠性。
HDLC以帧作为传输的基本单位,其结构如图1所示。
图1 HDLC帧结构
结合图1,标志位“F”作为帧头和帧尾,各1个字节,设定为十六进制“7E”。为防止数据传输误判,提高可靠性,可发送多个“7E”。“INFO”为有效数据信息,为字节的整数倍。对图1所示的校验区间采用CRC方式校验,即循环冗余校验,得到2个字节的帧校验序列“FCS”。为防止传输的有效数据被误判为帧标志位“F”,协议采用零比特插入和删除法[6],即规定:在发送数据时,当比特流中连续出现5个“1”bit时,在后面自动插入一个“0”bit;在接收数据时,当比特流中连续出现5个“1”bit时,自动删除后面的“0”bit。
本文系统采用HDLC协议与外接设备进行数据通信。由于FPGA可重复性编程,设计开发灵活,可多路并行处理,程序移植性强,能实时仿真,可在众多通信产品中设计实现HDLC协议功能[7],因此本文基于可编程器件FPGA实现HDLC通信协议。
本文所论述的系统为基于FPGA的USB-HDLC协议转换器,系统结构如图2所示。系统主要由FPGA控制模块、HDLC模块和USB模块三部分组成。此外,系统通过RS-485接口与外接设备连接,通过USB端口与PC机相连。
图2 系统结构
当发送数据时,PC机上的数据信息或指令通过USB接口传输进入系统,将数据暂存于USB芯片中,再进入系统缓存RAM,缓存中的数据按HDLC协议通过RS-485接口传输至外接设备;当接收数据时,外接设备的数据通过RS-485接口进入系统,按照内部HDLC协议对数据进行解析并存入FPGA缓存中,USB芯片经FPGA配置控制,可接收来自缓存中的外部数据,进而将其通过USB接口传入PC机中。
HDLC协议是通过可编程逻辑器件FPGA编程实现的,而USB模块功能的实现则依赖于USB芯片和FPGA对它的配置控制。
本文系统采用的 USB芯片为 Cypress公司生产的 EZ-USB芯片 CY7C68013[8]。CY7C68013采用USB2.0协议,主要有端口模式、GPIF模式和Slave FIFO模式三种工作模式。该芯片全速信号速率最大为12Mb/s,高速信号速率可达480Mb/s。端口模式下的传输速率较慢,这是因为其I/O口为8051通用I/O口,需要CPU的参与;在GPIF模式下,GPIF作为主控制器,产生可编程的控制信号,可与外部接口通信;在Slave FIFO模式下,外部处理器可以直接与FIFO连接。
USB芯片CY7C68013的功能如图3所示。
本文中CY7C68013采用Slave FIFO工作模式,便于系统间通信和协同合作。该芯片受主控器件FPGA的配置,可控制芯片的数据总线读写使能,即图3中的EP2和EP6,进而实现数据的高速传输。
图3 USB模块功能
可编程逻辑器件FPGA芯片作为主控器件,控制数据通信时的USB模块和HDLC通信协议模块,进而实现USB-HDLC协议转换器功能,其原理如图4所示。
FPGA编程实现USB译码模块、USB控制模块和HDLC协议发送、接收模块,缓存RAM可在芯片内调用;USB控制模块通过控制总线对USB芯片进行配置,经USB接口实现与PC机的通信互联。USB译码模块对接收或发送的数据进行解析译码处理,译码后的数据信息或经USB模块数据总线进入USB芯片上传到PC机,或缓存到RAM中按HDLC协议通过RS-485接口发送给外接设备。
图4 FPGA控制实现USB-HDLC协议转换器原理
下面具体叙述FPGA是如何设计实现HDLC协议和控制USB模块的。
FPGA实现HDLC协议的流程如图5所示。在发送端,数据由发送缓存RAM经并/串转换、CRC校验、插零和包装帧头帧尾标志字等操作将数据发送出去;接收端,检测接收数据的帧头标志字,然后经CRC校验检测、删零操作后对数据串/并转换,并存储到接收缓存单元RAM中,检测到帧尾标志字后停止接收过程。
具体来讲,发送端首先发送标志字“7E”,然后将缓存中待发送的并行数据并/串转换,同时系统自动完成CRC编码、“0”比特插入等操作,再将处理后的数据按同步串行传输方式发送。在接收端,系统自动完成标志字“7E”的检测、删“0”及CRC校验操作,再将同步串行数据串/并转换,转换成8位并行数据存储至接收缓存中。整个系统采用同一个全局时钟。
图5 HDLC协议的FPGA设计实现流程
RS-485接口选用 J30J-21ZKP,通过连接线缆与外设相连。发送数据时,首先经过光耦合器件进行电气性能隔离,然后经过单端电平转差分电平芯片输出到发送总线上,这样的设计能够在保证外部通信的同时,有效地保护系统硬件平台。接收数据端,信号经过差分电平转单端电平芯片,将差分信号转换为单端信号,然后经过光耦合器件输入到FPGA芯片。本设计中选择HCPL-063L光耦隔离芯片以及MAX3485电平转换芯片,理论上此电平转换芯片可以达到10Mb/s的传输速率。为满足不同设计的需要,FPGA内部设有专门的波特率寄存器,可以通过PC机界面环境装订选择发送数据的波特率,如2Mb/s或4Mb/s。
USB控制模块主要实现对PC机下发指令的译码解析,传输下发数据信息以及将系统接收的内部数据上传给PC机。系统与PC机连接时,用户可以从PC机界面环境向系统发送指令,进行指令装订、保存接收数据等操作。
FPGA对USB模块的控制流程如图6所示。
如图6所示,在发送数据时,FPGA编程控制选择USB FIFO通道EP2,系统接收PC机下发的指令并对其进行解析、译码操作,或通过配置寄存器实现复位、波特率选择和触发发送等功能,或将PC机下发的数据信息写入发送缓存RAM;在接收数据时,通过状态寄存器判断接收RAM中是否有数据,若有,FPGA编程控制选择USB FIFO通道EP6,上行数据通过USB接口传入PC机中,经解析使之显示在PC机界面环境中或存储于PC机内部。
图6 USB控制模块的FPGA实现流程
本系统FPGA控制实现HDLC协议部分采用VHDL语言进行编程,并通过第三方软件Signal TapⅡLogic Analyzer显示数据的通信传输过程,用行为级仿真验证转换器功能。
图7为FPGA配置控制USB芯片CY7C68013,PC机下发数据时的测试图。系统采用40MHz时钟信号采样,FIFOData为并行数据,SLRD、SLWR为读写信号。从仿真图中FIFOData信号可以看出,系统设计发送 EE、FF、02、01、00 数据指令,44、55、33、00、01 等为需要发送的有效数据,说明 PC 机中数据已进入USB芯片缓存中。接下来的工作是将该数据转换为符合HDLC协议的数据,并通过RS-485接口发送出去。
图7 PC机下发USB数据仿真测试
图8 为FPGA实现HDLC通信协议发送数据时的仿真测试。其中TX_Reg为预备发送PC机下行并行数据的寄存器,SPI_Dat_Out_R为HDLC数据总线发送的串行数据。如图所示,首先发送帧头标志4个“7E”,然后发送寄存器中的数据44、55、33、00、01等,以及两个 CRC 校验字节“BC”和“A1”。最后,发送帧尾标志4个“7E”。由于设计规定,数据发送为先发低位再发高位,所以在串行数据线上读取信息时需将数据倒置读取。
图8 HDLC协议数据传输仿真测试
根据上述两图FIFOData、TX_Reg和SPI_Dat_Out_R信号数据内容的对比,系统实现了将PC机数据通过USB接口转入FPGA缓存中并通过RS-485接口并行输出的功能,即完成了USB-FPGA协议转换器的功能。
HDLC协议模块中,HCPL-063L光耦隔离芯片能达到的最高传输速率为15Mb/s,MAX3485电平转换芯片可以达到10Mb/s的传输速率;USB模块中,CY7C68013芯片数据传输速率可达到480Mb/s,片内拥有8kB的RAM,完全可以满足系统传输数据的需要。
当系统FPGA芯片EP1C6T144C8工作时,资源占用情况如表1所示。
表1 资源使用情况
本文系统地介绍了基于FPGA的USB-HDLC协议转换器的设计与实现。系统采用HDLC总线接口与外接设备连接,通过USB接口与PC机通信传输信息。通过可编程逻辑器件FPGA编程代替专用芯片实现HDLC协议,编程简单,易于修改,数据传输可靠,实时性和稳定性较高[10];采用USB2.0协议接口与PC机进行通信,通用简便,接口设计灵活,具有较高的数据传输率。该USB-HDLC协议转换器实现了PC机与外接设备的信息通信和数据存储,采用HDLC协议和USB接口,使系统具有更强的兼容性和广泛的应用性,具有一定的实用价值。
[1]彭圻平,胡国庆,等.基于FPGA的HDLC规程模块实现[J].计算机与网络,2013,(10):64~67.
[2]刘振宇,陈 禾,等.低功耗RS-485总线HDLC控制器的ASIC设计[J].微电子学,2002,32(6):469~472.
[3]张文昊,王 俊,等.基于FPGA的HDLC规程的设计与实现[J].电子器件,2009,(3):696~699.
[4]应三丛,张 行.基于FPGA的HDLC协议控制器[J].四川大学学报,2008,40(3):116~120.
[5]ISO/IEC 13239.Information Technology—Telecommunication Exchange between Systems— High-level Data Link Control(HDLC)Procedures[S].
[6]邓风军,张 龙,等.基于PCI总线的HDLC通信卡的设计与实现[J].电子技术应用,2012,38(8):30~33.
[7]张 伟.基于FPGA的HDLC规程控制系统实现[J].指挥信息系统与技术,2011,(2):48~52.
[8]鄢 涛,杜小丹,等.基于RS485的数据通信协议的设计与实现[J].电子设计工程,2013,21(17):19~22.
[9]刘文学,郭玉忠,等.HDLC协议的FPGA实现方法[J].航空计算技术,2011,41(3):93~96.
[10]刘杰宇.基于FPGA技术的HDLC帧收发器的设计与实现[D].北京交通大学,2010.