文獻標識碼: 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協(xié)議向下兼容其他版本,,并提供了超速模式,,其理論最高傳輸速率可達5 Gb/s。本文以某高速大容量機載雷達數據記錄儀為例[6],,針對流水線技術構建的高速大容量存儲陣列,,設計了一種基于USB3.0的高速讀數接口。
1 高速大容量存儲系統(tǒng)概述
高速大容量數據記錄儀結構框圖如圖1所示,,系統(tǒng)主要完成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接口將存儲陣列中的數據快速上傳至計算機,。
系統(tǒng)存儲模塊采用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讀數接口設計
系統(tǒng)采用基于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兩個過程,,所以必須創(chuàng)建兩個線程,;當A1:A0=0時,選擇線程0,,用于寫過程,;當A1:A0=1時,選擇線程1,,用于讀過程,。FLAGA和FLAGB為CYUSB3014端點緩沖器狀態(tài)標志位,可以配置為空,、滿,、局部空或局部滿狀態(tài);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標志將被更新,。
對于連續(xù)寫入模式,,主設備在整個寫入過程中持續(xù)激活SLWR和SLCS。主設備激活SLWR后,,每當PCLK的上升沿到來時,,數據總線上的數值都被寫入到FIFO中。通過PKTEND信號,,可主動將某個短數據包發(fā)送給USB主機,。如果激活PKTEND但不激活SLWR脈沖,就生成ZLP(零長度的數據包),;同時激活PKTEND和SLWR時,,CYUSB3014的GPIF II狀態(tài)機會將數據包作為一個短數據包,并將其發(fā)送到USB接口,。
3 USB3.0接口主要程序設計
3.1 CYUSB3014固件程序設計
為了實現數據雙向傳輸,,創(chuàng)建2個DMA通道作為生產者的套接字和作為消費者的套接字,并分別分配4倍緩沖區(qū)大小,。由于USB 3.0模式下單個緩沖區(qū)大小為1 024 B,,故套接字緩沖區(qū)大小為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種固件可編程狀態(tài),,可在狀態(tài)機設計界面進行狀態(tài)機設計。本應用中狀態(tài)機如圖6所示,,共有6個狀態(tài),,分別為RESET(初始態(tài))、READ(讀FIFO),、WRITE(寫FIFO),、ZLP(零長度數據包)、SHORT_PKT(短數據包),、IDLE(空閑態(tài)),。對于來自初始態(tài)的所有轉換,轉換公式被固定為LOGIC_ONE,。
寫FIFO過程如下:每當FLAGA=1,,外部邏輯控制器可向CYUSB3014寫入數據,CYUSB3014進入WRITE狀態(tài)需滿足SLCS=0,、SLWR=0,、PKTEND=1、SLRD=1,。在WRITE狀態(tài)CYUSB3014完成IN_ADDR和IN_DATA兩個操作,。通過IN_ADDR操作,GPIF硬件采樣來自地址總線的值,,并使用它選擇DMA線程,。通過IN_DATA操作對來自數據總線的數據進行采樣,然后將其轉移到所指定的位置(DMA通道或固件應用),。在ZLP狀態(tài)和SHORT_PKT狀態(tài),,通過COMMIT操作可強制緩沖器/數據包結束。寫FIFO過程仿真時序如圖7所示,。
3.2 FPGA程序設計
記錄儀采集到的數據以8級流水線方式寫入到Flash存儲陣列,,即在寫入過程中同時對4組Flash執(zhí)行頁編程操作,故Flash陣列數據讀寫的基本單位的容量為4×4 KB=16 KB,,數據寬度為4×8 bit=32 bit,。為了保證讀出數據與寫入數據完全一致,同樣采用流水線的方式對Flash存儲陣列中4組存儲單元執(zhí)行讀數操作,。在FPGA內部建立一個容量為4 096×32 bit=128 Kbit的FIFO,,FIFO數據端設置為32 bit,32 bit輸出,,深度為4 096,。K9WBG08U1M的單個字節(jié)的讀取速度最快為25 ns。當記錄儀執(zhí)行讀數操作時,,數據寫入FIFO,,一旦FIFO滿后,,FIFO滿標志位有效,同時使FIFO寫使能無效以及Flash存儲陣列停止讀操作,,當CYUSB3014的SLWR位檢測到FIFO的滿標志位后,,使FIFO讀使能有效,開始將FIFO中的數據寫入CYUSB3014中,。本設計中Flash的讀寫時鐘設置為30 MHz,GPIF接口時鐘設置為80 MHz,。
使用ModelSim軟件對讀數過程進行功能仿真,,結果如圖8所示。讀數過程通過A1:A0=0選擇線程0,,FLAGA用于監(jiān)視當前線程的狀態(tài),,當FLAGA為1時表示非滿。SLCS一直為低電平有效狀態(tài),,當SLWR為低電平時,,FPGA可向CYUSB3014寫入數據。數據在時鐘上升沿寫入CYUSB3014套接字緩沖區(qū),,緊接著CYUSB3014啟動DMA通道,,當緩沖區(qū)寫滿數據后,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狀態(tài)機設計,,利用數據記錄儀FPGA作為外部主控制器,。在該應用中,USB 3.0接口速率可達120 MB/s,,系統(tǒng)工作穩(wěn)定,,實現了對系統(tǒng)存儲數據的快速讀取,,為高速大容量存儲系統(tǒng)的快速讀數提供了一種全新的手段,且具有一定的通用性,,可以擴展到所有類似Flash存儲系統(tǒng)中,,具有一定的使用價值。
參考文獻
[1] 祖靜,,申湘南,,張文棟.存儲測試技術[J].兵工學報,1994(4):30-34.
[2] 安海磊.高速數據采集存儲系統(tǒng)設計[D].西安:西安電子科技大學,,2012.
[3] 張誠,,羅豐.基于千兆以太網的高速數據傳輸系統(tǒng)設計[J].電子科技,2011(1):44-46.
[4] 王輝,,陳愛生.基于FT2232H的USB2.0數據采集系統(tǒng)設計[J].電子器件,,2015(1):144-147.
[5] 岳孝忠,裴東興,,王健.基于USB3.0接口高速數據采集系統(tǒng)的設計[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的雙備份固態(tài)存儲系統(tǒng)[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.