曾志斌,袁雨舟,姚引娣
(1.西安電子科技大學(xué) 微電子學(xué)院,西安 710071; 2. 西安郵電大學(xué))
一種FPGA高速訪問USB設(shè)備的設(shè)計方案
曾志斌1,袁雨舟1,姚引娣2
(1.西安電子科技大學(xué) 微電子學(xué)院,西安 710071; 2. 西安郵電大學(xué))
針對FPGA訪問 USB設(shè)備存在傳輸速率低、資源消耗大、開發(fā)復(fù)雜的缺點,提出了一種將ARM處理器與FPGA相結(jié)合實現(xiàn)高速訪問USB設(shè)備的方案。該方案利用ARM處理器的USB Host讀取USB設(shè)備數(shù)據(jù)并緩存于高速內(nèi)存,采用乒乓機制通過SRAM接口將數(shù)據(jù)傳給FPGA。經(jīng)測試,數(shù)據(jù)傳輸速率可以達到48 Mbps。該方案具有開發(fā)難度小,資源占用率低和傳輸速率高的特點,適合于FPGA高速讀取大量外部數(shù)據(jù)。
USB設(shè)備;數(shù)據(jù)訪問;FPGA;嵌入式系統(tǒng)
目前FPGA通過USB接口獲取USB設(shè)備中數(shù)據(jù)的方案大致分為兩大類,一類為在FPGA內(nèi)部實現(xiàn)USB設(shè)備控制,另一類為在FPGA外部實現(xiàn)USB設(shè)備控制。在FPGA內(nèi)部實現(xiàn)的方案需要在FPGA內(nèi)部實現(xiàn)USB控制器,在內(nèi)部實現(xiàn)或者外接USB收發(fā)器。該方案的實現(xiàn)具有較大難度,同時由于USB協(xié)議和文件系統(tǒng)都相當(dāng)復(fù)雜,需要使用相當(dāng)多的FPGA資源,因此完全不能滿足快速開發(fā)和低FPGA資源占用率的要求。在FPGA外部實現(xiàn)的方案通常使用單芯片的USB解決方案,典型的方案有兩種:一種是集成了USB控制器和USB收發(fā)器,但需自行實現(xiàn)文件系統(tǒng),如美國Cypress公司的CY7C67300[5];另一種是實現(xiàn)了包括文件系統(tǒng)在內(nèi)的所有USB讀取U盤所需的軟硬件,只需要FPGA發(fā)送命令進行控制即可實現(xiàn)讀取U盤,如南京沁恒電子的CH376[6,7]。在這兩類方案中,CY7C67300集成度高,但其只支持USB 1.1,傳輸速率較低;同時需要FPGA對其進行配置和控制及實現(xiàn)文件系統(tǒng),F(xiàn)PGA端的開發(fā)量較大。CH376支持USB 2.0接口,是一個真正的單芯片解決方案;但CH376只支持FAT16/32文件系統(tǒng),不支持NTFS文件系統(tǒng),無法讀取大于4 GB的大文件。另外,CH376需要FPGA進行配置和控制,因此需要實現(xiàn)CH376的控制邏輯并占用一定的FPGA資源。
由于現(xiàn)有方案均存在數(shù)據(jù)傳輸速率低、FPGA開發(fā)量大的缺點,本文提出了一種使用ARM + FPGA的方案,通過ARM處理器讀取USB設(shè)備數(shù)據(jù)并傳輸給FPGA,從而實現(xiàn)FPGA從USB設(shè)備獲取數(shù)據(jù)。該方案既能達到較高的數(shù)據(jù)傳輸速率,又能降低FPGA開發(fā)量,同時還具有很高的靈活性。
本方案的系統(tǒng)設(shè)計如圖1所示。該系統(tǒng)由ARM處理器、FPGA和USB設(shè)備構(gòu)成,F(xiàn)PGA通過內(nèi)部開辟的異步RAM空間接收數(shù)據(jù),ARM處理器負責(zé)將USB設(shè)備中數(shù)據(jù)通過并行總線轉(zhuǎn)發(fā)給FPGA,USB設(shè)備支持常見的U盤、照相機、移動硬盤等支持USB接口的從設(shè)備。本設(shè)計還將ARM處理器的兩個引腳與FPGA的通信。指令線用于ARM向FPGA發(fā)送準(zhǔn)備進行數(shù)據(jù)傳輸?shù)闹噶睿豁憫?yīng)線用于FPGA在接收到ARM的通知并準(zhǔn)備好后響應(yīng)ARM。與FPGA相連的DDR存儲器用于高速緩存大量圖像數(shù)據(jù),支持常見的DDR、DDR2和DDR3等類型。
圖1 系統(tǒng)設(shè)計圖
1.1 ARM處理器選擇
本方案選用的ARM處理器為韓國三星公司的S5PV210。S5PV210是一款基于ARM Cortex-A8內(nèi)核的RSIC處理器,該芯片擁有強大的計算能力、豐富的內(nèi)部資源和外部接口,主頻高達1 GHz,同時它還擁有優(yōu)化的外部存儲器接口。外部存儲器接口為異步接口,時鐘頻率為133 MHz,位寬為16位,具有完善且可調(diào)的時序控制功能,可用于連接ROM、SRAM、oneNAND、NAND Flash等多種存儲器,能滿足在高端通信服務(wù)中的數(shù)據(jù)帶寬要求。本方案使用這個接口完成數(shù)據(jù)從ARM處理器到FPGA的高速傳輸。
1.2 ARM與FPGA接口設(shè)計
本方案將FPGA異步RAM連接在ARM處理器的XM0內(nèi)存總線上,作為一個位寬為16位的SRAM使用,其對應(yīng)的硬件地址為0x10000000到0x10001002,共4 098字節(jié)。由于異步RAM的位寬為16位,故只需使用地址線ADDR 1~ADDR 13。指令線連接ARM處理器的GPIO引腳,方向為輸出,高電平有效。響應(yīng)線連接ARM處理器的中斷引腳,方向為輸入,上升沿有效。
1.3 軟件設(shè)計
在本方案中,ARM處理器以幀為單位向FPGA傳輸數(shù)據(jù)。每幀長度為4 098字節(jié),其中,幀頭長度為2字節(jié),數(shù)據(jù)長度為4 096字節(jié)。幀格式如圖2所示。
圖2 幀格式圖
幀類型的取值為:此幀不是最后幀為00,此幀是最后幀則為11。幀長度為幀數(shù)據(jù)的長度,以字節(jié)為單位。
本方案所設(shè)計的軟件分為兩個部分——驅(qū)動程序和應(yīng)用程序,軟件總體框圖如圖3所示。驅(qū)動程序在Linux系統(tǒng)中注冊硬件并提供控制硬件的功能函數(shù),以供應(yīng)用程序調(diào)用。應(yīng)用程序使用驅(qū)動程序提供的功能函數(shù)控制硬件,完成整個傳輸過程。軟件總體流程圖如圖4所示。
圖3 軟件總體框圖
圖4 軟件總體流程圖
1.3.1 驅(qū)動程序設(shè)計
本方案涉及3種驅(qū)動程序:USB驅(qū)動程序、文件系統(tǒng)驅(qū)動程序和FPGA驅(qū)動程序。
Linux系統(tǒng)有豐富完善的USB設(shè)備和文件系統(tǒng)支持。本方案使用Linux系統(tǒng)中自帶的USB Mass Storage驅(qū)動程序和文件系統(tǒng)驅(qū)動程序,自行編寫FPGA驅(qū)動程序。FPGA驅(qū)動程序基于Linux系統(tǒng)字符設(shè)備驅(qū)動程序模型進行編寫。FPGA驅(qū)動程序的主要函數(shù)有初始化函數(shù)init()、寫入中斷服務(wù)函數(shù)write_int()、寫入函數(shù)write()。
初始化函數(shù)init()首先將FPGA異步RAM對應(yīng)的硬件地址0x10000000~0x10001002映射為Linux系統(tǒng)中的內(nèi)存虛擬地址A到A + 4098(設(shè)映射的內(nèi)存虛擬地址起始為A),實現(xiàn)在Linux系統(tǒng)中直接向異步RAM寫入數(shù)據(jù)。然后,設(shè)置指令線、響應(yīng)線所對應(yīng)的寄存器。將指令線的方向設(shè)置為輸出,并輸出低電平;響應(yīng)線的方向設(shè)置為中斷輸入。最后,函數(shù)將響應(yīng)線中斷服務(wù)函數(shù)設(shè)置為write_int()。
寫入函數(shù)write()與寫入中斷服務(wù)函數(shù)write_int()配合,完成一次數(shù)據(jù)傳輸:
① 當(dāng)應(yīng)用程序調(diào)用寫入函數(shù)后,函數(shù)首先設(shè)置指令線為高電平指示FPGA準(zhǔn)備傳輸數(shù)據(jù),然后將驅(qū)動程序置于休眠狀態(tài),等待喚醒。
② FPGA收到指令后判斷現(xiàn)在能否傳輸數(shù)據(jù),如果能,則在中斷線上發(fā)送一個上升沿。ARM處理器捕捉到該上升沿后,調(diào)用write_int(),喚醒驅(qū)動程序。
③ 驅(qū)動程序被喚醒后,繼續(xù)執(zhí)行write()。write()函數(shù)首先根據(jù)應(yīng)用程序提供的參數(shù)生成幀頭,并將幀頭寫入地址ADDR和ADDR+1,完成幀頭的傳輸。隨后將數(shù)據(jù)寫入地址ADDR+2及其后的地址,完成數(shù)據(jù)的傳輸。
1.3.2 應(yīng)用程序設(shè)計
本方案通過Linux系統(tǒng)的熱插拔機制自動啟動應(yīng)用程序。在U盤插入USB接口后,Linux系統(tǒng)自動加載USB驅(qū)動和FPGA驅(qū)動并啟動應(yīng)用程序。應(yīng)用程序流程如圖5所示。
圖5 應(yīng)用程序流程圖
運行應(yīng)用程序時,通過設(shè)置參數(shù)能使應(yīng)用程序讀取U盤、移動硬盤甚至網(wǎng)絡(luò)上的文件,使方案具有很高的靈活性。應(yīng)用程序使用了多線程技術(shù)來充分利用系統(tǒng)資源,使用兩個線程分別實現(xiàn)從U盤讀取數(shù)據(jù)存入緩沖區(qū)的過程和將緩沖區(qū)內(nèi)的數(shù)據(jù)傳輸至FPGA的過程。在讀取線程或?qū)懭刖€程中,可以加入數(shù)據(jù)處理代碼實現(xiàn)數(shù)據(jù)的預(yù)處理,減少FPGA工作量。應(yīng)用程序分配了多個緩沖區(qū)提高性能,并使用了互斥鎖實現(xiàn)讀取線程與傳輸線程間的線程同步,確保數(shù)據(jù)正確傳輸。
1.4 ARM向FPGA傳輸數(shù)據(jù)設(shè)計
本方案在FPGA中實現(xiàn)一個異步RAM,其使用乒乓機制接收來自ARM處理器的數(shù)據(jù),同時需要將異步RAM中的數(shù)據(jù)寫入DDR 2存儲器。異步RAM內(nèi)部有兩個數(shù)據(jù)緩沖模塊。在乒乓機制中,兩個模塊分別執(zhí)行不同的任務(wù),當(dāng)模塊1接收數(shù)據(jù)來自ARM處理器的數(shù)據(jù)時,模塊2將數(shù)據(jù)寫入DDR 2存儲器。當(dāng)兩個模塊的任務(wù)都完成后,交換模塊1和模塊2的任務(wù)。與現(xiàn)有方案相比,本方案FPGA無需配置外部芯片,所需開發(fā)量較小。
2.1 傳輸速率測試
此測試傳輸3個不同大小的文件,記錄數(shù)據(jù)傳輸時間,從而獲得數(shù)據(jù)傳輸速率。
測試結(jié)果如表1所列。
表1 傳輸速率測試結(jié)果
由表1可知,在傳輸速率測試中,測得的最高數(shù)據(jù)傳輸速率為47.6 Mbps,比現(xiàn)有方案如CY7C67300、CH376的數(shù)據(jù)傳輸速率高。在傳輸速率測試中,傳輸100 KB文件的傳輸速率與傳輸1 MB和1 GB文件的傳輸速率相比偏低,而傳輸1 MB和1 GB文件的傳輸速率則相差不大。原因為:
① 測試為先進行計時后開始傳輸,存在一段時間未傳輸數(shù)據(jù)。
② 應(yīng)用程序在傳輸開始前需要一段時間進行初始化,存在一段時間未傳輸數(shù)據(jù)。
在后兩種測試中,以上兩種未傳輸數(shù)據(jù)的時間占總時間的比重較低,因此數(shù)據(jù)傳輸速率較高。
2.2 傳輸準(zhǔn)確率測試
此測試在FPGA內(nèi)實現(xiàn)一個比較器,比較異步RAM接收到的數(shù)據(jù)與比較器內(nèi)置數(shù)據(jù)是否一致,從而測試傳輸是否正確并確定正確率。經(jīng)測試,此方案在傳輸過程中無差錯發(fā)生,傳輸正確率為100%。
[1] 孔利東.基于FPGA的數(shù)據(jù)采集與處理技術(shù)的研究[D].武漢:武漢理工大學(xué),2007.
[2] 黃遠望.嚴(yán)濟鴻. FPGA和USB的雙通道數(shù)據(jù)采集測試系統(tǒng)[J]. 單片機與嵌入式系統(tǒng)應(yīng)用,2013(1):31-33.
[3] 冒劼.FPGA器件USB接口擴展[J]. 桂林電子科技大學(xué)學(xué)報,28(1):14-17.
[4] 劉思久,趙蔚. 實現(xiàn)USB2.0高速數(shù)據(jù)傳輸問題的探討[J]. 計算機工程與應(yīng)用,2007,43:75-77.
[5] 孫磊. FPGA與USB主機控制器通信系統(tǒng)的設(shè)計與實現(xiàn)[D]. 西安:西安電子科技大學(xué),2012.
97777[6] 劉佳. 基于FPGA的U盤讀寫器的研制與應(yīng)用[D]. 咸陽:西北農(nóng)林科技大學(xué),2012.
[7] 吳繁紅. NIOS-II處理器的大容量數(shù)據(jù)采集存儲系統(tǒng)設(shè)計[J]. 單片機與嵌入式系統(tǒng)應(yīng)用,2013,13(11):38-41.
曾志斌(博士,副教授), 研究方向為嵌入式系統(tǒng)設(shè)計、無線通信及通信系統(tǒng)集成。
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)