劉林仙,喬楠楠,童 強,王朝陽,馬 奎,李 升,楊佳苗
(1. 山西大學 自動化與軟件學院,山西 太原 030013;2. 上海交通大學 電子信息與電氣工程學院,上海 200240)
隨著大數據的興起和人工智能的發展,高速采集傳輸系統在數據采集、 數據接收、 數據緩存、 數據傳輸等方面,都必須滿足處理高速數據的條件,尤其對大批量原始數據進行快速穩定的傳輸提出了更高的要求[1-3].
目前主要使用的高速數據傳輸方式有USB3.0、 千兆以太網等[4,5]. 千兆以太網理論傳輸速度為1 Gbps,USB3.0理論傳輸速度為5 Gbps,因此在涉及大批量數據傳輸應用時,USB3.0在傳輸速度上比千兆以太網具有更大優勢,而且數據傳輸穩定性更高[6-8]. 同時,由于FPGA具有數據并行處理能力和高度靈活性,因此在數據采集和高性能數字信號處理領域等方面有廣泛應用. 但是由于常用的USB3.0通信接口并不適配于FPGA開發使用,因此開發人員在使用過程中都需要自己設計通信接口,嚴重降低了開發效率[9-11].
因此本文設計了一款基于FPGA的USB3.0通信IP核接口,最大限度發揮FPGA的并行數據傳輸速度和USB3.0的高性能傳輸方式,對未來高速數據傳輸的發展具有重要意義.
系統總體框圖如圖1 所示,系統工作流程包括發送控制命令和上傳數據,其中FX3和FPGA分別采用獨立的外部時鐘進行工作. 當發送控制命令時,PC端首先通過上位機軟件寫入命令,通過FX3芯片將命令發送到FPGA,FPGA通過IP核解析命令并緩存到RAM中; 當系統上傳數據時,FPGA讀取內部數據,利用USB3.0接口將數據發送到FX3上,最后將數據傳輸到PC端.

圖1 系統總體框圖Fig.1 Diagram of system block
系統的USB3.0芯片選取Cypress公司FX3系列的CYUSB3014; FPGA芯片選擇為Xilinx公司的XC7A35TFTG256; EEPROM為MICT-MT41K128M16JT-96. 其中CYUSB3014芯片內嵌32 b ARM9系列微處理器,同時可以通過并行可編程接口GPIF II將芯片與任何ASIC和FPGA相連接,芯片向下兼容USB2.0模式,開發人員可以通過編程設置芯片工作模式.
本文采用Cypress官方提供的設計固件Slavefifo_2bit接口驗證FPGA接口的IP核. 該固件在加電后,由EEPROM加載到CYUSB3014中,并在其中運行,其作用是控制硬件來完成預期的設備功能. GPIF II接口是USB3.0芯片與外部通信的主要接口部分,理論上可以通過該接口與FPGA實現無縫銜接,進行高速并行數據傳輸. GPIF II接口的參數均可以在可視化界面進行修改,主要參數為: (1)外設接口,如I2C,I2S,UART等; (2)數據模式: 大端模式(big endian)、 小端模式(little endian); (3)標志位: FLAGX[12,13].
Cyfxslfifosync.c是固件Slavefifo_2bit的主程序,主要包含: IO矩陣配置函數、 初始化應用線程函數、 端點和DMA配置函數、 USB模塊的回調函數、 調試信息打印函數. 固件使用流程為: 1)對時鐘模塊進行配置,令系統時鐘工作頻率為400 MHz; 2)初始化GPIF接口和USB接口,配置GPIF II接口和固件信息; 3)緩存區進行初始化,選擇UART接口打印調試信息[14,15]. 在固件工作過程中通過回調函數進行數據和命令處理,其工作示意圖如圖2 所示.

