徐 超,劉 沖,王永綱
(中國科學(xué)技術(shù)大學(xué) 近代物理系,安徽 合肥 230026)
?
基于FPGA和USB2.0協(xié)議的通用數(shù)據(jù)傳輸設(shè)計
徐超,劉沖,王永綱
(中國科學(xué)技術(shù)大學(xué) 近代物理系,安徽 合肥 230026)
FPGA因其具有高度的靈活性與強(qiáng)大的數(shù)據(jù)處理能力而被廣泛應(yīng)用于數(shù)據(jù)采集與處理系統(tǒng)中。USB2.0因其數(shù)據(jù)傳輸速率快和接口的多樣化而廣泛使用。以USB2.0控制器CY7C68013A為接口設(shè)計和實現(xiàn)了上位機(jī)與FPGA中FIFO與寄存器之間的讀寫。經(jīng)測試表明,該設(shè)計達(dá)到了47 MB/s的數(shù)據(jù)傳輸速率,接近USB2.0控制芯片的最高速率48 MB/s。
FPGA;USB2.0;CY7C68013A;數(shù)據(jù)傳輸
引用格式:徐超,劉沖,王永綱. 基于FPGA和USB2.0協(xié)議的通用數(shù)據(jù)傳輸設(shè)計[J].微型機(jī)與應(yīng)用,2016,35(16):41-43.
目前,系統(tǒng)設(shè)備不斷向高速化、集成化、低功耗的方向飛速發(fā)展。而現(xiàn)場可編程門陣列FPGA經(jīng)過這些年的發(fā)展,已經(jīng)成為實現(xiàn)數(shù)字系統(tǒng)的主流平臺之一。FPGA具有高度的靈活性和強(qiáng)大的數(shù)據(jù)處理能力,常被用來定制外設(shè)的控制器以及前端處理模塊。但FPGA并沒有提供和上位機(jī)之間直接通信的接口,為了更方便地對數(shù)據(jù)進(jìn)行后續(xù)的分析和保存,就需要解決FPGA和上位機(jī)之間的數(shù)據(jù)傳輸?shù)慕涌趩栴}。
USB2.0已經(jīng)廣泛使用于個人電腦中,USB2.0相比于以前的USB版本在速度上有兩個很大的提升。USB2.0協(xié)議具有以下優(yōu)點(diǎn):(1)速度快,在高速塊傳輸,最大數(shù)據(jù)字段的模式下,最高可以達(dá)到60 MB/s[1],本文設(shè)計的塊傳輸,512 B數(shù)據(jù)字段的模式下,可達(dá)53.2 MB/s; (2)連接簡單,可即插即用;(3)可支持多設(shè)備采用“級聯(lián)”方式連接外設(shè)。
本文通過USB2.0 的外設(shè)控制器CY7C68013A,實現(xiàn)了FPGA 和上位機(jī)之間數(shù)據(jù)傳輸接口的設(shè)計[2-4],經(jīng)測試,該設(shè)計能夠接近理論上的傳輸速度。
USB系統(tǒng)是一個主從系統(tǒng),所有的命令是由主設(shè)備(上位機(jī))發(fā)出,從設(shè)備接收到命令后,執(zhí)行所要求的操作。在主設(shè)備要求讀數(shù)據(jù)時,從設(shè)備才會向主設(shè)備發(fā)送數(shù)據(jù)。圖1給出了整個設(shè)計的系統(tǒng)結(jié)構(gòu)圖。

圖1 系統(tǒng)結(jié)構(gòu)圖
系統(tǒng)讀寫時,由上位機(jī)的應(yīng)用程序發(fā)起請求,通過驅(qū)動程序接口(API)調(diào)用驅(qū)動程序。驅(qū)動程序控制USB控制器向CY7C68013A發(fā)送數(shù)據(jù),CY7C68013A的SIE模塊對數(shù)據(jù)進(jìn)行解析,然后根據(jù)內(nèi)部的固件程序通過GPIF模塊向FPGA發(fā)送時序波形并讀寫數(shù)據(jù)。在對FPGA進(jìn)行讀寫FIFO或者Register時,F(xiàn)PGA與USB芯片之間的控制信號由內(nèi)部的GPIF決定。
2.1USB2.0接口
USB2.0[5]的接口芯片采用CY7C68013A。該芯片包含了USB2.0的集成微控制器,內(nèi)部集成了一個增強(qiáng)型的8051CPU,該芯片負(fù)責(zé)配置芯片的工作方式、數(shù)據(jù)流的控制等,一個串行接口引擎SIE,解析USB協(xié)議,實現(xiàn)對上位機(jī)的收發(fā),以及可編程的其他外圍接口。該芯片還提供了一種獨(dú)特的架構(gòu),是USB接口和應(yīng)用環(huán)境共享Slave FIFOs,微控制器不需要參與數(shù)據(jù)的傳輸,這樣就大大提高了整個系統(tǒng)的數(shù)據(jù)傳輸速率。本文采用GPIF的模式,通過對GPIF的編程實現(xiàn)數(shù)據(jù)的傳輸。EZ-USB FX2的內(nèi)部結(jié)構(gòu)圖如圖2所示。

