《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 模擬設(shè)計 > 業(yè)界動態(tài) > 基于FPGA和USB3.0的通用數(shù)據(jù)傳輸系統(tǒng)設(shè)計

基于FPGA和USB3.0的通用數(shù)據(jù)傳輸系統(tǒng)設(shè)計

2017-04-27
作者:匡鵬,,劉沖,王永綱
來源:2017年微型機與應(yīng)用第7期

  匡鵬,,劉沖,,王永綱

 ?。ㄖ袊茖W(xué)技術(shù)大學(xué) 近代物理系,安徽 合肥 230026)

       摘要現(xiàn)場可編程門陣列(FPGA)的高度靈活性和強大的數(shù)據(jù)處理能力,,使其在越來越多的領(lǐng)域得到應(yīng)用,。USB 3.0也是目前主流的數(shù)據(jù)傳輸協(xié)議之一,具有速度快,、功耗低等優(yōu)點,。將USB 3.0接口應(yīng)用到FPGA上,能夠有效地解決FPGA與上位機之間的數(shù)據(jù)傳輸問題,,大大提高生產(chǎn)效率,。文章利用USB 3.0的控制器芯片CYUSB3014實現(xiàn)了FPGA與上位機之間的高達390 MB/s的數(shù)據(jù)傳輸系統(tǒng)。

  關(guān)鍵詞高速數(shù)據(jù)傳輸系統(tǒng),;現(xiàn)場可編程門陣列,;USB 3.0;CYUSB3014

  中圖分類號:TP334.7;TN791文獻標識碼:ADOI: 10.19358/j.issn.1674-7720.2017.07.008

  引用格式:匡鵬,,劉沖,,王永綱.基于FPGA和USB3.0的通用數(shù)據(jù)傳輸系統(tǒng)設(shè)計[J].微型機與應(yīng)用,2017,36(7):26-28,34.

0引言

  現(xiàn)場可編程門陣列(FPGA)具有極高的靈活性以及強大的數(shù)據(jù)處理能力,,在科學(xué)研究,、大型實驗儀器和商用醫(yī)療設(shè)備等諸多領(lǐng)域中早已被成熟使用,。但是FPGA本身并沒有提供任何與上位機通信的接口,這使得FPGA與上位機之間傳輸數(shù)據(jù)變得很不方便,。開發(fā)者每次都必須根據(jù)具體外設(shè)重新開發(fā)FPGA和上位機的數(shù)據(jù)傳輸系統(tǒng),,從而降低了開發(fā)效率。

  通用串行總線(USB)3.0標準早在2008年就已經(jīng)提出,,現(xiàn)在已取代USB2.0成為USB主要使用版本,。USB3.0比USB2.0有更高的傳輸速度和更低的功耗。USB3.0的協(xié)議速度高達5.0 Gb/s(625 MB/s),,是USB2.0的10倍之多,。CYUSB3014是賽普拉斯(CYPRESS)公司設(shè)計的一款USB3.0外設(shè)控制芯片,它的主要功能是在USB主機與外設(shè)之間傳輸高寬帶數(shù)據(jù),。該芯片提供一個第二代通用可編程接口(GPIF II),,開發(fā)者可以對GPIF II和FPGA編程,來實現(xiàn)從FPGA到USB控制器,,再到上位機的數(shù)據(jù)傳輸通道,。

  本文利用USB3.0外設(shè)控制器CYUSB3014,實現(xiàn)了基于FPGA與上位機之間的數(shù)據(jù)傳輸接口設(shè)計[13],。經(jīng)測試,,本設(shè)計可以實現(xiàn)390 MB/s的FPGA到上位機的數(shù)據(jù)傳輸通道,以及355 MB/s的上位機到FPGA的數(shù)據(jù)傳輸通道,,幾乎達到了該芯片支持的最高速度(400 MB/s),。

1系統(tǒng)結(jié)構(gòu)

001.jpg

  圖1為整個系統(tǒng)的結(jié)構(gòu)。上位機的軟件應(yīng)用程序(例如MATLAB)通過調(diào)用驅(qū)動程序中的應(yīng)用程序編程接口(API),,向CYUSB3014控制器發(fā)送數(shù)據(jù)或從它接收數(shù)據(jù),;USB控制器芯片內(nèi)部通過直接內(nèi)存存取(DMA)互聯(lián)結(jié)構(gòu)建立USB端點到GPIF II的數(shù)據(jù)傳輸通道,;FPGA內(nèi)部接口邏輯模塊負責(zé)其他邏輯模塊與GPIF之間的數(shù)據(jù)傳輸,。

  圖1系統(tǒng)整體結(jié)構(gòu)本設(shè)計以FPGA接口邏輯為主設(shè)備,GPIF為從設(shè)備,,接口邏輯負責(zé)控制整個系統(tǒng)的工作狀態(tài),。為了通用性起見,本文設(shè)計了上位機對FPGA進行FIFO讀寫和寄存器讀寫共4種功能,。FIFO讀寫可以完成高寬帶高速數(shù)據(jù)的雙向傳輸,;寄存器讀寫則可以完成控制和監(jiān)測的功能。這樣的設(shè)計能夠滿足大部分FPGA設(shè)計對上位機接口的需求,。

