基于FPGA的異步USB數據傳輸系統設計
摘要:設計實(shí)現了以FPGA為主控制單元,采用EZ-USB FX2微處理器為接口芯片的快速數據傳輸系統。文章給出了FPGA和CY7C68013之間數據傳輸的軟硬件設計方案,著(zhù)重介紹了FPGA內部建構的FIFO原理及程序實(shí)現方法,并以FLASH存儲模塊為例,通過(guò)FX2與FLASH握手過(guò)程的設計,實(shí)現了數據存儲器與計算機之間的數據高速傳輸。應用結果表明,此數據傳輸系統可靠有效,具有一定的通用性,可用于其他使用USB進(jìn)行數據傳輸的系統中。
本文引用地址:http://dyxdggzs.com/article/201610/308420.htm0 引言
現代電子技術(shù)的進(jìn)步使得外設的種類(lèi)日益繁多,接入數量急劇增加,傳統的安裝數據采集卡的方式,由于存在安裝不便、擴展困難、傳輸質(zhì)量不高等諸多缺點(diǎn),漸漸滿(mǎn)足不了數據采集過(guò)程中對復雜外設和數據傳輸速率的要求。此外,在需要移動(dòng)數據采集的場(chǎng)合,普通筆記本電腦以及絕大部分便攜式數據采集設備都不再提供PCI插槽。因此采用統一、便捷的數據傳輸接口來(lái)替代原有方式,其緊迫性日益凸顯。通用串行總線(xiàn)(USB)作為一個(gè)接口規范把不同類(lèi)型的接口統一起來(lái),且其外接設備具有熱插拔、易擴展、傳輸速度快等優(yōu)點(diǎn),已經(jīng)成為各類(lèi)筆記本和便攜設備數據傳輸的主流接口。
本設計使用支持USB2.0協(xié)議的CY7C68013芯片,作為上位機與FPGA之間的傳輸接口,以FPGA為主控制單元,實(shí)現了數據的高速傳輸。文章給出了此數據傳輸系統的硬件設計方案,著(zhù)重介紹了FPGA控制模塊中內部集成FIFO的結構原理和關(guān)鍵程序模塊的實(shí)現方式。本系統設計方案結構簡(jiǎn)單、傳輸速度快、具有一定的可擴展性。
1 系統硬件設計
數據傳輸系統硬件原理框圖如圖1所示,主要由USB傳輸控制器EZ-USB FX2、FPGA主控制單元、外設模塊構成。數據采集模塊在中心控制單元的控制下對信號、數據等進(jìn)行采集,并把數據最終轉入數據外設中進(jìn)行存儲。上位機經(jīng)傳輸控制模塊(FX2)發(fā)送控制指令到主控制單元(FPGA)內部后,經(jīng)過(guò)串并轉換進(jìn)行指令解碼,解碼后按照相應的指令要求從數據外設(FLASH)中進(jìn)行數據讀取。從而實(shí)現將外設存儲系統中的數據快速上傳到上位機中保存處理。

1.1 USB傳輸控制器
本系統USB傳輸接口芯片選擇Cypress公司的CY7C68013,它是Cypress公司推出的EZ-USB FX2系列產(chǎn)品之一,集成USB2.0的微處理器,具有增強型8051內核性能,智能串行引擎(SIE),通用可編程接口(GPIF),8.5KB的RAM和FIFO存儲器,支持12Mb/s的全速速率和1480 Mb/s的高速傳輸速率,最大限度地滿(mǎn)足了USB 2.0的總線(xiàn)帶寬。其內部結
構如圖2所示。