圖2 FX2內(nèi)部結(jié)構(gòu)圖
2.2FPGA的接口設(shè)計
FPGA不僅需要和內(nèi)部其他邏輯模塊連接,還需要對USB的GPIF進(jìn)行數(shù)據(jù)的收發(fā)。因此,為通用起見,設(shè)計FPGA接口實現(xiàn)對寄存器的讀、寫和FIFO的讀、寫操作。
GPIF對FPGA的控制信號CTL只有三位,能區(qū)分8種不同的狀態(tài)。為了讓FPGA能區(qū)分寄存器讀、寫(包括地址和數(shù)據(jù))以及FIFO的讀、寫、空閑等7種不同的狀態(tài),CTL控制線的每種編碼決定了唯一的操作狀態(tài)。
2.3芯片固件程序設(shè)計
固件設(shè)計的核心是GPIF的設(shè)計[6-7],GPIF設(shè)計不當(dāng)以及上位機(jī)調(diào)用不合理會導(dǎo)致系統(tǒng)的整體速度不高。
GPIF電路工作在48 MHz時鐘下,數(shù)據(jù)線有16位,兩個周期實現(xiàn)一次FIFO的讀寫,故理論上能夠達(dá)到48 MB/s的傳輸速率。
本文采用了“量子FIFO”的處理結(jié)構(gòu),很好地解決了USB高速模式的帶寬問題。
在GPIF高速數(shù)據(jù)傳輸中,GPIF波形的描述符決定了整個數(shù)據(jù)傳輸過程的時序。通常用Cypress公司的GPIF工具進(jìn)行配置,在GPIF方式下,所有的讀寫和控制邏輯都可以通過軟件編程的形式實現(xiàn),具有很大的靈活性。
由于GPIF的狀態(tài)機(jī)只能由一個狀態(tài)跳轉(zhuǎn)到兩個不同的狀態(tài),而在FIFO讀寫過程中需要檢測的變量和跳轉(zhuǎn)的狀態(tài)比較多,有時就需要進(jìn)行多級跳轉(zhuǎn),這樣嚴(yán)重限制了數(shù)據(jù)的傳輸速度。為解決這個問題,本文在分析了所有的跳轉(zhuǎn)情況后,將正常讀寫FIFO的跳轉(zhuǎn)次數(shù)減少,而將特殊情況跳轉(zhuǎn)次數(shù)增加,使得兩個時鐘周期內(nèi)進(jìn)行一次讀寫操作,這樣保證了功能的實現(xiàn),且保證了48 MB/s的讀寫速度。
圖3給出了FIFO讀操作模式下設(shè)計的GPIF的狀態(tài)轉(zhuǎn)換示意圖。當(dāng)USB控制線設(shè)置為FIFO讀模式時,系統(tǒng)進(jìn)入狀態(tài)S1,此時,申請F(tuán)IFO數(shù)據(jù)線驅(qū)動USB數(shù)據(jù)總線,此時如果GPIF內(nèi)部的FIFO沒有問題且FPGA給出以準(zhǔn)備好的信號,進(jìn)入S2狀態(tài), S2申請讀FIFO,F(xiàn)IFO可讀,則進(jìn)入狀態(tài)S3,向USB總線發(fā)送數(shù)據(jù),如果GPIF的FIFO沒有問題且未讀完,則回到狀態(tài)S2,如此循環(huán),直到數(shù)據(jù)讀完。讀完數(shù)據(jù)后,最終會回到空閑狀態(tài),表明本次數(shù)據(jù)傳輸完成。

圖3 FIFO讀的狀態(tài)圖
從上面的過程中可以看出,在兩個時鐘周期內(nèi)完成了一個16 bit數(shù)據(jù)的傳輸,充分利用了USB2.0的數(shù)據(jù)帶寬,提高了數(shù)據(jù)傳輸速率。
圖4給出了FIFO寫操作模式下的GPIF的轉(zhuǎn)換圖,與上面的分析類似,兩個周期內(nèi)就能夠完成一次數(shù)據(jù)傳輸。