2控制器芯片工作原理

  賽普拉斯公司設(shè)計生產(chǎn)的USB3.0外設(shè)控制芯片CYUSB3014具有高度集成的靈活特性,,它具有一個可進行完全配置的并行通用可編程接口GPIF II,可與任何處理器,、ASIC或FPGA連接,。芯片集成了USB 3.0和USB 2.0物理層(PHY)以及32位ARM926EJS微處理器,,具有強大的數(shù)據(jù)處理能力,并可用于構(gòu)建定制應(yīng)用[1],。

  圖2表示了控制器芯片的數(shù)據(jù)輸入輸出,。其中DMA描述符(DMA Descriptor)保存了DMA緩沖區(qū)的地址和大小,以及指向下一個DMA描述符的指針,。套接字(Socket)是外設(shè)硬件模塊與RAM之間的連接點,,每個外設(shè)硬件模塊(如USB、GPIF,、UART和SPI)具有各自固定的套接字數(shù)量,,簡單來說可以把套接字看成外設(shè)的接口。DMA緩沖區(qū)(DMA Buffer)是RAM的一部分,,用來緩存外設(shè)間需要傳輸?shù)臄?shù)據(jù),,這部分RAM的地址正是DMA描述符中保存的地址。

  

002.jpg

  當外設(shè)之間進行數(shù)據(jù)傳輸時,,例如將GPIF的數(shù)據(jù)傳輸?shù)経SB端點,,控制器會自動加載相應(yīng)的DMA描述符,然后從GPIF的套接字接收數(shù)據(jù),,保存到RAM中DMA描述符所指定的地址,。當前DMA描述符處理完后,系統(tǒng)會自動加載下一個DMA描述符,。DMA緩沖區(qū)的切換需要消耗幾個微秒的時間,在切換DMA緩沖區(qū)時,,當前的DMA通道不能進行數(shù)據(jù)傳輸[4],。當某個DMA緩沖區(qū)被寫滿,或者GPIF主動提交數(shù)據(jù)包時,,系統(tǒng)開始把該緩沖區(qū)的數(shù)據(jù)發(fā)送到USB端點,。從USB端點到GPIF的數(shù)據(jù)傳輸過程與之類似,只不過數(shù)據(jù)傳輸?shù)姆较騽偤孟喾础?/p>

3系統(tǒng)設(shè)計

  3.1控制器芯片固件設(shè)計

  USB控制器芯片的固件設(shè)計包括GPIF II狀態(tài)機設(shè)計和運行于芯片內(nèi)部ARM微處理器上的可執(zhí)行程序設(shè)計,。其中,,GPIF II狀態(tài)機的設(shè)計是關(guān)鍵,它描述了USB芯片如何響應(yīng)主設(shè)備FPGA接口邏輯模塊發(fā)出的請求,。

  圖3給出了USB控制芯片與FPGA的接口連接,。其中,CLK是由FPGA提供的頻率最高為100 MHz的時鐘信號,。DATA信號是雙向數(shù)據(jù)線,,完成GPIF與FPGA之間的雙向數(shù)據(jù)傳輸。ADDR為地址線,,用于選擇使用哪個GPIF進程傳輸數(shù)據(jù),。GPIF共有4個獨立進程,,每個進程與相應(yīng)的DMA通道綁定。FPGA通過改變地址線ADDR,,從而選擇使用哪個DMA通道進行數(shù)據(jù)傳輸,。控制信號均由FPGA發(fā)出,,控制信號包括SLOE,、SLCS、SLWR,、SLRD,、PKTEND,這些信號均為低電平有效,。SLCS為片選信號,,系統(tǒng)工作時,SLCS必須始終有效(即始終為0),。SLRD為讀請求信號,,該信號有效時,GPIF會把緩存在RAM中的數(shù)據(jù)傳輸給FPGA,。SLOE為輸出使能信號,,它的唯一作用是驅(qū)動數(shù)據(jù)總線DATA翻轉(zhuǎn)。因為FPGA發(fā)出讀請求后,,USB芯片并不能立刻將有效數(shù)據(jù)傳遞到GPIF端點,,從SLRD有效到DATA有效有兩個時鐘周期的延遲[5],因此需要額外的數(shù)據(jù)總線驅(qū)動信號SLOE,。SLWR是寫請求信號,,該信號有效時,F(xiàn)PGA會發(fā)送數(shù)據(jù)給GPIF,,GPIF隨之將這些數(shù)據(jù)緩存在RAM中,。PKTEND為傳輸結(jié)束信號,該信號用來標志此次數(shù)據(jù)傳輸結(jié)束,。

  

