基于CYPRESS的USB3.0總線技術的開發(fā)應用
1.引言
USB(Universal Serial Bus,通用串行總線)以其無需配置、即插即用等特性獲得了廣泛的應用。2004年提出的USB2.0標準,傳輸速度最大能夠達到480Mbps.但在USB3.0標準中,它的最大傳輸速度幾乎是傳統(tǒng)USB2.0傳輸速度的10倍,達到了5.0Gbps,被定義為“超高速U S B接口”.本文基于CYPRESS的FX3系列USB3.0芯片,對USB3.0總線進行研究開發(fā)。
2.USB3.0接口芯片概述
賽普拉斯的EZ-USB FX3是新一代的USB3.0外設控制器,具有高度集成的靈活特性,允許系統(tǒng)設計者將USB3.0添加至任何系統(tǒng)。本文采用的是FX3系列USB3.0芯片CYUSB3014.
FX3是完全兼容USB3.0 V1.0和USB2.0規(guī)范的,集成的USB2.0 OTG控制器允許芯片作為主從設備使用。另外,它還支持一些常用的外設接口,如SPI,I2C,UART和I2S可以與外部設備進行通信。
FX3具有一個可進行完全配置的并行通用可編程接口GPIF II,它可以與任何處理器、ASIC或是FPGA連接。它可以輕松無縫地連接至多種常用接口,比如異步SRAM、異步和同步地址數(shù)據(jù)復用式接口、并行ATA等等。EZ-USB FX3集成了USB3.0和USB2.0物理層(PHY)以及32位ARM926EJ-S微處理器,具有強大的數(shù)據(jù)處理能力,并可用于構建定制應用。
3.系統(tǒng)整體設計
本系統(tǒng)設計主要由軟件部分和硬件部分組成。軟件部分主要包括三大部分:PC機應用程序、FX3固件程序、FPGA程序。硬件部分主要由FPGA、USB3.0芯片和DDR2組成,硬件的系統(tǒng)框圖如圖2所示。本文主要完成了硬件、PC機應用程序和FPGA程序的設計。
FX3固件程序使用的是Cypress的SDK開發(fā)包的固件程序。
3.1 DDR模塊設計
與FPGA相比,USB3.0接口是一個高速的接收單元。在不同工作速度的系統(tǒng)之間,數(shù)據(jù)緩存是不可或缺的部分,一般來說,使用FIFO基本可以使各系統(tǒng)工作在自己的時鐘頻率下,而不需要反復的互相握手信號就能進行數(shù)據(jù)的交流。本文設計的數(shù)據(jù)是保存在計算機上,由于各計算機的硬件配置可能會不一樣,我們設計了DDR2虛擬FIFO模塊來進行數(shù)據(jù)緩存,為批量傳輸時能夠提供足夠的緩存,不用擔心為緩存不夠電腦來不及存取數(shù)據(jù)造成數(shù)據(jù)丟失。
本系統(tǒng)選用兩片MT47H64M16HR,兩片DDR并聯(lián)控制總線和地址總線,總存儲容量達到2Gbit,讀寫寬度都為16bit,它具有豐富的資源,足夠滿足本系統(tǒng)的需要。
3.2 USB3.0接口設計
與USB2.0不同的是,USB3.0在與計算機通訊時,它有自己專用的數(shù)據(jù)通路,專用的數(shù)據(jù)發(fā)送線路和獨立的數(shù)據(jù)接收線路,即圖3中四線差分信號SSRX+/-和SSTX+/-,從而可以真正的實現(xiàn)全雙工。同時,USB3.0還兼容了USB2.0的D+/-信號接口,從而可以與USB2.0無縫連接。使用從器件FIFO接口與FPGA鏈接,傳輸速度能達到可達到320MBps.圖3為USB芯片與FPGA和PC機的電路連接。
3.3 FPGA邏輯設計
FPGA是整個系統(tǒng)的核心,它需要產生測試數(shù)據(jù)并將數(shù)據(jù)存儲到DDR2中,以及將DDR2中讀出的數(shù)據(jù)轉移到CYUSB3014大的內部FIFO中,因此它主要由如圖2內部所示模塊構成。
3.3.1 USB接口模塊
USB接口模塊主要處理讀寫命令。讀寫命令需要計算機通過USB控制傳輸,傳遞到CYUSB3014中,再由CYUSB3014將具體的命令轉化為電平信號送到FPGA的IO口。USB接口模塊根據(jù)UART_RX上的電平信號,判斷出是讀命令還是寫命令,最終產生CYUSB3014的片選CS、使能OE、讀/寫控制等有效信號。
當為寫命令時,CYUSB3014需要將從DDR2中讀取的數(shù)據(jù)發(fā)送出去;當為讀命令,讀取CYUSB3014傳遞過來的數(shù)據(jù),流程圖如圖4所示。
圖5、圖6分別為同步寫入和讀出數(shù)據(jù)的時序圖。由于讀寫最大包為1024字節(jié),所以實際每一包傳輸需要256個周期。圖中的輸入/出DQ數(shù)據(jù)為測試數(shù)據(jù)模塊和PC機產生的測試數(shù)據(jù),RX即UART_RX信號。
3.3.2 測試數(shù)據(jù)模塊
當計算機向FPGA發(fā)出讀命令時,F(xiàn)PGA產生測試數(shù)據(jù)。32位數(shù)據(jù),高16位為0,低16位循環(huán)計數(shù),發(fā)送一個周期后,自動清零。
批量(bulk)傳輸時的最大包大小為1024字節(jié),因此測試數(shù)據(jù)在0~255之間循環(huán)變化。
產生測試數(shù)據(jù)后,數(shù)據(jù)傳輸流程為DATA->
DDR2->FIFO->CYUSB3014->PC機,實現(xiàn)了將測試數(shù)據(jù)上傳到PC機的功能。
3.3.3 DDR2接口模塊
該部分直接負責外圍DDR2接口,利用FPGA的DDRII SDRAM IP核實現(xiàn),按照DDR2芯片MT47H64M16HR來設定控制器的時序參數(shù),控制器根據(jù)這些參數(shù)值生成滿足MT47H64M16HR時序的接口,再由DDR2模塊進行讀寫控制。
4.測試結果及分析
4.1 寫入數(shù)據(jù)測試
當應用程序向USB發(fā)出寫命令時,F(xiàn)PGA產生測試數(shù)據(jù)并傳給FX3以便上傳給PC機。
采集1000MB的數(shù)據(jù)進行記錄,以便在MATLAB中進行分析。
CYPRESS官方開發(fā)包中自帶了streamer軟件進行速度測試。在Endpoint選項中選擇Bulk in endpoint端點(Bulk Out對應的是PC機向FPGA寫數(shù)據(jù))。由于批量傳輸時的最大包為1024字節(jié),因此需要將Packets perXfer設置為256或以下,Xfers to Queue置為4.不同的USB3.0控制器,速度的測試結果會有所不同。如圖7所示是在64位WIN7系統(tǒng)下的測試及分析結果。如圖7(a)中所示,經(jīng)過一段時間的速度測試,23704個成功包,0失敗,往P C中寫入數(shù)據(jù)的速度能夠達到178800KB/S,即1.43Gbps.為了驗證數(shù)據(jù)的正確性,在MATLAB中對采集的8.0Gb數(shù)據(jù)進行分析。由于測試數(shù)據(jù)是0~255之間循環(huán)變化,因此可以根據(jù)每一包數(shù)據(jù)的數(shù)據(jù)差是否為1來判斷數(shù)據(jù)的正確性,當不為1時報錯。
如圖7(b)所示,讀取的數(shù)據(jù)是正確的,沒有發(fā)生丟數(shù)或錯數(shù)的情況。
4.2 讀出數(shù)據(jù)測試
類似的,當應用程序向USB發(fā)出讀命令時,同時會產生一組有規(guī)律的測試數(shù)據(jù),并傳送給CYUSB3014,FPGA直接讀取數(shù)據(jù)。如下圖8(a)所示是讀入速度測試結果,18252個成功包,0失敗,往USB中寫入數(shù)據(jù)的速度能夠達到179000KB/S,即1.432Gbps.在FPGA中記錄下隨機采集的32k數(shù)據(jù)并進行分析,同樣的可以根據(jù)數(shù)據(jù)間的差來判斷數(shù)據(jù)的正確性,如圖8(b)所示,寫入的數(shù)據(jù)時正確的,沒有發(fā)生丟數(shù)錯數(shù)的情況。
5.結束語
本文在FPGA和CYUSB3014的基礎上,對USB3.0進行了開發(fā)應用。鑒于本文的系統(tǒng)架構,雖然測試數(shù)據(jù)都是FPGA內部產生,但是對于實際使用高采樣率AD的數(shù)據(jù)采集系統(tǒng)具有很大的借鑒意義。