基于USB3.0協(xié)議的PC與FPGA通信系統(tǒng)的設(shè)計(jì)
摘要 針對(duì)USB2.0在高速數(shù)據(jù)采集系統(tǒng)中帶寬局限問題,設(shè)計(jì)了一款基于USB3.0總線的高速數(shù)據(jù)采集接口系統(tǒng)。通過對(duì)USB3.0的接口硬件系統(tǒng)、設(shè)備固件以及SLAVE FIFO與FPGA接口讀寫操作的設(shè)計(jì),并經(jīng)過實(shí)驗(yàn)測(cè)試,USB3.0硬件傳輸速度可達(dá)260 MByte·s-1,連續(xù)數(shù)據(jù)采集傳輸速率可達(dá)100 MByte·s-1且數(shù)據(jù)保持穩(wěn)定。
本文引用地址:http://cafeforensic.com/article/201610/306326.htm隨著USB3.0解決方案的出現(xiàn),其在保留USB固有優(yōu)勢(shì)的基礎(chǔ)上大幅提高了數(shù)據(jù)傳輸?shù)膸?,適用于高速數(shù)據(jù)采集領(lǐng)域。本文針對(duì)基于USB的高速數(shù)據(jù)采集系統(tǒng)進(jìn)行研究,設(shè)計(jì)了一款基于CYUSB3014芯片的USB3.0高速數(shù)據(jù)采集接口系統(tǒng),該系統(tǒng)基于USB3.0協(xié)議來實(shí)現(xiàn)PC機(jī)與FPGA的數(shù)據(jù)傳輸。本文介紹了USB3.0固件的設(shè)計(jì)方法,GPIF II接口特性以及SIAVE FIFO與FPGA的讀寫操作設(shè)計(jì)。
1 USB3.0系統(tǒng)結(jié)構(gòu)的設(shè)計(jì)
如圖1所示,USB3.0系統(tǒng)的主芯片架構(gòu)為Cypress公司FX3系列CYUSB3014 USB3.0控制芯片、FPGA芯片EP3CA0F484、DDR2芯片MT47H64M16HR。
CYUSB3014 USB專用控制芯片是新一代USB外設(shè)控制器,具有高度集成的靈活特性,可幫助開發(fā)人員為任何系統(tǒng)添加USB3.0功能。其擁有工作頻率可達(dá)200 MHz的32 bit的ARM9內(nèi)核,使得FX3能夠應(yīng)用在對(duì)數(shù)據(jù)處理要求較高的地方。芯片內(nèi)部集成了一個(gè)512 KByte SRAM,用于存儲(chǔ)代碼、配置參數(shù),同時(shí)用作芯片內(nèi)部DMA通道的緩沖區(qū)。并集成了可編程的100 MHz的GPIF II接口能連接多種類型外部器件,支持最大32個(gè)可編程物理端點(diǎn)。
2 FX3固件的設(shè)計(jì)
固件是用以完成驅(qū)動(dòng)程序無法完成的USB芯片及其外圍芯片的初始化及控制工作的代碼。FX3固件的主要功能包括:初始化參數(shù)的配置、輔助完成設(shè)備的重新枚舉機(jī)制、對(duì)中斷的處理、數(shù)據(jù)的接收與發(fā)送以及對(duì)外圍的控制。FX3的固件設(shè)計(jì)只需調(diào)用相應(yīng)的庫(kù)函數(shù),而不需要設(shè)計(jì)者過分關(guān)注底層硬件設(shè)置,大幅降低了固件的開發(fā)難度。EZ—USB FX3的固件設(shè)計(jì)主要包括對(duì)GPIF II接口、DMA通道及回調(diào)函數(shù)的設(shè)計(jì)。本文主要對(duì)GPIF II接口以及DMA通道加以介紹。
2.1 GPIF II接口
GPIF II接口是FX3與外部設(shè)備連接的重要組成部分,利用該接口可以實(shí)現(xiàn)與任何外部設(shè)備的高速并行數(shù)據(jù)傳輸。它具有一個(gè)提供多達(dá)256個(gè)可編程狀態(tài)的完全可編程的狀態(tài)機(jī),可實(shí)現(xiàn)與任何處理器、ASIC、DSP或FPGA等的設(shè)備的無縫連接。GPIF II接口可在100 MHz的工作頻率下實(shí)現(xiàn)32 bit數(shù)據(jù)的并行傳輸,最高有效數(shù)據(jù)的傳輸速率可達(dá)400 MByte ·s-1。該接口可配置為主機(jī)模式或從機(jī)模式,且數(shù)據(jù)總線可在8 bit、16 bit及32 bit之間靈活選擇。
設(shè)計(jì)將GPIF II接口配置為32位同步SLAVEFIFO模式,外部處理器可像對(duì)普通FIFO一樣對(duì)FX3FIFO進(jìn)行讀寫。由PCLK信號(hào)作為接口狀態(tài)機(jī)的工作時(shí)鐘,接口上的地址信號(hào)A0:A1表示要訪問的線程,F(xiàn)PGA通過檢測(cè)4個(gè)標(biāo)志信號(hào)FLAGA~D來檢測(cè)緩沖FIFO是空或者滿。配置為SLAVE FIFO模式的GPIF II與外部設(shè)備的信號(hào)連接如圖2所示。
2.2 DMA通道
FX3內(nèi)部通過DMA通道將不同外圍接口連接起來,以實(shí)現(xiàn)不同接口之間的數(shù)據(jù)傳輸。DMA通道是一種軟件結(jié)構(gòu),該結(jié)構(gòu)封裝了套接字、緩沖區(qū)和描述符3種硬件元素。套接字是存在于外部接口中的硬件模塊,一個(gè)外部接口可以包含多個(gè)套接字,在固件系統(tǒng)中套接字處于DMA通道的兩端,一個(gè)套接字用于輸入數(shù)據(jù),另一個(gè)則用于輸出數(shù)據(jù)。數(shù)據(jù)通過套接字流入或流出已建立好的DMA數(shù)據(jù)通道。緩沖區(qū)是控制器系統(tǒng)內(nèi)存中的數(shù)據(jù)緩沖區(qū),相當(dāng)于DMA數(shù)據(jù)通道中的中轉(zhuǎn)站,流入套接字的數(shù)據(jù)首先被存放到緩沖區(qū)中,然后才能被輸出數(shù)據(jù)的套接字從緩沖區(qū)中讀出。描述符作為一種數(shù)據(jù)結(jié)構(gòu)可將與數(shù)據(jù)流相關(guān)的套接字和緩沖區(qū)關(guān)聯(lián)起來。圖3為一個(gè)方向?yàn)镻2U的DMA數(shù)據(jù)通道,此數(shù)據(jù)通道由8個(gè)尺寸為16×1 024的緩存及一個(gè)PIB套接字和一個(gè)UIB套接字組成。
FX3提供了多種DMA通道模式,可分為兩種:一種是自動(dòng)DMA通道;另一種是手動(dòng)DMA通道。自動(dòng)DMA通道在通道建立起來并開始運(yùn)行后,固件就不再干預(yù)數(shù)據(jù)流的傳輸,數(shù)據(jù)將連續(xù)不斷地流過自動(dòng)數(shù)據(jù)通道,因不需固件干預(yù),所以這種通道模式能提供最大的數(shù)據(jù)效率;而手動(dòng)DMA通道在數(shù)據(jù)流動(dòng)過程中需要CPU干預(yù),這樣就可監(jiān)視或修改數(shù)據(jù)流,但有可能會(huì)降低數(shù)據(jù)的傳輸效率。所以設(shè)計(jì)采用自動(dòng)DMA方式實(shí)現(xiàn)USB接口與GPIF II接口的數(shù)據(jù)傳輸。
3 FPGA中實(shí)現(xiàn)讀寫程序設(shè)計(jì)
本文通過FPGA采用狀態(tài)機(jī)模式控制同步SLAVEFIFO接口的讀寫操作來實(shí)現(xiàn)訪問FX34個(gè)線程的功能。
(1)SLAVE FIFO讀操作。
IDLE:設(shè)定SLAVE FIFO的地址A0:A1;
STATE 0~3:狀態(tài)自加,使FIFO地址穩(wěn)定且SLCS被激活;
STATE 4:SLOE被激活,驅(qū)動(dòng)數(shù)據(jù)總線;
STATE 5:SLRD和外部寫信號(hào)被激活。且FIFO指針在PCLK的上升沿更新,這會(huì)啟動(dòng)從新尋址位置到數(shù)據(jù)總線之間的數(shù)據(jù)傳輸。
(2)SLAVE FIFO寫操作。
IDLE—STATE 4:與讀操作相同,只是在STATE 5激活sLwR信號(hào)以及外部讀信號(hào)。當(dāng)sLwR被激活時(shí),數(shù)據(jù)寫至FlF0和PcLK的上升沿,F(xiàn)IF0指針遞增。
4 USB3.0采集卡實(shí)測(cè)
設(shè)計(jì)的LISB3.O樣板出來后需要從多方面對(duì)其進(jìn)行實(shí)際測(cè)試以驗(yàn)證其正確性。下面從兩方面測(cè)試板卡設(shè)計(jì)的正確性。
(1)USB3.0固件枚舉測(cè)試。USB3.0固件能否正常工作的一個(gè)重要標(biāo)志是當(dāng)USB3.0控制器連接到主機(jī)上時(shí),設(shè)備能否正常運(yùn)行。設(shè)計(jì)采用Cypress主機(jī)測(cè)試軟件USB Control Center對(duì)FX3固件枚舉功能進(jìn)行測(cè)試。經(jīng)測(cè)試,測(cè)試軟件成功接收了由固件發(fā)的各種描述符。圖4為USB3.0的枚舉成功后在測(cè)試軟件上的正確顯示。
(2)USB3.0數(shù)據(jù)傳輸測(cè)試。設(shè)計(jì)通過EP1 OUT端點(diǎn)來控制EP2 IN和EP2 OUT兩個(gè)端點(diǎn)數(shù)據(jù)的接受和發(fā)送。當(dāng)通過EP1 OUT發(fā)送的最后32位數(shù)的低4位為4’h1時(shí),F(xiàn)PGA接受來自EP2 OUT端點(diǎn)的數(shù)據(jù);當(dāng)通過EP1 OUT發(fā)送的最后32位數(shù)的低4位為4’hF時(shí),F(xiàn)PGA向EP2 IN端點(diǎn)發(fā)送測(cè)試數(shù)據(jù),如圖5所示。圖6為邏輯分析儀實(shí)時(shí)監(jiān)測(cè)的PC向FPCA發(fā)送的數(shù)據(jù)顯示。
5 結(jié)束語
本文介紹了USB3.0控制器的固件及FPGA讀寫操作的主要工作機(jī)制,并通過實(shí)驗(yàn)驗(yàn)證了所設(shè)計(jì)USB3.0板卡的穩(wěn)定性及正確性。對(duì)USB3.0固件機(jī)制的深入研究是提高設(shè)計(jì)質(zhì)量的前提,因而有必要對(duì)該固件作進(jìn)一步研究以提高設(shè)計(jì)的效率與正確性。
評(píng)論