003.jpg

  另外,,還有4個DMA標志信號FLAGX。這些信號由USB芯片發(fā)出,,F(xiàn)PGA接收,。這些信號并不是由GPIF狀態(tài)機控制的,F(xiàn)LAG信號用來標志指定DMA通道對應(yīng)的緩沖區(qū)的狀態(tài),。

  3.2FPGA接口設(shè)計

  FPGA接口既要完成與USB控制器GPIF II對接,,同時也要提供對FPGA內(nèi)部邏輯模塊的數(shù)據(jù)傳輸接口。FPGA接口邏輯是本系統(tǒng)的核心,它作為主設(shè)備,,控制著從設(shè)備GPIF的工作狀態(tài),。FPGA接口邏輯模塊內(nèi)部有一些標志工作狀態(tài)的寄存器,用戶可以通過上位機軟件來配置這些寄存器,,從而指定整個系統(tǒng)的工作模式,。因此,在執(zhí)行某種操作之前,,需要通過上位機軟件先對FPGA接口邏輯模塊進行配置,。

 

004.jpg

  FPGA接口邏輯除了具有3.1節(jié)中與GPIF II相連接的接口外,還提供了其他接口與FPGA內(nèi)部其他邏輯模塊相連接,。圖4給出了這些接口信號,。CLK是接口的工作時鐘(100 MHz),同時這個時鐘也是GPIF II的工作時鐘,。RST是全局復(fù)位信號,。剩下的信號則用來完成FIFO讀寫和寄存器讀寫的功能。

  在進行FIFO讀操作時,,使用的接口信號是RD_ACK,、RD_VALID和RD_DATA。當RD_VALID有效時,,標志著外部FIFO數(shù)據(jù)有效,,RD_ACK作為應(yīng)答信號告知外部邏輯已經(jīng)完成對該有效數(shù)據(jù)的讀取。使用時,,先通過上位機軟件對接口邏輯模塊進行配置,,配置的信息確定了接口模塊將工作在讀FIFO模式,同時還確定了此次讀FIFO的數(shù)據(jù)個數(shù),。當讀取FIFO的數(shù)據(jù)個數(shù)達到上位機所請求的個數(shù)時,,接口邏輯模塊停止讀取外部FIFO,同時停止向GPIF發(fā)送數(shù)據(jù),,并且發(fā)出PKTEND信號,標志著此次傳輸結(jié)束,。

  在進行FIFO寫操作時,,使用的接口信號是WR_ACK、WR_READY,、WR_DATA,。當WR_READY有效時,標志著接口模塊可以向外部FIFO寫入數(shù)據(jù),,WR_ACK作為應(yīng)答信號告知外部邏輯已經(jīng)完成了數(shù)據(jù)的寫入,。與讀FIFO類似,使用時先通過上位機軟件對接口模塊進行配置,。配置信息確定了接口模塊工作在FIFO寫模式,,同時確定了將要寫入的數(shù)據(jù)個數(shù),。

005.jpg

  圖5FPGA接口邏輯狀態(tài)機圖5給出了FPGA接口邏輯模塊的狀態(tài)機向GPIF收發(fā)數(shù)據(jù)時的工作流程。系統(tǒng)最初處在空閑狀態(tài)(IDLE),,然后根據(jù)配置信息確定的工作模式,,以及DMA通道的FLAG標志信號,進入相應(yīng)的狀態(tài)機流程中,。

  此外,,接口邏輯模塊還實現(xiàn)了寄存器讀寫的功能,寄存器讀寫使用的DMA通道與FIFO讀寫的通道相同,,只是傳輸?shù)臄?shù)據(jù)個數(shù)始終為1,。

  3.3上位機軟件設(shè)計

  賽普拉斯官方提供了USB控制器芯片的驅(qū)動程序,并且提供了相應(yīng)的應(yīng)用程序接口(API),。為了使用方便,,本設(shè)計在官方提供的API基礎(chǔ)上,將主要功能(FIFO讀寫和寄存器讀寫)用C++封裝成動態(tài)鏈接庫(DLL),。這樣用戶可以直接在自己的C/C++工程中調(diào)用已經(jīng)封裝好的庫函數(shù),。在封裝庫函數(shù)時,已經(jīng)將配置FPGA接口模塊這步工作封裝在了相應(yīng)的功能函數(shù)中,,這樣用戶就不必先單獨配置FPGA邏輯模塊,。

  考慮到現(xiàn)在大部分研究階段的數(shù)據(jù)處理工作都是使用MATLAB進行,本設(shè)計進一步將DLL函數(shù)封裝成MATLAB函數(shù),,以便MATLAB能夠直接使用USB的相關(guān)功能,。

