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