圖2 固件工作示意圖Fig.2 Schematic diagram of firmware work
FPGA接口既要完成與USB控制器GPIF II的對接,同時也要提供對FPGA內部邏輯模塊的數據傳輸接口. FPGA接口邏輯是本系統的核心,它作為主設備,控制著從設備GPIF的工作狀態. FPGA接口邏輯模塊內部有一些標志工作狀態的寄存器,用戶可以通過上位機軟件來配置這些寄存器,從而指定整個系統的工作模式. 因此,在執行某種操作之前,需要通過上位機軟件先對FPGA接口邏輯模塊進行配置.
FPGA接口邏輯除了具有與GPIF Ⅱ相連接的接口外,還提供了其他接口與FPGA內部其他邏輯模塊相連接,接口信號如圖3 所示.

圖3 接口信號示意圖Fig.3 Schematic diagram of interface signals
fx3數據讀狀態機的狀態遷移如圖4 所示,上電狀態為fx3_rstn,隨后就進入fx3_idle狀態,首先等待fx3的SlaveFIFO有可讀數據,然后進入fx3_read狀態讀取數據,接著進入fx3_rdstop狀態停留一個時鐘周期,最后回到fx3_idle狀態.

圖4 fx3數據讀出狀態機Fig.4 State machine of fx3 data read
fx3數據寫入狀態機的狀態遷移如圖5 所示,上電狀態為fx3_rstn,隨后就進入fx3_idle狀態,此時判斷SlaveFIFO是否可寫入,若可以寫入則進入fx3_write狀態,寫入剛剛讀取的所有數據到fx3的SlaveFIFO中,接著進入fx3_wrstop狀態停留一個時鐘周期,最后回到fx3_idle狀態,如此反復.

圖5 fx3數據寫入狀態機Fig.5 State machine of fx3 data write
在FPGA程序設計中,除了最主要的USB3.0讀寫狀態,還包含在線邏輯分析儀、 FIFO模塊和時鐘模塊,如圖6 所示. 其中ILA在線邏輯分析儀IP核模塊主要用于觀察數據信號和控制信號,判斷信號的時序是否符合要求.

圖6 程序主要模塊Fig.6 Main modules of the program
在測試回環過程中,FIFO模塊主要用于緩存數據寫入和讀出,不涉及到時鐘域和數據位寬的變換. FIFO寫入和讀出數據位寬均為32 bit,寫入和讀出數據深度均為1 024,可存儲4 KB數據. 時鐘模塊的輸入時鐘為FPGA系統時鐘 50 MHz,通過鎖相環產生4路時鐘,頻率分別為25 MHz,100 MHz(相位180°),50 MHz,100 MHz(相位0°). 同時對輸入時鐘模塊的復位信號以及時鐘模塊鎖定后的復位信號進行“異步復位,同步釋放”的處理,確保系統的復位信號穩定可靠.
在進行數據傳輸測試時,首先對USB3.0硬件平臺進行連接,USB3.0固件枚舉工作正常,設備信息描述符無異常. 數據傳輸過程中,使用Cypress官方提供的數據測試軟件,通過固件枚舉,利用端點0x01和0x81實現數據傳輸,測試結果如圖7 所示. 首先上位機軟件通過端點0x01向FPGA發送數據流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中利用在線邏輯分析儀觀察,在上位機發送到FPGA的數據流波形圖中,第一組數據為61 68 69 6E,根據GPIF II的小端模式可以驗證下位機接收到的數據和上位機發送的數據一致,表明數據下行傳輸正確,如圖8 所示.

圖7 上位機測試結果Fig.7 Test results of upper computer software

圖8 上位機發送到FPGA的數據流Fig.8 Data from upper computer to FPGA
如圖9 所示,FPGA通過端點0x81向上位機發送數據流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所發送的數據流如圖7 下方框選所示,表明數據上行傳輸正確.

圖9 FPGA發送到上位機的數據流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核接口的穩定性和正確性. 通過該IP核接口可以實現FPGA和上位機軟件的數據傳輸,經過測試,該接口實際可達到的上行最大通信速率253.1 MB/s,下行最大通信速率 131.9 MB/s.