劉林仙,喬楠楠,童 強,王朝陽,馬 奎,李 升,楊佳苗
(1. 山西大學 自動化與軟件學院,山西 太原 030013;2. 上海交通大學 電子信息與電氣工程學院,上海 200240)
隨著大數(shù)據(jù)的興起和人工智能的發(fā)展,高速采集傳輸系統(tǒng)在數(shù)據(jù)采集、 數(shù)據(jù)接收、 數(shù)據(jù)緩存、 數(shù)據(jù)傳輸?shù)确矫?,都必須滿足處理高速數(shù)據(jù)的條件,尤其對大批量原始數(shù)據(jù)進行快速穩(wěn)定的傳輸提出了更高的要求[1-3].
目前主要使用的高速數(shù)據(jù)傳輸方式有USB3.0、 千兆以太網(wǎng)等[4,5]. 千兆以太網(wǎng)理論傳輸速度為1 Gbps,USB3.0理論傳輸速度為5 Gbps,因此在涉及大批量數(shù)據(jù)傳輸應用時,USB3.0在傳輸速度上比千兆以太網(wǎng)具有更大優(yōu)勢,而且數(shù)據(jù)傳輸穩(wěn)定性更高[6-8]. 同時,由于FPGA具有數(shù)據(jù)并行處理能力和高度靈活性,因此在數(shù)據(jù)采集和高性能數(shù)字信號處理領域等方面有廣泛應用. 但是由于常用的USB3.0通信接口并不適配于FPGA開發(fā)使用,因此開發(fā)人員在使用過程中都需要自己設計通信接口,嚴重降低了開發(fā)效率[9-11].
因此本文設計了一款基于FPGA的USB3.0通信IP核接口,最大限度發(fā)揮FPGA的并行數(shù)據(jù)傳輸速度和USB3.0的高性能傳輸方式,對未來高速數(shù)據(jù)傳輸?shù)陌l(fā)展具有重要意義.
系統(tǒng)總體框圖如圖1 所示,系統(tǒng)工作流程包括發(fā)送控制命令和上傳數(shù)據(jù),其中FX3和FPGA分別采用獨立的外部時鐘進行工作. 當發(fā)送控制命令時,PC端首先通過上位機軟件寫入命令,通過FX3芯片將命令發(fā)送到FPGA,F(xiàn)PGA通過IP核解析命令并緩存到RAM中; 當系統(tǒng)上傳數(shù)據(jù)時,F(xiàn)PGA讀取內(nèi)部數(shù)據(jù),利用USB3.0接口將數(shù)據(jù)發(fā)送到FX3上,最后將數(shù)據(jù)傳輸?shù)絇C端.
圖1 系統(tǒng)總體框圖Fig.1 Diagram of system block
系統(tǒng)的USB3.0芯片選取Cypress公司FX3系列的CYUSB3014; FPGA芯片選擇為Xilinx公司的XC7A35TFTG256; EEPROM為MICT-MT41K128M16JT-96. 其中CYUSB3014芯片內(nèi)嵌32 b ARM9系列微處理器,同時可以通過并行可編程接口GPIF II將芯片與任何ASIC和FPGA相連接,芯片向下兼容USB2.0模式,開發(fā)人員可以通過編程設置芯片工作模式.
本文采用Cypress官方提供的設計固件Slavefifo_2bit接口驗證FPGA接口的IP核. 該固件在加電后,由EEPROM加載到CYUSB3014中,并在其中運行,其作用是控制硬件來完成預期的設備功能. GPIF II接口是USB3.0芯片與外部通信的主要接口部分,理論上可以通過該接口與FPGA實現(xiàn)無縫銜接,進行高速并行數(shù)據(jù)傳輸. GPIF II接口的參數(shù)均可以在可視化界面進行修改,主要參數(shù)為: (1)外設接口,如I2C,I2S,UART等; (2)數(shù)據(jù)模式: 大端模式(big endian)、 小端模式(little endian); (3)標志位: FLAGX[12,13].
Cyfxslfifosync.c是固件Slavefifo_2bit的主程序,主要包含: IO矩陣配置函數(shù)、 初始化應用線程函數(shù)、 端點和DMA配置函數(shù)、 USB模塊的回調(diào)函數(shù)、 調(diào)試信息打印函數(shù). 固件使用流程為: 1)對時鐘模塊進行配置,令系統(tǒng)時鐘工作頻率為400 MHz; 2)初始化GPIF接口和USB接口,配置GPIF II接口和固件信息; 3)緩存區(qū)進行初始化,選擇UART接口打印調(diào)試信息[14,15]. 在固件工作過程中通過回調(diào)函數(shù)進行數(shù)據(jù)和命令處理,其工作示意圖如圖2 所示.
圖2 固件工作示意圖Fig.2 Schematic diagram of firmware work
FPGA接口既要完成與USB控制器GPIF II的對接,同時也要提供對FPGA內(nèi)部邏輯模塊的數(shù)據(jù)傳輸接口. FPGA接口邏輯是本系統(tǒng)的核心,它作為主設備,控制著從設備GPIF的工作狀態(tài). FPGA接口邏輯模塊內(nèi)部有一些標志工作狀態(tài)的寄存器,用戶可以通過上位機軟件來配置這些寄存器,從而指定整個系統(tǒng)的工作模式. 因此,在執(zhí)行某種操作之前,需要通過上位機軟件先對FPGA接口邏輯模塊進行配置.
FPGA接口邏輯除了具有與GPIF Ⅱ相連接的接口外,還提供了其他接口與FPGA內(nèi)部其他邏輯模塊相連接,接口信號如圖3 所示.
圖3 接口信號示意圖Fig.3 Schematic diagram of interface signals
fx3數(shù)據(jù)讀狀態(tài)機的狀態(tài)遷移如圖4 所示,上電狀態(tài)為fx3_rstn,隨后就進入fx3_idle狀態(tài),首先等待fx3的SlaveFIFO有可讀數(shù)據(jù),然后進入fx3_read狀態(tài)讀取數(shù)據(jù),接著進入fx3_rdstop狀態(tài)停留一個時鐘周期,最后回到fx3_idle狀態(tài).
圖4 fx3數(shù)據(jù)讀出狀態(tài)機Fig.4 State machine of fx3 data read
fx3數(shù)據(jù)寫入狀態(tài)機的狀態(tài)遷移如圖5 所示,上電狀態(tài)為fx3_rstn,隨后就進入fx3_idle狀態(tài),此時判斷SlaveFIFO是否可寫入,若可以寫入則進入fx3_write狀態(tài),寫入剛剛讀取的所有數(shù)據(jù)到fx3的SlaveFIFO中,接著進入fx3_wrstop狀態(tài)停留一個時鐘周期,最后回到fx3_idle狀態(tài),如此反復.
圖5 fx3數(shù)據(jù)寫入狀態(tài)機Fig.5 State machine of fx3 data write
在FPGA程序設計中,除了最主要的USB3.0讀寫狀態(tài),還包含在線邏輯分析儀、 FIFO模塊和時鐘模塊,如圖6 所示. 其中ILA在線邏輯分析儀IP核模塊主要用于觀察數(shù)據(jù)信號和控制信號,判斷信號的時序是否符合要求.
圖6 程序主要模塊Fig.6 Main modules of the program
在測試回環(huán)過程中,F(xiàn)IFO模塊主要用于緩存數(shù)據(jù)寫入和讀出,不涉及到時鐘域和數(shù)據(jù)位寬的變換. FIFO寫入和讀出數(shù)據(jù)位寬均為32 bit,寫入和讀出數(shù)據(jù)深度均為1 024,可存儲4 KB數(shù)據(jù). 時鐘模塊的輸入時鐘為FPGA系統(tǒng)時鐘 50 MHz,通過鎖相環(huán)產(chǎn)生4路時鐘,頻率分別為25 MHz,100 MHz(相位180°),50 MHz,100 MHz(相位0°). 同時對輸入時鐘模塊的復位信號以及時鐘模塊鎖定后的復位信號進行“異步復位,同步釋放”的處理,確保系統(tǒng)的復位信號穩(wěn)定可靠.
在進行數(shù)據(jù)傳輸測試時,首先對USB3.0硬件平臺進行連接,USB3.0固件枚舉工作正常,設備信息描述符無異常. 數(shù)據(jù)傳輸過程中,使用Cypress官方提供的數(shù)據(jù)測試軟件,通過固件枚舉,利用端點0x01和0x81實現(xiàn)數(shù)據(jù)傳輸,測試結果如圖7 所示. 首先上位機軟件通過端點0x01向FPGA發(fā)送數(shù)據(jù)流6E 69 68 61/6F 77 6F 73/68 69 71 69/61 6F 6E 61/6E 6E 6C 61/69 7A 69 68/65 6E 61 6E/73 68 65 6E,如圖7 上方框選所示,同時在FPGA中利用在線邏輯分析儀觀察,在上位機發(fā)送到FPGA的數(shù)據(jù)流波形圖中,第一組數(shù)據(jù)為61 68 69 6E,根據(jù)GPIF II的小端模式可以驗證下位機接收到的數(shù)據(jù)和上位機發(fā)送的數(shù)據(jù)一致,表明數(shù)據(jù)下行傳輸正確,如圖8 所示.
圖7 上位機測試結果Fig.7 Test results of upper computer software
圖8 上位機發(fā)送到FPGA的數(shù)據(jù)流Fig.8 Data from upper computer to FPGA
如圖9 所示,F(xiàn)PGA通過端點0x81向上位機發(fā)送數(shù)據(jù)流6E 69 68 61/ 6F 77 6F 73 /68 69 71 69/ 61 6F 6E 61/6E 6E 6C 61 /69 7A 69 68 /65 6E 61 6E/ 73 68 65 6E,在上位機軟件接收到FPGA所發(fā)送的數(shù)據(jù)流如圖7 下方框選所示,表明數(shù)據(jù)上行傳輸正確.
圖9 FPGA發(fā)送到上位機的數(shù)據(jù)流Fig.9 Data from FPGA to upper computer
本文使用Cypress公司官方提供的速度測試軟件streamer對IP核的傳輸速度進行測試. 測試結果表明該接口上行通信速率可達到259 200 KB/s,約為253.1 MB/s,如圖10 所示. 下行通信速率可達到135 100 KB/s,約為131.9 MB/s,如圖11 所示.
圖10 上行通信速率測試結果Fig.10 Communication rate test results of upstream
圖11 下行通信速率測試結果Fig.11 Communication rate test results of downstream
本文利用Cypress公司FX3系列的CYUSB3014控制芯片,設計適用于FPGA的USB3.0通信IP核接口,并通過實驗驗證了所設計IP核接口的穩(wěn)定性和正確性. 通過該IP核接口可以實現(xiàn)FPGA和上位機軟件的數(shù)據(jù)傳輸,經(jīng)過測試,該接口實際可達到的上行最大通信速率253.1 MB/s,下行最大通信速率 131.9 MB/s.