<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > EDA/PCB > 設計應用 > 基于FPGA的異步USB數據傳輸系統(tǒng)設計

          基于FPGA的異步USB數據傳輸系統(tǒng)設計

          作者: 時間:2016-10-18 來源:網絡 收藏

          摘要:設計實現了以為主控制單元,采用EZ-USB FX2微處理器為接口芯片的快速系統(tǒng)。文章給出了和CY7C68013之間的軟硬件設計方案,著重介紹了內部建構的FIFO原理及程序實現方法,并以FLASH存儲模塊為例,通過FX2與FLASH握手過程的設計,實現了數據存儲器與計算機之間的數據高速傳輸。應用結果表明,此系統(tǒng)可靠有效,具有一定的通用性,可用于其他使用USB進行數據傳輸的系統(tǒng)中。

          本文引用地址:http://www.ex-cimer.com/article/201610/308420.htm

          0 引言

          現代電子技術的進步使得外設的種類日益繁多,接入數量急劇增加,傳統(tǒng)的安裝數據采集卡的方式,由于存在安裝不便、擴展困難、傳輸質量不高等諸多缺點,漸漸滿足不了數據采集過程中對復雜外設和數據傳輸速率的要求。此外,在需要移動數據采集的場合,普通筆記本電腦以及絕大部分便攜式數據采集設備都不再提供PCI插槽。因此采用統(tǒng)一、便捷的數據傳輸接口來替代原有方式,其緊迫性日益凸顯。通用串行總線(USB)作為一個接口規(guī)范把不同類型的接口統(tǒng)一起來,且其外接設備具有熱插拔、易擴展、傳輸速度快等優(yōu)點,已經成為各類筆記本和便攜設備數據傳輸的主流接口。

          本設計使用支持USB2.0協議的CY7C68013芯片,作為上位機與FPGA之間的傳輸接口,以FPGA為主控制單元,實現了數據的高速傳輸。文章給出了此數據傳輸系統(tǒng)的硬件設計方案,著重介紹了FPGA控制模塊中內部集成FIFO的結構原理和關鍵程序模塊的實現方式。本系統(tǒng)設計方案結構簡單、傳輸速度快、具有一定的可擴展性。

          1 系統(tǒng)硬件設計

          數據傳輸系統(tǒng)硬件原理框圖如圖1所示,主要由USB傳輸控制器EZ-USB FX2、FPGA主控制單元、外設模塊構成。數據采集模塊在中心控制單元的控制下對信號、數據等進行采集,并把數據最終轉入數據外設中進行存儲。上位機經傳輸控制模塊(FX2)發(fā)送控制指令到主控制單元(FPGA)內部后,經過串并轉換進行指令解碼,解碼后按照相應的指令要求從數據外設(FLASH)中進行數據讀取。從而實現將外設存儲系統(tǒng)中的數據快速上傳到上位機中保存處理。

          基于FPGA的異步USB數據傳輸系統(tǒng)設計

          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所示。

          基于FPGA的異步USB數據傳輸系統(tǒng)設計

          CY7C68013由于其內部集成有獨立于微處理器的USB核,其可被配置成GPIF(可編程接口)和SlaveFIFO(主從)等多種接口模式,使數據傳輸通過執(zhí)行USB本身的協議來完成。在此過程中CPU可不參與數據傳輸,從而使數據的傳輸速率大大提高,同時也簡化了固件代碼的編寫。本設計采用FX2的GPIF數據傳輸方式,時序簡單、編程靈活,可以很容易地從RAM中讀取數據。

          1.2 FPGA主控制單元

          本設計采用Altera公司的EP1K30QC208作為主控芯片,實現對數據傳輸過程的控制。它包括1728個邏輯單元,成本較低,適用于小系統(tǒng)編程。在此硬件系統(tǒng)中FPGA的作用主要有二個:一是實現對所傳輸數據的控制。上位機經USB傳輸控制模塊(FX2)發(fā)送控制指令到FPGA主控制單元后,經過其內部串并轉換,實現指令解碼。解碼后按照要求從數據外設(FLASH)中進行數據讀取,并根據FIFO狀態(tài)進行數據傳輸控制;二是內部建構一個FIFO存儲器。由于本設計是對FLASH存儲器進行讀數操作,其數據傳輸是以頁為單位,讀數時頁與頁之間有一小段時間間隔,數據輸出不是連續(xù)的。為實現FX2讀取FLASH中的數據,需要在FPGA建構FIFO作為數據過渡,先將FLASH中的數據讀到FIFO中,CY7C68013傳輸控制器再從FIFO中讀取數據。

          2 主控單元軟件設計

          根據本系統(tǒng)主控制單元的作用,FPGA要實現上文所述的主要功能,其關鍵在于FX2與FLASH的握手過程的設計,滿足此過程的內部FIFO的建構和相關標志信號的產生。

          2.1 FX2與FLASH的握手過程

          FPGA主控單元先將數據存儲到內部的FIFO中,然后CY7C68013再從FIFO中讀取數據。由于讀取和寫入的速度是不同的,可能讀比寫快,也可能寫比讀快。為防止傳輸時數據丟失,設計如下的握手過程:FPGA內部的“讀數控制”模塊不斷進行判斷,只要FIFO不滿它就一直向FIFO中寫入數據。對于外部FX2,只要判斷FIFO不空它就從FIFO中讀取數據。這樣FIFO的讀寫就組成了一個閉環(huán),保證了讀數的完整準確。在數據傳輸握手方式確定以后可能出現兩種情況:1)FIFO的寫入速度大于讀取速度,這樣寫地址慢慢就追上讀地址,此時總的傳輸速度就取決于讀取速度。2)FIFO的讀取速度大于寫入速度,這樣讀地址慢慢就追上寫地址,此時總的傳輸速度就由寫入速度決定。在FPGA中編寫“標志位

          產生”程序模塊,產生滿、空信號作為FX2與FLASH傳輸過程中的握手信號,是保證數據傳輸穩(wěn)定可靠的關鍵。

          2.2 內部建構的FIFO原理及關鍵程序的流程

          FIFO的本質是一種特殊的雙口RAM,大部分FPGA內部就有雙口RAM資源。FIFO結構的特點是先進先出,對外它是一種沒有地址控制的特殊緩存。在程序編寫過程中,內部FIFO要求只要接收RD、WR使能信號,就能進行讀寫工作。在此過程中,整個FIFO模塊對外不顯示地址,只需要給出表現內部狀態(tài)的滿、半滿和空信號即可。FX2和FPGA內部的“讀數控制”模塊根據這些信號對FIFO進行數據傳輸控制。FPGA內部建構的FIFO原理圖如圖3所示。

          基于FPGA的異步USB數據傳輸系統(tǒng)設計

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

          基于FPGA的異步USB數據傳輸系統(tǒng)設計

          為了避免時序錯誤,還可以任意設定一定的滿空深度。例如可以設定當地址差大于1000時即認為FIFO己滿,不再向FIFO中寫入數據,以避免錯誤的出現。

          3 結語

          隨著便攜式數據存儲系統(tǒng)的普及,基于USB的數據傳輸系統(tǒng)受到了普遍關注。本文設計的基于EZ-USB FX2微處理器的數據傳輸系統(tǒng),實現了上位機通過USB端口對FLASH存儲器的快速讀取操作,并成功地應用在某一車載數據盒工程項目中。測試結果表明,系統(tǒng)傳輸過程穩(wěn)定,速度較高,與上位機接口方式嚴格遵守USB 2.0協議,具有很強的通用性,適合即插即用的工作場合。本系統(tǒng)基于FPGA的主控單元配置方案便于軟件系統(tǒng)的升級與調試,如果搭配合適的傳感器和相應的信號調理電路,就可以實現對多種信號的采集處理,再配以合適的存儲模塊完全可以構成完備的數據采集存儲系統(tǒng)。本設計對于一般的數據傳輸系統(tǒng)的設計及傳統(tǒng)接口改造具有一定的借鑒意義。



          關鍵詞: FPGA EZ-USB FX2 數據傳輸

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();