圖4 FIFO寫的狀態(tài)圖
2.4驅(qū)動和應(yīng)用程序設(shè)計
Cypress 提供了Windows系統(tǒng)下的驅(qū)動,并以C++靜態(tài)鏈接庫的形式提供了調(diào)用驅(qū)動的函數(shù)庫。設(shè)計中在此基礎(chǔ)上封裝了讀寄存器、寫寄存器、讀FIFO、寫FIFO四個函數(shù),并以DLL形式提供給用戶。上層使用的是MATLAB平臺,需要在該平臺上配置MEX編譯器,并使用loadlibrary函數(shù)以加載動態(tài)鏈接庫,加載后便可以調(diào)用DLL里提供的讀寫函數(shù)了。DLL也能被其他平臺調(diào)用。
為了驗證該設(shè)計方案,本文在帶有CY7C68013A和XILINX ARTIX-7 的電路板上對數(shù)據(jù)傳輸?shù)恼_性和傳輸速度進(jìn)行了測試。
3.1測試方法
對寄存器的讀寫驗證比較簡單,只需先通過DLL中的讀寫寄存器函數(shù)對不同地址的寄存器進(jìn)行寫操作,然后讀出來進(jìn)行比對即可。
而對FIFO讀操作驗證,需要在FPGA的內(nèi)部例化一個FIFO和一個計數(shù)器,并將計數(shù)器輸出的數(shù)據(jù)從0到65 535依次寫入到FIFO中,然后上層MATLAB中讀到的FIFO的值就應(yīng)該是從0到65 535依次遞增的序列。而通過測量讀取一定數(shù)目的數(shù)據(jù)的時間就可以計算出USB的讀出速度。FIFO寫操作的驗證與FIFO讀類似,不過在將數(shù)據(jù)寫進(jìn)FIFO后,需要由FPGA將FIFO中的數(shù)據(jù)與期望的數(shù)列比較。
3.2測試結(jié)果
本文在MATLAB平臺上進(jìn)行了驗證,對寄存器和FIFO的讀寫操作完整正確,對FIFO進(jìn)行讀寫的實測速度達(dá)到了47 MB/s,接近于理論上的48 MB/s。
本文在USB2.0協(xié)議的基礎(chǔ)上,設(shè)計并實現(xiàn)了FPGA與上位機(jī)之間的高速數(shù)據(jù)傳輸系統(tǒng),驗證了該方案傳輸數(shù)據(jù)的正確性并且實測速度能夠達(dá)到47 MB/s,接近于理論上的48 MB/s傳輸速度。該方案具有穩(wěn)定、高速以及調(diào)用方便的優(yōu)點(diǎn),目前已經(jīng)應(yīng)用于多個實驗裝置中。
[1] 王成儒, 李英偉. USB2.0 原理與工程開發(fā)[M]. 北京: 國防工業(yè)出版社,2004.
[2] 譚安菊,龔彬. USB2.0控制器CY7C68013與FPGA接口的Verilog HDL實現(xiàn)[J]. 電子工程師,2007,33(7):52-55.
[3] 吳振宇,常玉保,馮林. 基于FPGA和USB2.0的高速數(shù)據(jù)采集系統(tǒng)[J]. 儀器儀表學(xué)報,2006,27(S1):125-126.
[4] 安榮,任勇峰,李圣昆. 基于FPGA和USB2.0的數(shù)據(jù)采集系統(tǒng)[J]. 儀表技術(shù)與傳感器,2009(3):49-51.
[5] 錢峰. EZ-USB FX2 單片機(jī)原理、編程及應(yīng)用[M].北京: 北京航空航天大學(xué)出版社,2006.
[6] EZ-USB?Technical Reference Manual[EB/OL]. (2014-05-02)[2016-03-30]http://www.cypress.com/?rID=38232.
[7] Cypress CyAPI Programmer's Reference[EB/OL]. (2011-xx-xx)[2016-03-30]http://www.cypress.com/?docID=41365.
Design of general data transmission based on FPGA and USB2.0 protocol
Xu Chao, Liu Chong, Wang Yonggang
(Department of Modern Physics, University of Science and Technology of China, Hefei 230026, China)
FPGA is widely applied in the data collecting systems and data processing systems due to its high flexibility and strong ability of processing data. USB2.0 is widely used because of its high rate of data transmission and diverse interfaces. This paper designs and implements data transmission between the PC and the FIFO and registers in the FPGA which is based on the peripheral chips CY7C68013A of USB2.0. And the test shows that the data transmission rate can be up to 47 MB/s, which is very close to 48 MB/s, the highest rate of the controlling chip of USB2.0.
FPGA; USB2.0; CY7C68013A; data transmission
TP334
A
10.19358/j.issn.1674- 7720.2016.16.012
2016-03-30)
徐超(1990-),通信作者,男,碩士研究生,主要研究方向:數(shù)字電路。E-mail:xuhaimin@mail.ustc.edu.cn。
劉沖(1989-),男,博士,主要研究方向:數(shù)字電路。
王永綱(1965-),男,教授,主要研究方向:醫(yī)學(xué)成像。