4測試結(jié)果

  4.1測試環(huán)境


006.jpg

  測試環(huán)境如表1所示。

  4.2寄存器讀寫測試

  寄存器讀寫只涉及到正確性問題,,測試工程在FPGA內(nèi)部例化了16個32 bit的寄存器,。測試時對某個寄存器隨機寫入一個數(shù)值,然后再把該寄存器的值讀回來,,比較讀取的值是否等于寫入的數(shù)值,。經(jīng)循環(huán)對這16個寄存器進行讀寫測試,發(fā)現(xiàn)寄存器讀寫功能能夠穩(wěn)定地正常工作,。

  4.3FIFO回環(huán)測試

  FIFO回環(huán)測試是為了驗證FIFO讀寫的正確性,。測試時,MATLAB先將1 024個數(shù)據(jù)寫入到FPGA的FIFO中,,然后再將這些數(shù)據(jù)從該FIFO中讀出,,驗證讀出的數(shù)據(jù)是否是原來寫入的數(shù)據(jù)。經(jīng)過測試,,F(xiàn)IFO讀寫也能正常穩(wěn)定地工作,。

  4.4讀寫FIFO速度測試

  測試讀FIFO時,F(xiàn)PGA內(nèi)部一直將某個加1的計數(shù)器的值寫入FIFO,MATLAB則從該FIFO中讀取數(shù)據(jù),。測試寫FIFO時,,MATLAB一直將數(shù)據(jù)寫入FPGA的FIFO中,F(xiàn)PGA內(nèi)部邏輯負責(zé)讀取該FIFO,。MATLAB每次讀取或者寫入5 000 000個數(shù)據(jù)(每個數(shù)據(jù)32 bit),,循環(huán)操作50次,記錄這50次操作所消耗的總時間,,記為t(單位為s),。則,讀寫FIFO的速度為:

  50×5 000 000×328×1 000 000×t(MB/s)

  經(jīng)測試,,本設(shè)計讀FIFO的速度能夠達到390 MB/s左右,,而寫FIFO的速度能夠達到355 MB/s左右。

5結(jié)論

  本設(shè)計利用USB 3.0控制器芯片CYUSB3014實現(xiàn)了FPGA與上位機之間的高寬帶數(shù)據(jù)傳輸系統(tǒng),。主要實現(xiàn)的功能包括上位機對FPGA的寄存器讀寫和FIFO讀寫,。經(jīng)測試,這些功能都能穩(wěn)定地正常工作,。上位機讀FIFO的速度能夠達到390 MB/s,,寫FIFO的速度能夠達到355 MB/s,接近于CYUSB3014芯片支持的理論最高速度400 MB/s,。之所以讀FIFO的速度會比寫FIFO的速度高出不少,,主要原因是因為在設(shè)計固件程序時,讀FIFO使用了DMA雙通道,,而寫FIFO則只使用了DMA單通道,。

  參考文獻

  [1] 陳松. 基于USB3.0的高速數(shù)據(jù)傳輸系統(tǒng)的研究與設(shè)計[D]. 成都: 電子科技大學(xué), 2014.

 ?。?] 徐超, 劉沖, 王永綱. 基于FPGA和USB2.0協(xié)議的通用數(shù)據(jù)傳輸設(shè)計[J]. 微型機與應(yīng)用, 2016,35(16): 41-43.

 ?。?] 王成儒, 李英偉. USB2.0原理與工程開發(fā)[M]. 北京: 國防工業(yè)出版社, 2004.

  [4] Manaskant Desai, Karthik Sivaramskrishnan. Optimizing USB 3.0 throughput with EZ USB FX3TM[EB/OL]. (2015 10 22)[2016-10-30]. http://www.cypress.com/file/125281.

 ?。?] Rama Sai Krishna V. Designing with the EZ USB FX3 Slave FIFO Interface[EB/OL]. (2014 07 21)[2016 10 30]. http://www.cypress.com/file/136056.


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,并不代表本網(wǎng)站贊同其觀點,。轉(zhuǎn)載的所有的文章,、圖片、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有,。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經(jīng)濟損失,。聯(lián)系電話:010-82306118,;郵箱:aet@chinaaet.com。