基于FPGA的異步USB數(shù)據(jù)傳輸系統(tǒng)設計
摘要:設計實現(xiàn)了以FPGA為主控制單元,采用EZ-USB FX2微處理器為接口芯片的快速數(shù)據(jù)傳輸系統(tǒng)。文章給出了FPGA和CY7C68013之間數(shù)據(jù)傳輸?shù)能浻布O計方案,著重介紹了FPGA內部建構的FIFO原理及程序實現(xiàn)方法,并以FLASH存儲模塊為例,通過FX2與FLASH握手過程的設計,實現(xiàn)了數(shù)據(jù)存儲器與計算機之間的數(shù)據(jù)高速傳輸。應用結果表明,此數(shù)據(jù)傳輸系統(tǒng)可靠有效,具有一定的通用性,可用于其他使用USB進行數(shù)據(jù)傳輸?shù)南到y(tǒng)中。
0 引言
現(xiàn)代電子技術的進步使得外設的種類日益繁多,接入數(shù)量急劇增加,傳統(tǒng)的安裝數(shù)據(jù)采集卡的方式,由于存在安裝不便、擴展困難、傳輸質量不高等諸多缺點,漸漸滿足不了數(shù)據(jù)采集過程中對復雜外設和數(shù)據(jù)傳輸速率的要求。此外,在需要移動數(shù)據(jù)采集的場合,普通筆記本電腦以及絕大部分便攜式數(shù)據(jù)采集設備都不再提供PCI插槽。因此采用統(tǒng)一、便捷的數(shù)據(jù)傳輸接口來替代原有方式,其緊迫性日益凸顯。通用串行總線(USB)作為一個接口規(guī)范把不同類型的接口統(tǒng)一起來,且其外接設備具有熱插拔、易擴展、傳輸速度快等優(yōu)點,已經(jīng)成為各類筆記本和便攜設備數(shù)據(jù)傳輸?shù)闹髁鹘涌凇?/p>
本設計使用支持USB2.0協(xié)議的CY7C68013芯片,作為上位機與FPGA之間的傳輸接口,以FPGA為主控制單元,實現(xiàn)了數(shù)據(jù)的高速傳輸。文章給出了此數(shù)據(jù)傳輸系統(tǒng)的硬件設計方案,著重介紹了FPGA控制模塊中內部集成FIFO的結構原理和關鍵程序模塊的實現(xiàn)方式。本系統(tǒng)設計方案結構簡單、傳輸速度快、具有一定的可擴展性。
1 系統(tǒng)硬件設計
數(shù)據(jù)傳輸系統(tǒng)硬件原理框圖如圖1所示,主要由USB傳輸控制器EZ-USB FX2、FPGA主控制單元、外設模塊構成。數(shù)據(jù)采集模塊在中心控制單元的控制下對信號、數(shù)據(jù)等進行采集,并把數(shù)據(jù)最終轉入數(shù)據(jù)外設中進行存儲。上位機經(jīng)傳輸控制模塊(FX2)發(fā)送控制指令到主控制單元(FPGA)內部后,經(jīng)過串并轉換進行指令解碼,解碼后按照相應的指令要求從數(shù)據(jù)外設(FLASH)中進行數(shù)據(jù)讀取。從而實現(xiàn)將外設存儲系統(tǒng)中的數(shù)據(jù)快速上傳到上位機中保存處理。
1.1 USB傳輸控制器
本系統(tǒng)USB傳輸接口芯片選擇Cypress公司的CY7C68013,它是Cypress公司推出的EZ-USB FX2系列產品之一,集成USB2.0的微處理器,具有增強型8051內核性能,智能串行引擎(SIE),通用可編程接口(GPIF),8.5KB的RAM和FIFO存儲器,支持12Mb/s的全速速率和1480 Mb/s的高速傳輸速率,最大限度地滿足了USB 2.0的總線帶寬。其內部結
構如圖2所示。
CY7C68013由于其內部集成有獨立于微處理器的USB核,其可被配置成GPIF(可編程接口)和SlaveFIFO(主從)等多種接口模式,使數(shù)據(jù)傳輸通過執(zhí)行USB本身的協(xié)議來完成。在此過程中CPU可不參與數(shù)據(jù)傳輸,從而使數(shù)據(jù)的傳輸速率大大提高,同時也簡化了固件代碼的編寫。本設計采用FX2的GPIF數(shù)據(jù)傳輸方式,時序簡單、編程靈活,可以很容易地從RAM中讀取數(shù)據(jù)。
1.2 FPGA主控制單元
本設計采用Altera公司的EP1K30QC208作為主控芯片,實現(xiàn)對數(shù)據(jù)傳輸過程的控制。它包括1728個邏輯單元,成本較低,適用于小系統(tǒng)編程。在此硬件系統(tǒng)中FPGA的作用主要有二個:一是實現(xiàn)對所傳輸數(shù)據(jù)的控制。上位機經(jīng)USB傳輸控制模塊(FX2)發(fā)送控制指令到FPGA主控制單元后,經(jīng)過其內部串并轉換,實現(xiàn)指令解碼。解碼后按照要求從數(shù)據(jù)外設(FLASH)中進行數(shù)據(jù)讀取,并根據(jù)FIFO狀態(tài)進行數(shù)據(jù)傳輸控制;二是內部建構一個FIFO存儲器。由于本設計是對FLASH存儲器進行讀數(shù)操作,其數(shù)據(jù)傳輸是以頁為單位,讀數(shù)時頁與頁之間有一小段時間間隔,數(shù)據(jù)輸出不是連續(xù)的。為實現(xiàn)FX2讀取FLASH中的數(shù)據(jù),需要在FPGA建構FIFO作為數(shù)據(jù)過渡,先將FLASH中的數(shù)據(jù)讀到FIFO中,CY7C68013傳輸控制器再從FIFO中讀取數(shù)據(jù)。
2 主控單元軟件設計
根據(jù)本系統(tǒng)主控制單元的作用,F(xiàn)PGA要實現(xiàn)上文所述的主要功能,其關鍵在于FX2與FLASH的握手過程的設計,滿足此過程的內部FIFO的建構和相關標志信號的產生。
2.1 FX2與FLASH的握手過程
FPGA主控單元先將數(shù)據(jù)存儲到內部的FIFO中,然后CY7C68013再從FIFO中讀取數(shù)據(jù)。由于讀取和寫入的速度是不同的,可能讀比寫快,也可能寫比讀快。為防止傳輸時數(shù)據(jù)丟失,設計如下的握手過程:FPGA內部的“讀數(shù)控制”模塊不斷進行判斷,只要FIFO不滿它就一直向FIFO中寫入數(shù)據(jù)。對于外部FX2,只要判斷FIFO不空它就從FIFO中讀取數(shù)據(jù)。這樣FIFO的讀寫就組成了一個閉環(huán),保證了讀數(shù)的完整準確。在數(shù)據(jù)傳輸握手方式確定以后可能出現(xiàn)兩種情況:1)FIFO的寫入速度大于讀取速度,這樣寫地址慢慢就追上讀地址,此時總的傳輸速度就取決于讀取速度。2)FIFO的讀取速度大于寫入速度,這樣讀地址慢慢就追上寫地址,此時總的傳輸速度就由寫入速度決定。在FPGA中編寫“標志位
產生”程序模塊,產生滿、空信號作為FX2與FLASH傳輸過程中的握手信號,是保證數(shù)據(jù)傳輸穩(wěn)定可靠的關鍵。
2.2 內部建構的FIFO原理及關鍵程序的流程
FIFO的本質是一種特殊的雙口RAM,大部分FPGA內部就有雙口RAM資源。FIFO結構的特點是先進先出,對外它是一種沒有地址控制的特殊緩存。在程序編寫過程中,內部FIFO要求只要接收RD、WR使能信號,就能進行讀寫工作。在此過程中,整個FIFO模塊對外不顯示地址,只需要給出表現(xiàn)內部狀態(tài)的滿、半滿和空信號即可。FX2和FPGA內部的“讀數(shù)控制”模塊根據(jù)這些信號對FIFO進行數(shù)據(jù)傳輸控制。FPGA內部建構的FIFO原理圖如圖3所示。
FIFO產生滿、空狀態(tài)標志信號由“標志位產生”程序模塊產生,滿、空狀態(tài)信號均采用寫地址和讀地址相減(或讀地址和寫地址相減)的結果來判斷雙口RAM此時的狀態(tài)。此外,還可以據(jù)此得到FIFO的半滿狀態(tài)信號,以此可容易地標示FIFO滿空深度。FIFO滿、空、半滿標志信號的程序流程基本一致,只不過判斷比較的差值存在不同。FIFO滿時地址差值為1023,空時為1,半滿是差值大于512。以半滿信號產生為例,標志位產生程序流程如圖4所示。
為了避免時序錯誤,還可以任意設定一定的滿空深度。例如可以設定當?shù)刂凡畲笥?000時即認為FIFO己滿,不再向FIFO中寫入數(shù)據(jù),以避免錯誤的出現(xiàn)。
3 結語
隨著便攜式數(shù)據(jù)存儲系統(tǒng)的普及,基于USB的數(shù)據(jù)傳輸系統(tǒng)受到了普遍關注。本文設計的基于EZ-USB FX2微處理器的數(shù)據(jù)傳輸系統(tǒng),實現(xiàn)了上位機通過USB端口對FLASH存儲器的快速讀取操作,并成功地應用在某一車載數(shù)據(jù)盒工程項目中。測試結果表明,系統(tǒng)傳輸過程穩(wěn)定,速度較高,與上位機接口方式嚴格遵守USB 2.0協(xié)議,具有很強的通用性,適合即插即用的工作場合。本系統(tǒng)基于FPGA的主控單元配置方案便于軟件系統(tǒng)的升級與調試,如果搭配合適的傳感器和相應的信號調理電路,就可以實現(xiàn)對多種信號的采集處理,再配以合適的存儲模塊完全可以構成完備的數(shù)據(jù)采集存儲系統(tǒng)。本設計對于一般的數(shù)據(jù)傳輸系統(tǒng)的設計及傳統(tǒng)接口改造具有一定的借鑒意義。