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