CY7C68013由于其內部集成有獨立于微處理器的USB核,其可被配置成GPIF(可編程接口)和SlaveFIFO(主從)等多種接口模式,使數據傳輸通過(guò)執行USB本身的協(xié)議來(lái)完成。在此過(guò)程中CPU可不參與數據傳輸,從而使數據的傳輸速率大大提高,同時(shí)也簡(jiǎn)化了固件代碼的編寫(xiě)。本設計采用FX2的GPIF數據傳輸方式,時(shí)序簡(jiǎn)單、編程靈活,可以很容易地從RAM中讀取數據。
1.2 FPGA主控制單元
本設計采用Altera公司的EP1K30QC208作為主控芯片,實(shí)現對數據傳輸過(guò)程的控制。它包括1728個(gè)邏輯單元,成本較低,適用于小系統編程。在此硬件系統中FPGA的作用主要有二個(gè):一是實(shí)現對所傳輸數據的控制。上位機經(jīng)USB傳輸控制模塊(FX2)發(fā)送控制指令到FPGA主控制單元后,經(jīng)過(guò)其內部串并轉換,實(shí)現指令解碼。解碼后按照要求從數據外設(FLASH)中進(jìn)行數據讀取,并根據FIFO狀態(tài)進(jìn)行數據傳輸控制;二是內部建構一個(gè)FIFO存儲器。由于本設計是對FLASH存儲器進(jìn)行讀數操作,其數據傳輸是以頁(yè)為單位,讀數時(shí)頁(yè)與頁(yè)之間有一小段時(shí)間間隔,數據輸出不是連續的。為實(shí)現FX2讀取FLASH中的數據,需要在FPGA建構FIFO作為數據過(guò)渡,先將FLASH中的數據讀到FIFO中,CY7C68013傳輸控制器再從FIFO中讀取數據。
2 主控單元軟件設計
根據本系統主控制單元的作用,FPGA要實(shí)現上文所述的主要功能,其關(guān)鍵在于FX2與FLASH的握手過(guò)程的設計,滿(mǎn)足此過(guò)程的內部FIFO的建構和相關(guān)標志信號的產(chǎn)生。
2.1 FX2與FLASH的握手過(guò)程
FPGA主控單元先將數據存儲到內部的FIFO中,然后CY7C68013再從FIFO中讀取數據。由于讀取和寫(xiě)入的速度是不同的,可能讀比寫(xiě)快,也可能寫(xiě)比讀快。為防止傳輸時(shí)數據丟失,設計如下的握手過(guò)程:FPGA內部的“讀數控制”模塊不斷進(jìn)行判斷,只要FIFO不滿(mǎn)它就一直向FIFO中寫(xiě)入數據。對于外部FX2,只要判斷FIFO不空它就從FIFO中讀取數據。這樣FIFO的讀寫(xiě)就組成了一個(gè)閉環(huán),保證了讀數的完整準確。在數據傳輸握手方式確定以后可能出現兩種情況:1)FIFO的寫(xiě)入速度大于讀取速度,這樣寫(xiě)地址慢慢就追上讀地址,此時(shí)總的傳輸速度就取決于讀取速度。2)FIFO的讀取速度大于寫(xiě)入速度,這樣讀地址慢慢就追上寫(xiě)地址,此時(shí)總的傳輸速度就由寫(xiě)入速度決定。在FPGA中編寫(xiě)“標志位
產(chǎn)生”程序模塊,產(chǎn)生滿(mǎn)、空信號作為FX2與FLASH傳輸過(guò)程中的握手信號,是保證數據傳輸穩定可靠的關(guān)鍵。
2.2 內部建構的FIFO原理及關(guān)鍵程序的流程
FIFO的本質(zhì)是一種特殊的雙口RAM,大部分FPGA內部就有雙口RAM資源。FIFO結構的特點(diǎn)是先進(jìn)先出,對外它是一種沒(méi)有地址控制的特殊緩存。在程序編寫(xiě)過(guò)程中,內部FIFO要求只要接收RD、WR使能信號,就能進(jìn)行讀寫(xiě)工作。在此過(guò)程中,整個(gè)FIFO模塊對外不顯示地址,只需要給出表現內部狀態(tài)的滿(mǎn)、半滿(mǎn)和空信號即可。FX2和FPGA內部的“讀數控制”模塊根據這些信號對FIFO進(jìn)行數據傳輸控制。FPGA內部建構的FIFO原理圖如圖3所示。

FIFO產(chǎn)生滿(mǎn)、空狀態(tài)標志信號由“標志位產(chǎn)生”程序模塊產(chǎn)生,滿(mǎn)、空狀態(tài)信號均采用寫(xiě)地址和讀地址相減(或讀地址和寫(xiě)地址相減)的結果來(lái)判斷雙口RAM此時(shí)的狀態(tài)。此外,還可以據此得到FIFO的半滿(mǎn)狀態(tài)信號,以此可容易地標示FIFO滿(mǎn)空深度。FIFO滿(mǎn)、空、半滿(mǎn)標志信號的程序流程基本一致,只不過(guò)判斷比較的差值存在不同。FIFO滿(mǎn)時(shí)地址差值為1023,空時(shí)為1,半滿(mǎn)是差值大于512。以半滿(mǎn)信號產(chǎn)生為例,標志位產(chǎn)生程序流程如圖4所示。

為了避免時(shí)序錯誤,還可以任意設定一定的滿(mǎn)空深度。例如可以設定當地址差大于1000時(shí)即認為FIFO己滿(mǎn),不再向FIFO中寫(xiě)入數據,以避免錯誤的出現。
3 結語(yǔ)
隨著(zhù)便攜式數據存儲系統的普及,基于USB的數據傳輸系統受到了普遍關(guān)注。本文設計的基于EZ-USB FX2微處理器的數據傳輸系統,實(shí)現了上位機通過(guò)USB端口對FLASH存儲器的快速讀取操作,并成功地應用在某一車(chē)載數據盒工程項目中。測試結果表明,系統傳輸過(guò)程穩定,速度較高,與上位機接口方式嚴格遵守USB 2.0協(xié)議,具有很強的通用性,適合即插即用的工作場(chǎng)合。本系統基于FPGA的主控單元配置方案便于軟件系統的升級與調試,如果搭配合適的傳感器和相應的信號調理電路,就可以實(shí)現對多種信號的采集處理,再配以合適的存儲模塊完全可以構成完備的數據采集存儲系統。本設計對于一般的數據傳輸系統的設計及傳統接口改造具有一定的借鑒意義。
評論