曾志斌,袁雨舟,姚引娣
(1.西安电子科技大学 微电子学院,西安 710071; 2. 西安邮电大学)
一种FPGA高速访问USB设备的设计方案
曾志斌1,袁雨舟1,姚引娣2
(1.西安电子科技大学 微电子学院,西安 710071; 2. 西安邮电大学)
针对FPGA访问 USB设备存在传输速率低、资源消耗大、开发复杂的缺点,提出了一种将ARM处理器与FPGA相结合实现高速访问USB设备的方案。该方案利用ARM处理器的USB Host读取USB设备数据并缓存于高速内存,采用乒乓机制通过SRAM接口将数据传给FPGA。经测试,数据传输速率可以达到48 Mbps。该方案具有开发难度小,资源占用率低和传输速率高的特点,适合于FPGA高速读取大量外部数据。
USB设备;数据访问;FPGA;嵌入式系统
目前FPGA通过USB接口获取USB设备中数据的方案大致分为两大类,一类为在FPGA内部实现USB设备控制,另一类为在FPGA外部实现USB设备控制。在FPGA内部实现的方案需要在FPGA内部实现USB控制器,在内部实现或者外接USB收发器。该方案的实现具有较大难度,同时由于USB协议和文件系统都相当复杂,需要使用相当多的FPGA资源,因此完全不能满足快速开发和低FPGA资源占用率的要求。在FPGA外部实现的方案通常使用单芯片的USB解决方案,典型的方案有两种:一种是集成了USB控制器和USB收发器,但需自行实现文件系统,如美国Cypress公司的CY7C67300[5];另一种是实现了包括文件系统在内的所有USB读取U盘所需的软硬件,只需要FPGA发送命令进行控制即可实现读取U盘,如南京沁恒电子的CH376[6,7]。在这两类方案中,CY7C67300集成度高,但其只支持USB 1.1,传输速率较低;同时需要FPGA对其进行配置和控制及实现文件系统,FPGA端的开发量较大。CH376支持USB 2.0接口,是一个真正的单芯片解决方案;但CH376只支持FAT16/32文件系统,不支持NTFS文件系统,无法读取大于4 GB的大文件。另外,CH376需要FPGA进行配置和控制,因此需要实现CH376的控制逻辑并占用一定的FPGA资源。
由于现有方案均存在数据传输速率低、FPGA开发量大的缺点,本文提出了一种使用ARM + FPGA的方案,通过ARM处理器读取USB设备数据并传输给FPGA,从而实现FPGA从USB设备获取数据。该方案既能达到较高的数据传输速率,又能降低FPGA开发量,同时还具有很高的灵活性。
本方案的系统设计如图1所示。该系统由ARM处理器、FPGA和USB设备构成,FPGA通过内部开辟的异步RAM空间接收数据,ARM处理器负责将USB设备中数据通过并行总线转发给FPGA,USB设备支持常见的U盘、照相机、移动硬盘等支持USB接口的从设备。本设计还将ARM处理器的两个引脚与FPGA的通信。指令线用于ARM向FPGA发送准备进行数据传输的指令;响应线用于FPGA在接收到ARM的通知并准备好后响应ARM。与FPGA相连的DDR存储器用于高速缓存大量图像数据,支持常见的DDR、DDR2和DDR3等类型。
图1 系统设计图
1.1 ARM处理器选择
本方案选用的ARM处理器为韩国三星公司的S5PV210。S5PV210是一款基于ARM Cortex-A8内核的RSIC处理器,该芯片拥有强大的计算能力、丰富的内部资源和外部接口,主频高达1 GHz,同时它还拥有优化的外部存储器接口。外部存储器接口为异步接口,时钟频率为133 MHz,位宽为16位,具有完善且可调的时序控制功能,可用于连接ROM、SRAM、oneNAND、NAND Flash等多种存储器,能满足在高端通信服务中的数据带宽要求。本方案使用这个接口完成数据从ARM处理器到FPGA的高速传输。
1.2 ARM与FPGA接口设计
本方案将FPGA异步RAM连接在ARM处理器的XM0内存总线上,作为一个位宽为16位的SRAM使用,其对应的硬件地址为0x10000000到0x10001002,共4 098字节。由于异步RAM的位宽为16位,故只需使用地址线ADDR 1~ADDR 13。指令线连接ARM处理器的GPIO引脚,方向为输出,高电平有效。响应线连接ARM处理器的中断引脚,方向为输入,上升沿有效。
1.3 软件设计
在本方案中,ARM处理器以帧为单位向FPGA传输数据。每帧长度为4 098字节,其中,帧头长度为2字节,数据长度为4 096字节。帧格式如图2所示。
图2 帧格式图
帧类型的取值为:此帧不是最后帧为00,此帧是最后帧则为11。帧长度为帧数据的长度,以字节为单位。
本方案所设计的软件分为两个部分——驱动程序和应用程序,软件总体框图如图3所示。驱动程序在Linux系统中注册硬件并提供控制硬件的功能函数,以供应用程序调用。应用程序使用驱动程序提供的功能函数控制硬件,完成整个传输过程。软件总体流程图如图4所示。
图3 软件总体框图
图4 软件总体流程图
1.3.1 驱动程序设计
本方案涉及3种驱动程序:USB驱动程序、文件系统驱动程序和FPGA驱动程序。
Linux系统有丰富完善的USB设备和文件系统支持。本方案使用Linux系统中自带的USB Mass Storage驱动程序和文件系统驱动程序,自行编写FPGA驱动程序。FPGA驱动程序基于Linux系统字符设备驱动程序模型进行编写。FPGA驱动程序的主要函数有初始化函数init()、写入中断服务函数write_int()、写入函数write()。
初始化函数init()首先将FPGA异步RAM对应的硬件地址0x10000000~0x10001002映射为Linux系统中的内存虚拟地址A到A + 4098(设映射的内存虚拟地址起始为A),实现在Linux系统中直接向异步RAM写入数据。然后,设置指令线、响应线所对应的寄存器。将指令线的方向设置为输出,并输出低电平;响应线的方向设置为中断输入。最后,函数将响应线中断服务函数设置为write_int()。
写入函数write()与写入中断服务函数write_int()配合,完成一次数据传输:
① 当应用程序调用写入函数后,函数首先设置指令线为高电平指示FPGA准备传输数据,然后将驱动程序置于休眠状态,等待唤醒。
② FPGA收到指令后判断现在能否传输数据,如果能,则在中断线上发送一个上升沿。ARM处理器捕捉到该上升沿后,调用write_int(),唤醒驱动程序。
③ 驱动程序被唤醒后,继续执行write()。write()函数首先根据应用程序提供的参数生成帧头,并将帧头写入地址ADDR和ADDR+1,完成帧头的传输。随后将数据写入地址ADDR+2及其后的地址,完成数据的传输。
1.3.2 应用程序设计
本方案通过Linux系统的热插拔机制自动启动应用程序。在U盘插入USB接口后,Linux系统自动加载USB驱动和FPGA驱动并启动应用程序。应用程序流程如图5所示。
图5 应用程序流程图
运行应用程序时,通过设置参数能使应用程序读取U盘、移动硬盘甚至网络上的文件,使方案具有很高的灵活性。应用程序使用了多线程技术来充分利用系统资源,使用两个线程分别实现从U盘读取数据存入缓冲区的过程和将缓冲区内的数据传输至FPGA的过程。在读取线程或写入线程中,可以加入数据处理代码实现数据的预处理,减少FPGA工作量。应用程序分配了多个缓冲区提高性能,并使用了互斥锁实现读取线程与传输线程间的线程同步,确保数据正确传输。
1.4 ARM向FPGA传输数据设计
本方案在FPGA中实现一个异步RAM,其使用乒乓机制接收来自ARM处理器的数据,同时需要将异步RAM中的数据写入DDR 2存储器。异步RAM内部有两个数据缓冲模块。在乒乓机制中,两个模块分别执行不同的任务,当模块1接收数据来自ARM处理器的数据时,模块2将数据写入DDR 2存储器。当两个模块的任务都完成后,交换模块1和模块2的任务。与现有方案相比,本方案FPGA无需配置外部芯片,所需开发量较小。
2.1 传输速率测试
此测试传输3个不同大小的文件,记录数据传输时间,从而获得数据传输速率。
测试结果如表1所列。
表1 传输速率测试结果
由表1可知,在传输速率测试中,测得的最高数据传输速率为47.6 Mbps,比现有方案如CY7C67300、CH376的数据传输速率高。在传输速率测试中,传输100 KB文件的传输速率与传输1 MB和1 GB文件的传输速率相比偏低,而传输1 MB和1 GB文件的传输速率则相差不大。原因为:
① 测试为先进行计时后开始传输,存在一段时间未传输数据。
② 应用程序在传输开始前需要一段时间进行初始化,存在一段时间未传输数据。
在后两种测试中,以上两种未传输数据的时间占总时间的比重较低,因此数据传输速率较高。
2.2 传输准确率测试
此测试在FPGA内实现一个比较器,比较异步RAM接收到的数据与比较器内置数据是否一致,从而测试传输是否正确并确定正确率。经测试,此方案在传输过程中无差错发生,传输正确率为100%。
[1] 孔利东.基于FPGA的数据采集与处理技术的研究[D].武汉:武汉理工大学,2007.
[2] 黄远望.严济鸿. FPGA和USB的双通道数据采集测试系统[J]. 单片机与嵌入式系统应用,2013(1):31-33.
[3] 冒劼.FPGA器件USB接口扩展[J]. 桂林电子科技大学学报,28(1):14-17.
[4] 刘思久,赵蔚. 实现USB2.0高速数据传输问题的探讨[J]. 计算机工程与应用,2007,43:75-77.
[5] 孙磊. FPGA与USB主机控制器通信系统的设计与实现[D]. 西安:西安电子科技大学,2012.
97777[6] 刘佳. 基于FPGA的U盘读写器的研制与应用[D]. 咸阳:西北农林科技大学,2012.
[7] 吴繁红. NIOS-II处理器的大容量数据采集存储系统设计[J]. 单片机与嵌入式系统应用,2013,13(11):38-41.
曾志斌(博士,副教授), 研究方向为嵌入式系统设计、无线通信及通信系统集成。
Design of High-speed USB Device Accessing for FPGA
Zeng Zhibin1,Yuan Yuzhou1,Yao Yindi2
(1.School of Microelectronic Engineering, Xidian University, Xi’an 710071, China;2. Xi’an University of Post and Telecommunications)
A design of high-speed USB device accessing combining ARM processor and FPGA is proposed to solve the problems of low transmission rate, a lot of resource consumption and complex development when accessing USB device by FPGA. Data from USB device are read through USB Host of ARM processor and they are saved in high-speed Cache.The data are sent to FPGA by SRAM interface using ping-pong mechanism.Test results demonstrate that the data transmission rate is 48 Mbps.The design has simple development, low resource consumption and high transmission rate, which is suitable for accessing mass external data quickly by FPGA.
USB device; data access; FPGA; embedded system
TN79
A
2014-04-14)