宋中喆+裴東興+楊少博



摘 要: 針對目前存儲測試系統中存有的數據傳輸慢,經常出現錯誤的顯著問題,設計基于USB 3.0接口的高速數據傳輸系統。該設計以FPGA作為主控芯片,采用負延遲與乒乓緩存的方式將A/D轉換的數據高速緩存到DDR2 SDRAM中。設計了GPIF Ⅱ 通用可編程接口和手動 DMA 通道,實現了USB 3.0同步從FIFO模式的高速數據傳輸。系統分析測試和實驗結果表明,該系統實現了數據的高速可靠傳輸,能有效解決大容量數據采集后的數據高速傳輸問題。
關鍵詞: 存儲測試; USB 3.0接口; 高速數據傳輸; 負延遲; 乒乓緩存
中圖分類號: TN919.6?34; TP334.7 文獻標識碼: A 文章編號: 1004?373X(2017)04?0159?04
Design of high?speed data transmission system based on USB 3.0 interface
SONG Zhongzhe1,2, PEI Dongxing1,2, YANG Shaobo1,2
(1. National Key Laboratory for Electronic Measurement Technology, North University of China, Taiyuan 030051, China;
2. MOE Key Laboratory of Instrumentation Science and Dynamic Measurement, North University of China, Taiyuan 030051, China)
Abstract: Since the current memory test system has the prominent problems of low data transmission speed and frequent fault occurrence, a high?speed data transmission system based on USB 3.0 interface was designed. The FPGA is taken as the main control chip of the design. The modes of negative delay and Ping?Pong cache are adopted to cache the data transformed through A/D into the DDR2 SDRAM with high speed. The general programming interface GPIF II and manual DMA channel were designed to realize the high?speed data transmission based on USB 3.0 synchronous slave FIFO mode. The system analysis, test and experimental results show that the system has realized the high?speed and reliable data transmission, and can effectively solve the high?speed data transmission problem occurring after large?capacity data acquisition.
Keywords: memory testing; USB 3.0 interface; high?speed data transmission; negative delay; Ping?Pong cache
0 引 言
隨著當前存儲測試系統[1]中存儲容量的急劇增加,對數據的傳輸速度的要求隨之也越來越高,此外在某些需要對數據進行實時傳輸處理的場合,人們對數據傳輸系統的速度要求也越來越嚴格[2]。本實驗室以前一直在使用USB 2.0接口作為存儲測試系統的數據傳輸接口,但受限于其理論最大480 Mb/s的傳輸速度,現在已逐漸難以滿足數據傳輸的要求。新一代的 USB 3.0繼承了 USB 2.0 的所有優勢,能夠向下兼容 USB 2.0,且在USB 2.0的基礎上新增了超速傳輸模式,理論傳輸速度[3?4]可高達 5 Gb/s。并且在固件程序開發、電源管理等方面有了更好的提高。故而USB 3.0接口可以很好地解決那些問題。在未來的幾年內,USB 3.0 必定能夠較好地應對數字時代要求的高速性能和可靠互聯性[5]。
1 系統總體方案設計
本文設計的系統主要包含五部分:傳感器與信號調理電路、ADC數據轉換電路、DDR2數據存儲單元、FPGA控制電路和USB 3.0數據傳輸接口。圖1為系統的總體原理框圖。傳感器將需要測量的物理量轉換為相應的模擬電信號,信號調理電路用來將傳感器輸出的微弱模擬信號進行放大濾波等處理[6]。ADC數據轉換電路將經過調理通道的采樣模擬信號轉換為數字信號。DDR2數據存儲單元用來按所接收的指令來對數據進行高速緩存。數據轉換和存儲的操作在FPGA控制單元的控制下進行,在FPGA內部構建有PLL鎖相環,用來對輸入時鐘進行頻率轉換,并將不同的輸出時鐘提供給A/D轉換器、DDR2及USB 3.0控制電路。USB 3.0接口電路傳輸上位機指令,FPGA接收指令并對其解碼,然后將FIFO中緩存的數據傳輸至上位機[7]。
2 硬件及實現原理
2.1 系統芯片選型
對于FPGA芯片的選擇,本文采用Altera公司的低成本Cyclone Ⅲ系列 EP3C16F484芯片來作為系統的控制中心。該芯片內部包含較多的RAM容量,利用IP核可以搭建自己所需要的電路模塊,如FIFO緩存模塊,PLL鎖相環等。USB 3.0接口協議芯片采用Cypress公司的CYUSB3014,DDR2 SDRAM選用MT47H64M16HR。
2.2 FPGA與DDR2存儲接口設計
在實際應用中為防止有效數據在FIFO中累積而造成數據丟失,故設計了DDR2數據緩存模塊,用來對海量的數據進行緩存。圖2為FPGA與DDR2連接圖。DDR2 能夠以內部控制總線4倍的速度運行,還能夠以外部總線的4倍的速度進行讀/寫操作。DDR2 協議包括很多用戶命令,如存儲器初始化、讀/寫命令和自動刷新等。為確保 DDR2能夠在正常情況下工作,對這些命令的時序,以及命令間的順序及間隔都有著特別嚴格的要求。FPGA內部有集成的高性能 DDR2 控制器內核,直接調用該模塊,即可較方便地實現對數據的讀/寫操作。
2.3 FPGA與USB3.0通信接口設計
圖3為FPGA與FX3的接口設計圖。本系統將 GPIF Ⅱ(通用可編程接口)配置為32位的同步從FIFO 模式,GPIF Ⅱ的32位DQ數據總線與FPG相應的32位數據端口相連,在 FX3 系統內部,GPIF Ⅱ沒有直接與 USB端口緩沖區相連,而是直接連接到FX3的內部 DMA網絡。FLAGA和FLAGB為CYUSB3014的狀態標志信號,用來反饋給外部主控制器 FPGA。PCLK與FPGA的CLK相連,用來接收時鐘信號。此外,SLCS為片選,SLWR為寫使能,SLOE為輸出使能,SLRD為讀使能,PKTEND為短包發送信號,均在低電平時被激活,A[1:0]為線程地址選擇信號。GPIF Ⅱ的端口操作和控制信號由內部可編程的狀態機引擎控制,外部處理器通過配置輸入到FX3的控制信號來控制狀態機的操作[8]。
3 系統程序設計
3.1 A/D采集與數據緩存流程
本設計主要完成從系統上電開始,A/D采樣輸入/輸出信號到采樣數據存儲工作。主要包括系統初始化、A/D采樣控制、未觸發前的FIFO循環寫、觸發后的雙FIFO乒乓存儲操作。首先系統上電后,初始化A/D進行數據采集,此過程采用負延遲的方式,即有效的觸發信號還沒有到來,輸入FIFO1進行循環采樣,由于FIFO容量有限,存儲的數據會不斷刷新,每一時刻所存儲到的數據都是此段時間內最新采樣到的數據。一旦觸發信號到來,FIFO1和 FIFO2都有效,此時進行雙FIFO乒乓存儲操作。圖4為A/D采集與數據緩存流程圖。
觸發到來后,第一步將最初FIFO1中緩存的數據首先讀出寫入DDR2,同時將觸發后A/D輸出數據寫入 FIFO2中;第二步將第一步中FIFO2緩存的數據寫入 DDR2,于此同時將 A/D 輸出數據寫入FIFO1中;第三步將第二步中FIFO1緩存的數據寫入DDR2,于此同時將A/D觸發后輸出數據寫入 FIFO2 中,依此循環,這樣通過兩個 FIFO 按節拍的讀寫,將數據流無間斷地送入DDR2中[9]。直到系統停止采樣信號到來時,此過程結束。圖5為乒乓緩存操作圖。
3.2 USB 3.0程序設計
采集后的數據通過 USB 3.0 接口傳輸至上位機進行處理分析,FX3器件有一個內部DMA結構,用來將GPIF Ⅱ接口連接至系統內部存儲器和其他串行外設。在FX3上運行的固件將該數據路徑連接至合適的數據源,或連接至數據接收器[10]。圖6為高速讀寫數據的DMA通道設計圖。
套接字是外設硬件模塊和FX3 RAM間的連接點,GPIFⅡ 一側的套接字相當于端點[11],GPIF 線程是位于GPIF Ⅱ模塊內專用的數據路徑,用來將外部數據引腳同套接字連接起來。本設計使用由兩位地址線 A[1:0] 決定的四個GPIF線程中的兩個,采用套接字和GPIF線程的默認的對應關系:套接字1與線程1相對應,套接字0與線程0相連。線程的切換是通過FPGA控制GPIF Ⅱ接口上的地址信號A[1:0] 來實現的,當A[1:0]=0時,轉到線程0,為1時則對應線程1。
固件程序中設置DMA通道時,本設計采用手動DMA通道,相比自動DMA通道,手動DMA通道允許固件管理和控制數據流,從而確保數據的可靠傳輸。將兩組共32個緩沖器分配到特定的輸入或輸出DMA通道上,每個緩沖器的大小根據USB的速度而被定義:全速模式時為64 B,高速時則為512 B,超速時設為1 024 B。創建手動DMA通道時,首先設置DMA的大小,然后設置從設備DMA緩存計數,接著配置DMA的生產者和消費者套接字,最后指定DMA通道類型。
3.3 FPGA與USB 3.0通信程序設計
此部分主要完成FPGA與GPIF Ⅱ接口進行通信的設計。由于本設計中 DDR2的輸出數據位寬為16 b,而GPIF Ⅱ接口采用32 b,故在FPGA中還設計了輸出緩存FIFO,用來匹配不同寬度的數據接口。
在 GPIF Ⅱ Designer中,將FLAGA配置為Current_thread_DMA_RDY,FLAGB 配置為Current_thread_
DMA_watermark,兩者都設為低電平有效,故當其為低電平時,它們指示滿/空或一部分滿/一部分空狀態。 本文外部FPGA通過從設備 FIFO 對 FX3 進行突發寫入傳輸,圖7為32 b數據總線寬度的突發寫入傳輸邏輯分析器截圖。在突發模式下,在整個突發寫入過程中保持激活狀態。在突發寫入模式下,令A[1:0]=0,GPIF Ⅱ狀態機控制切換到線程0,數據被接入作為生產者的套接字0,然后當寫使能信號SLWR有效時,來自外部的數據先被寫入位于系統內存的DMA緩沖區的第一個緩沖器Buffer0,接著每當 PCLK 的上升沿到來時,都會將數據總線上的值寫入到FX3的Buffer0內,當Buffer0狀態滿后,FLAGA反饋信號將被拉低,用來表明其滿狀態。此時FX3 CPU 即會接收到一個由GPIF Ⅱ 套接字發送的中斷,來通知至此已填充了DMA 緩沖區,FX3 的CPU可將此信息發給USB套接字。此過程后調用的回調函數清空DMA 緩沖區,FLAGA狀態標志重新變為高電平,然后消費端點將數據上傳給上位機,接著USB套接字發送一個中斷給FX3 CPU,來告知USB套接字已經清空了DMA 緩沖區,至此DMA通道即可轉到第二個緩沖器。外部FPGA主設備必須監控FLAGA,以確定何時完成切換操作,以及何時可同下一個緩沖區進行數據訪問。
在FX3的固件程序的 cyfxslfifo.c 文件中,添加一個CyU3PgpifSocketConfigure() API 調用,以指定水印值,水印值決定何時激活局部標志FLAGB。圖7中,FLAGB在寫入最后數據字的同一個周期內轉為低電平。
4 系統測試
在完成了系統的設計后對系統進行數據傳輸性能測試。首先通過信號發生器來代替傳感器與信號調理電路輸入模擬鋸齒波信號給ADC,圖8為實驗室某上位機記錄儀通過USB 3.0接口接收到的鋸齒波數據。由圖8知波形與信號發生器的輸出一致,表明數據傳輸正確。
圖9為利用Cypress 公司streamer軟件進行測試系統的傳輸速度,本系統的測試速度達到了252 900 KB/s,即247.0 MB/s的超高速度,相比于先前使用的USB 2.0接口的速度,有了非常明顯的提高,并且整個傳輸過程沒有錯誤出現。
5 結 語
本文設計了基于USB 3.0同步從FIFO模式的高速數據傳輸系統,采用FPGA作為整個系統主控芯片,借助其非常高效的并行處理能力,并與A/D轉換模塊、DDR2數據緩存模塊及USB 3.0通信模塊相結合,使得數據的采集、轉換、存儲和傳輸能夠協調進行,達到了數據采集后的的高速傳輸的要求。經過多次傳輸測試,表明該系統的傳輸速度可達247.0 MB/s,而且系統非常穩定,不會出現數據丟失,能夠可靠完成數據的高速傳輸。
參考文獻
[1] 張文棟.存儲測試系統的設計理論及其應用[M].北京:高等教育出版社,2002:34?40.
[2] 岳孝忠,裴東興,王健.基于USB 3.0接口高速數據采集系統的設計[J].電子器件,2015(1):140?143.
[3] 朱耀麟,馬慧銘.USB 3.0超高速多串口傳輸系統的設計[J].電子技術應用,2013(9):129?131.
[4] Hewlett?Packard Company, Intel Corporation, Microsoft Corporation, et al. Universal serial bus 3.0 specification [R]. USA:Alan Berkema, 2011: 45?57.
[5] 蘆艷芳,郭林.USB 3.0兼容性與電源分配方案[J].電腦知識與技術,2010(27):7649?7650.
[6] 馬青.高速數據采集信號調理電路的研究[D].哈爾濱:哈爾濱理工大學,2009.
[7] 柯艷,李杰,孔祥雷,等.基于USB 2.0的多路數據采集系統上位機軟件設計[J].測試技術學報,2010(4):351?356.
[8] Cypress Semiconductor. EZ?USB FX3 technical reference manual [R]. USA:San Jose, 2011: 125?170.
[9] 楊世錫,梁文軍,于保華.振動信號多通道同步整周期數據采集卡設計[J].振動、測試與診斷,2013,33(1):23?28.
[10] Cypress Semiconductor. FX3 programmers manual [R]. USA: San Jose, 2011:39?49.
[11] 楊少博,裴東興,岳孝忠.高速數據采集系統中USB 3.0數據傳輸接口設計[J].電子器件,2015(4):912?916.