曾志斌,袁雨舟,姚引娣
(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)