徐 超,劉 沖,王永綱
(中國科學技術大學 近代物理系,安徽 合肥 230026)
?
基于FPGA和USB2.0協(xié)議的通用數(shù)據(jù)傳輸設計
徐超,劉沖,王永綱
(中國科學技術大學 近代物理系,安徽 合肥 230026)
FPGA因其具有高度的靈活性與強大的數(shù)據(jù)處理能力而被廣泛應用于數(shù)據(jù)采集與處理系統(tǒng)中。USB2.0因其數(shù)據(jù)傳輸速率快和接口的多樣化而廣泛使用。以USB2.0控制器CY7C68013A為接口設計和實現(xiàn)了上位機與FPGA中FIFO與寄存器之間的讀寫。經測試表明,該設計達到了47 MB/s的數(shù)據(jù)傳輸速率,接近USB2.0控制芯片的最高速率48 MB/s。
FPGA;USB2.0;CY7C68013A;數(shù)據(jù)傳輸
引用格式:徐超,劉沖,王永綱. 基于FPGA和USB2.0協(xié)議的通用數(shù)據(jù)傳輸設計[J].微型機與應用,2016,35(16):41-43.
目前,系統(tǒng)設備不斷向高速化、集成化、低功耗的方向飛速發(fā)展。而現(xiàn)場可編程門陣列FPGA經過這些年的發(fā)展,已經成為實現(xiàn)數(shù)字系統(tǒng)的主流平臺之一。FPGA具有高度的靈活性和強大的數(shù)據(jù)處理能力,常被用來定制外設的控制器以及前端處理模塊。但FPGA并沒有提供和上位機之間直接通信的接口,為了更方便地對數(shù)據(jù)進行后續(xù)的分析和保存,就需要解決FPGA和上位機之間的數(shù)據(jù)傳輸?shù)慕涌趩栴}。
USB2.0已經廣泛使用于個人電腦中,USB2.0相比于以前的USB版本在速度上有兩個很大的提升。USB2.0協(xié)議具有以下優(yōu)點:(1)速度快,在高速塊傳輸,最大數(shù)據(jù)字段的模式下,最高可以達到60 MB/s[1],本文設計的塊傳輸,512 B數(shù)據(jù)字段的模式下,可達53.2 MB/s; (2)連接簡單,可即插即用;(3)可支持多設備采用“級聯(lián)”方式連接外設。
本文通過USB2.0 的外設控制器CY7C68013A,實現(xiàn)了FPGA 和上位機之間數(shù)據(jù)傳輸接口的設計[2-4],經測試,該設計能夠接近理論上的傳輸速度。
USB系統(tǒng)是一個主從系統(tǒng),所有的命令是由主設備(上位機)發(fā)出,從設備接收到命令后,執(zhí)行所要求的操作。在主設備要求讀數(shù)據(jù)時,從設備才會向主設備發(fā)送數(shù)據(jù)。圖1給出了整個設計的系統(tǒng)結構圖。
圖1 系統(tǒng)結構圖
系統(tǒng)讀寫時,由上位機的應用程序發(fā)起請求,通過驅動程序接口(API)調用驅動程序。驅動程序控制USB控制器向CY7C68013A發(fā)送數(shù)據(jù),CY7C68013A的SIE模塊對數(shù)據(jù)進行解析,然后根據(jù)內部的固件程序通過GPIF模塊向FPGA發(fā)送時序波形并讀寫數(shù)據(jù)。在對FPGA進行讀寫FIFO或者Register時,F(xiàn)PGA與USB芯片之間的控制信號由內部的GPIF決定。
2.1USB2.0接口
USB2.0[5]的接口芯片采用CY7C68013A。該芯片包含了USB2.0的集成微控制器,內部集成了一個增強型的8051CPU,該芯片負責配置芯片的工作方式、數(shù)據(jù)流的控制等,一個串行接口引擎SIE,解析USB協(xié)議,實現(xiàn)對上位機的收發(fā),以及可編程的其他外圍接口。該芯片還提供了一種獨特的架構,是USB接口和應用環(huán)境共享Slave FIFOs,微控制器不需要參與數(shù)據(jù)的傳輸,這樣就大大提高了整個系統(tǒng)的數(shù)據(jù)傳輸速率。本文采用GPIF的模式,通過對GPIF的編程實現(xiàn)數(shù)據(jù)的傳輸。EZ-USB FX2的內部結構圖如圖2所示。
圖2 FX2內部結構圖
2.2FPGA的接口設計
FPGA不僅需要和內部其他邏輯模塊連接,還需要對USB的GPIF進行數(shù)據(jù)的收發(fā)。因此,為通用起見,設計FPGA接口實現(xiàn)對寄存器的讀、寫和FIFO的讀、寫操作。
GPIF對FPGA的控制信號CTL只有三位,能區(qū)分8種不同的狀態(tài)。為了讓FPGA能區(qū)分寄存器讀、寫(包括地址和數(shù)據(jù))以及FIFO的讀、寫、空閑等7種不同的狀態(tài),CTL控制線的每種編碼決定了唯一的操作狀態(tài)。
2.3芯片固件程序設計
固件設計的核心是GPIF的設計[6-7],GPIF設計不當以及上位機調用不合理會導致系統(tǒng)的整體速度不高。
GPIF電路工作在48 MHz時鐘下,數(shù)據(jù)線有16位,兩個周期實現(xiàn)一次FIFO的讀寫,故理論上能夠達到48 MB/s的傳輸速率。
本文采用了“量子FIFO”的處理結構,很好地解決了USB高速模式的帶寬問題。
在GPIF高速數(shù)據(jù)傳輸中,GPIF波形的描述符決定了整個數(shù)據(jù)傳輸過程的時序。通常用Cypress公司的GPIF工具進行配置,在GPIF方式下,所有的讀寫和控制邏輯都可以通過軟件編程的形式實現(xiàn),具有很大的靈活性。
由于GPIF的狀態(tài)機只能由一個狀態(tài)跳轉到兩個不同的狀態(tài),而在FIFO讀寫過程中需要檢測的變量和跳轉的狀態(tài)比較多,有時就需要進行多級跳轉,這樣嚴重限制了數(shù)據(jù)的傳輸速度。為解決這個問題,本文在分析了所有的跳轉情況后,將正常讀寫FIFO的跳轉次數(shù)減少,而將特殊情況跳轉次數(shù)增加,使得兩個時鐘周期內進行一次讀寫操作,這樣保證了功能的實現(xiàn),且保證了48 MB/s的讀寫速度。
圖3給出了FIFO讀操作模式下設計的GPIF的狀態(tài)轉換示意圖。當USB控制線設置為FIFO讀模式時,系統(tǒng)進入狀態(tài)S1,此時,申請FIFO數(shù)據(jù)線驅動USB數(shù)據(jù)總線,此時如果GPIF內部的FIFO沒有問題且FPGA給出以準備好的信號,進入S2狀態(tài), S2申請讀FIFO,F(xiàn)IFO可讀,則進入狀態(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)圖
從上面的過程中可以看出,在兩個時鐘周期內完成了一個16 bit數(shù)據(jù)的傳輸,充分利用了USB2.0的數(shù)據(jù)帶寬,提高了數(shù)據(jù)傳輸速率。
圖4給出了FIFO寫操作模式下的GPIF的轉換圖,與上面的分析類似,兩個周期內就能夠完成一次數(shù)據(jù)傳輸。
圖4 FIFO寫的狀態(tài)圖
2.4驅動和應用程序設計
Cypress 提供了Windows系統(tǒng)下的驅動,并以C++靜態(tài)鏈接庫的形式提供了調用驅動的函數(shù)庫。設計中在此基礎上封裝了讀寄存器、寫寄存器、讀FIFO、寫FIFO四個函數(shù),并以DLL形式提供給用戶。上層使用的是MATLAB平臺,需要在該平臺上配置MEX編譯器,并使用loadlibrary函數(shù)以加載動態(tài)鏈接庫,加載后便可以調用DLL里提供的讀寫函數(shù)了。DLL也能被其他平臺調用。
為了驗證該設計方案,本文在帶有CY7C68013A和XILINX ARTIX-7 的電路板上對數(shù)據(jù)傳輸?shù)恼_性和傳輸速度進行了測試。
3.1測試方法
對寄存器的讀寫驗證比較簡單,只需先通過DLL中的讀寫寄存器函數(shù)對不同地址的寄存器進行寫操作,然后讀出來進行比對即可。
而對FIFO讀操作驗證,需要在FPGA的內部例化一個FIFO和一個計數(shù)器,并將計數(shù)器輸出的數(shù)據(jù)從0到65 535依次寫入到FIFO中,然后上層MATLAB中讀到的FIFO的值就應該是從0到65 535依次遞增的序列。而通過測量讀取一定數(shù)目的數(shù)據(jù)的時間就可以計算出USB的讀出速度。FIFO寫操作的驗證與FIFO讀類似,不過在將數(shù)據(jù)寫進FIFO后,需要由FPGA將FIFO中的數(shù)據(jù)與期望的數(shù)列比較。
3.2測試結果
本文在MATLAB平臺上進行了驗證,對寄存器和FIFO的讀寫操作完整正確,對FIFO進行讀寫的實測速度達到了47 MB/s,接近于理論上的48 MB/s。
本文在USB2.0協(xié)議的基礎上,設計并實現(xiàn)了FPGA與上位機之間的高速數(shù)據(jù)傳輸系統(tǒng),驗證了該方案傳輸數(shù)據(jù)的正確性并且實測速度能夠達到47 MB/s,接近于理論上的48 MB/s傳輸速度。該方案具有穩(wěn)定、高速以及調用方便的優(yōu)點,目前已經應用于多個實驗裝置中。
[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]. 儀器儀表學報,2006,27(S1):125-126.
[4] 安榮,任勇峰,李圣昆. 基于FPGA和USB2.0的數(shù)據(jù)采集系統(tǒng)[J]. 儀表技術與傳感器,2009(3):49-51.
[5] 錢峰. EZ-USB FX2 單片機原理、編程及應用[M].北京: 北京航空航天大學出版社,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ī)學成像。