文獻標識碼: A
DOI:10.16157/j.issn.0258-7998.2016.12.014
中文引用格式: 張志偉,靳鴻,楊少博. 高速大容量記錄儀的USB 3.0高速讀數接口設計[J].電子技術應用,2016,42(12):54-57,61.
英文引用格式: Zhang Zhiwei,Jin Hong,Yang Shaobo. Designer of USB 3.0 high speed read interface in high speed and large capacity data recorder[J].Application of Electronic Technique,2016,42(12):54-57,61.
0 引言
遙測、遙感以及雷達圖像信號具有精度高、數據快、容量大的特點,在飛行器飛行過程中無法做到實時分析和處理,而必須將采集到的數據以適當的方式存儲起來,待飛行任務結束后進行回讀分析[1]。隨著其傳輸速度和數據量的不斷增加,記錄儀的存儲容量也隨之增大。目前計算機常用的外部接口RS232、USB 2.0及以太網接口等[3,4]已無法滿足記錄儀存儲數據的快速讀取,而USB 3.0[5]技術的出現無疑解決了這一問題。USB 3.0協議向下兼容其他版本,并提供了超速模式,其理論最高傳輸速率可達5 Gb/s。本文以某高速大容量機載雷達數據記錄儀為例[6],針對流水線技術構建的高速大容量存儲陣列,設計了一種基于USB3.0的高速讀數接口。
1 高速大容量存儲系統概述
高速大容量數據記錄儀結構框圖如圖1所示,系統主要完成18 bit LVDS形式的數據(包括16 bit并行數據、1 bit時鐘信號和1 bit寫使能信號)的實時接收、FIFO緩存、Flash流水線存儲以及USB 3.0數據上傳。16 bit并行數據傳輸速率為120 MB/s,LVDS數據經LVDS接口電路轉換為TTL電平以及數字隔離處理后輸入到FPGA,在FPGA內部Flash控制器的控制下寫入Flash存儲整列中;記錄儀記錄完成后,若需要讀數時,可通過USB 3.0接口將存儲陣列中的數據快速上傳至計算機。
系統存儲模塊采用16片NAND型Flash芯片K9WBG08U1[7,8]構建成4×4存儲陣列,每組4片Flash,采用了8級流水線操作進行字擴展,最快存儲速率可達39.96 MB/s。4組Flash進行位擴展組成數據寬度為32 bit、存儲容量共64 GB的存儲陣列,Flash存儲陣列存儲速度最高可達39.96×4=159.85 MB/s。存儲陣列結構原理如圖2所示。
2 USB 3.0讀數接口設計
系統采用基于CYUSB3014的USB 3.0接口實現與計算機之間的數據通信。CYUSB3014是新一代USB 3.0外設控制器[9],其有32個物理端點,支持USB 3.0和USB 2.0設備以及2.0版的高速移動(HS-OTG)主機和外設。CYUSB3014有3種接口模式,即通用I/O口模式、從設備(Slave FIFO)接口模式和GPIF主設備接口模式。高速數據傳輸采用后兩種模式。本設計采用同步Slave FIFO接口模式[7,8],FPGA作為邏輯控制器,CYUSB3014作為從設備。FPGA與CYUSB3014的連接如圖3所示。
圖3中SLCS為片選信號,低電平有效;SLWR為從設備寫入選通,低電平有效(寫操作:由FPGA至CYUSB3014);SLRD為從設備讀取選通,低電平有效(讀操作:由CYUSB3014至FPGA);SLOE為從設備輸出使能,低電平有效,激活該信號則CYUSB3014數據總線被驅動。A1和A0兩位地址線用來選擇從設備CYUSB3014上的線程,FPGA主控先驅動這兩位地址線,然后激活讀選通或寫選通,由于USB 3.0讀數接口將數據記錄儀的數據回傳至計算機,需用到CYUSB3014的讀FIFO和寫FIFO兩個過程,所以必須創建兩個線程;當A1:A0=0時,選擇線程0,用于寫過程;當A1:A0=1時,選擇線程1,用于讀過程。FLAGA和FLAGB為CYUSB3014端點緩沖器狀態標志位,可以配置為空、滿、局部空或局部滿狀態;FLAGA專用于線程0,而FLAGB專用于線程1。PKTEND是數據包結束信號,低電平有效,可將短數據包或零長度數據包寫入從設備FIFO內。PCLK是FPGA提供給CYUSB3014的FIFO接口時鐘,D[32:0]為32 bit數據線。
同步Slave FIFO寫序列如圖4所示,單次寫操作步驟如下:
(1)主設備先驅動FIFO地址“An”,然后激活SLCS信號,主設備將它的數據驅動到數據總線上。
(2)激活SLCS后,主設備將在下一個時鐘周期內激活SLWR。
(3)激活SLWR時,主設備會將數據寫入到FIFO內,并且FIFO指針會在PCLK的上升沿上遞增。從時鐘的上升沿算起,經過3個時鐘周期以及tCFLG的延時,FIFO標志將被更新。
對于連續寫入模式,主設備在整個寫入過程中持續激活SLWR和SLCS。主設備激活SLWR后,每當PCLK的上升沿到來時,數據總線上的數值都被寫入到FIFO中。通過PKTEND信號,可主動將某個短數據包發送給USB主機。如果激活PKTEND但不激活SLWR脈沖,就生成ZLP(零長度的數據包);同時激活PKTEND和SLWR時,CYUSB3014的GPIF II狀態機會將數據包作為一個短數據包,并將其發送到USB接口。
3 USB3.0接口主要程序設計
3.1 CYUSB3014固件程序設計
為了實現數據雙向傳輸,創建2個DMA通道作為生產者的套接字和作為消費者的套接字,并分別分配4倍緩沖區大小。由于USB 3.0模式下單個緩沖區大小為1 024 B,故套接字緩沖區大小為4×1 024 B,可實現高吞吐量性能。通過外部邏輯控制器控制每次傳輸數據量,可避免使用局部FLAG。
按照圖3定義好的FPGA與CYUSB3014的連接,利用GPIF Designer II軟件進行接口設置,GPIF II接口定義如圖5所示。圖中CLK即為FPGA提供給CYUSB3014的時鐘,Databus為16 bit數據總線,Addressbus為用于線程選擇的2 bit地址線,FLAGA專用于線程0,而FLAGB專用于線程1。
GPIF II提供256種固件可編程狀態,可在狀態機設計界面進行狀態機設計。本應用中狀態機如圖6所示,共有6個狀態,分別為RESET(初始態)、READ(讀FIFO)、WRITE(寫FIFO)、ZLP(零長度數據包)、SHORT_PKT(短數據包)、IDLE(空閑態)。對于來自初始態的所有轉換,轉換公式被固定為LOGIC_ONE。
寫FIFO過程如下:每當FLAGA=1,外部邏輯控制器可向CYUSB3014寫入數據,CYUSB3014進入WRITE狀態需滿足SLCS=0、SLWR=0、PKTEND=1、SLRD=1。在WRITE狀態CYUSB3014完成IN_ADDR和IN_DATA兩個操作。通過IN_ADDR操作,GPIF硬件采樣來自地址總線的值,并使用它選擇DMA線程。通過IN_DATA操作對來自數據總線的數據進行采樣,然后將其轉移到所指定的位置(DMA通道或固件應用)。在ZLP狀態和SHORT_PKT狀態,通過COMMIT操作可強制緩沖器/數據包結束。寫FIFO過程仿真時序如圖7所示。
3.2 FPGA程序設計
記錄儀采集到的數據以8級流水線方式寫入到Flash存儲陣列,即在寫入過程中同時對4組Flash執行頁編程操作,故Flash陣列數據讀寫的基本單位的容量為4×4 KB=16 KB,數據寬度為4×8 bit=32 bit。為了保證讀出數據與寫入數據完全一致,同樣采用流水線的方式對Flash存儲陣列中4組存儲單元執行讀數操作。在FPGA內部建立一個容量為4 096×32 bit=128 Kbit的FIFO,FIFO數據端設置為32 bit,32 bit輸出,深度為4 096。K9WBG08U1M的單個字節的讀取速度最快為25 ns。當記錄儀執行讀數操作時,數據寫入FIFO,一旦FIFO滿后,FIFO滿標志位有效,同時使FIFO寫使能無效以及Flash存儲陣列停止讀操作,當CYUSB3014的SLWR位檢測到FIFO的滿標志位后,使FIFO讀使能有效,開始將FIFO中的數據寫入CYUSB3014中。本設計中Flash的讀寫時鐘設置為30 MHz,GPIF接口時鐘設置為80 MHz。
使用ModelSim軟件對讀數過程進行功能仿真,結果如圖8所示。讀數過程通過A1:A0=0選擇線程0,FLAGA用于監視當前線程的狀態,當FLAGA為1時表示非滿。SLCS一直為低電平有效狀態,當SLWR為低電平時,FPGA可向CYUSB3014寫入數據。數據在時鐘上升沿寫入CYUSB3014套接字緩沖區,緊接著CYUSB3014啟動DMA通道,當緩沖區寫滿數據后,FLAGA下拉至低電平,相應的DMA回調函數被調用,數據從U端口上傳至計算機。
4 分析與測試
將記錄儀連接至計算機,打開Cypress公司提供的速率測試工具C++ Streamer,并按照CYUSB3014固件程序進行配置,利用該軟件對USB3.0接口讀數過程速率進行測試,測試結果如圖9所示,平均速率達到123 200 KB/s(約120 MB/s)。按照此速率,此高速大容量記錄儀存儲的海量數據能夠快速回傳至上位機。
5 結束語
本文主要介紹了一種高速大容量機載雷達數據記錄儀,針對流水線技術構建的高速大容量存儲陣列,設計了一種基于USB 3.0的高速讀數接口。USB 3.0采用Slave FIFO接口模式,詳細介紹了GPIF II狀態機設計,利用數據記錄儀FPGA作為外部主控制器。在該應用中,USB 3.0接口速率可達120 MB/s,系統工作穩定,實現了對系統存儲數據的快速讀取,為高速大容量存儲系統的快速讀數提供了一種全新的手段,且具有一定的通用性,可以擴展到所有類似Flash存儲系統中,具有一定的使用價值。
參考文獻
[1] 祖靜,申湘南,張文棟.存儲測試技術[J].兵工學報,1994(4):30-34.
[2] 安海磊.高速數據采集存儲系統設計[D].西安:西安電子科技大學,2012.
[3] 張誠,羅豐.基于千兆以太網的高速數據傳輸系統設計[J].電子科技,2011(1):44-46.
[4] 王輝,陳愛生.基于FT2232H的USB2.0數據采集系統設計[J].電子器件,2015(1):144-147.
[5] 岳孝忠,裴東興,王健.基于USB3.0接口高速數據采集系統的設計[J].電子器件,2015(1):140-143.
[6] 任敏,張艷兵,王歡,等.基于硬件控制的雙通道機載數據記錄儀[J].探測與控制學報,2014,36(3):82-85.
[7] 劉東海,任勇峰,儲成君.基于FPGA控制的NAND Flash存儲設計[J].科學技術與工程,2013,13(34):10349-10353.
[8] 梁永剛,崔永俊,郇弢.基于NAND型FLASH的雙備份固態存儲系統[J].科學技術與工程,2013,13(26):7675-7682.
[9] Cypress Semiconductor Corporation.EZ-USB FX3 super speed USB controller[EB/OL].(2011)[2016].http:www.cypress.com.
[10] Rama Sai Krishna V.Designing a GPIF II master interface[EB/OL].(2013)[2016].http:www.cypress.com.
[11] Rama Sai Krishna V.Designing with the EZ-USB FX3 slave FIFO interface[EB/OL].(2014)[2016].http:www.cypress.com.