摘 要: 選取Altera公司Cyclone III系列EP3C40F484作為新型高速數(shù)據(jù)傳輸系統(tǒng)控制平臺(tái),將DDR2作為FIFO,借助USB3.0中的CYUSB3014,完成FPGA與PC之間的高速圖像數(shù)據(jù)傳輸。通過(guò)軟硬件測(cè)試,驗(yàn)證了該系統(tǒng)圖像數(shù)據(jù)傳輸?shù)母咚俸涂煽啃浴?/p>
關(guān)鍵詞:USB3.0;CYUSB3014;噴繪機(jī);FPGA,DDR2
隨著科技的不斷進(jìn)步,噴繪機(jī)對(duì)圖像數(shù)據(jù)的傳輸速度有了更高的要求,傳統(tǒng)USB1.0或2.0傳輸顯示已不能達(dá)到要求。雖然理論上USB3.0[1]協(xié)議傳輸速度達(dá) 5 Gb/s,但由于種種原因,數(shù)據(jù)傳輸速度[2]離理論數(shù)值還有很大差值,如何在實(shí)際速度上提高圖像數(shù)據(jù)的傳輸速度值得研究。
1 系統(tǒng)總體設(shè)計(jì)
本系統(tǒng)主要研究PC和FPGA間的數(shù)據(jù)傳輸,圖1是系統(tǒng)的總體設(shè)計(jì)。從圖中看出,圖像數(shù)據(jù)從PC發(fā)送時(shí)經(jīng)過(guò)USB3.0接口,并在內(nèi)部通過(guò)DMA傳送方式把圖像數(shù)據(jù)傳送到GPIF II接口,然后FPGA直接從GPIF II接口處讀出圖像數(shù)據(jù),發(fā)送給需要的I/O接口或外部器件。若把FPGA作為數(shù)據(jù)源向PC發(fā)送數(shù)據(jù),為給批量(BULK)傳輸提供足夠的緩存空間,需要把DDR2作為FIFO,數(shù)據(jù)從FPGA經(jīng)過(guò)FIFO緩沖區(qū)通過(guò)FX3系統(tǒng)的USB3.0接口傳送到PC。FPGA采用了50 MHz的主頻,其中4個(gè)按鍵中一個(gè)是復(fù)位鍵,剩下3個(gè)按鍵對(duì)應(yīng)到測(cè)試速度指示燈,并且按鍵的狀態(tài)FPGA發(fā)送到FX3系統(tǒng),然后上傳到上位機(jī)。
2 系統(tǒng)硬件設(shè)計(jì)
設(shè)計(jì)中采用Altera公司Cyclone III系列EP3C40F484芯片作為FPGA的主控芯片,以MT47H64M16HR芯片DDR2為數(shù)據(jù)設(shè)立緩沖區(qū) ,以FX3系列CYUSB3014芯片作為USB3.0的驅(qū)動(dòng)[2],采用在上位機(jī)編程和Eclipse軟件進(jìn)行編譯下載到USB3.0控制系統(tǒng)板級(jí)上程序,形成API應(yīng)用,進(jìn)行數(shù)據(jù)傳輸測(cè)試。系統(tǒng)設(shè)計(jì)過(guò)程中采用了2片1 Gbit存儲(chǔ)量的DDR2作為FIFO,緩沖FPGA到主機(jī)圖像數(shù)據(jù),同時(shí)2片DDR2分別采用獨(dú)立的地址、控制總線和數(shù)據(jù)總線,支持乒乓倒的數(shù)據(jù)傳輸模式。
圖2所示為FPGA硬件系統(tǒng)的搭建與配置,搭建的過(guò)程主要把FPGA、DDR2以及USB3.0進(jìn)行搭建構(gòu)成完整的通信鏈路。從圖可以看出DDR2的時(shí)鐘主頻頻率來(lái)自FPGA的SYS_CLK_50M引腳,即50 MHz。DDR2采用雙邊沿觸發(fā),即上升沿與下降沿即為100 MHz的讀寫(xiě)頻率。通過(guò)led_io[0]引腳信號(hào)來(lái)控制數(shù)據(jù)方向(即FPGA從DDR2讀數(shù)據(jù)還是寫(xiě)數(shù)據(jù)),并根據(jù)讀寫(xiě)使能對(duì)DDR2的數(shù)據(jù)位以及地址位進(jìn)行嚴(yán)格控制。圖中配置了USB3.0的usb_pclk、usb_dp[31:0]、usb_slwr、usb_sldr、KEY1~KEY3、LED0~LED3、UART的TX、RX。
3 系統(tǒng)的軟件設(shè)計(jì)
在整個(gè)軟件架構(gòu)中分別對(duì)GPIF II狀態(tài)機(jī)、DDR2中的FIFO讀寫(xiě)、USB的數(shù)據(jù)流傳輸?shù)冗M(jìn)行設(shè)計(jì)與研究。為后續(xù)測(cè)試、觀察的需要,在上位機(jī)分別進(jìn)行C++編程和Eclipse 新建并編譯工程且通過(guò)JTAG下載到FX3系統(tǒng)的板級(jí)上,方便上位機(jī)與下位機(jī)通信觀察和控制。
3.1 DDR2中的FIFO讀寫(xiě)設(shè)計(jì)
FIFO建立主要是為了FPGA向上位機(jī)發(fā)送數(shù)據(jù)時(shí)能提供足夠大的緩存,以便可以批量地的處理數(shù)據(jù)。設(shè)計(jì)中的FIFO主要通過(guò)DDR2實(shí)現(xiàn),所以在設(shè)計(jì)過(guò)程中要分別對(duì)DDR2的讀寫(xiě)進(jìn)行控制,圖3為FIFO同步寫(xiě)操作時(shí)序控制。
圖3中的SLWR和SLCS是外部寫(xiě)使能信號(hào),低電平有效。SLWR有效的前提下,每當(dāng)PCLK信號(hào)上升沿將數(shù)據(jù)總線上的數(shù)據(jù)寫(xiě)入到DDR2的FIFO中,而且每當(dāng)時(shí)鐘的上升沿更新FIFO的指針即FIFO ADDR。FlAGA來(lái)源于FX3系統(tǒng),用來(lái)查看被標(biāo)記地址狀態(tài)信號(hào)。FIFO同步讀寫(xiě)時(shí)tas、tws等有嚴(yán)格的時(shí)限,為解決后顧之憂和延時(shí)的精確性,采用在FPGA中寄存器分頻并且設(shè)置比較器的方法來(lái)精確定時(shí)。
3.2 USB數(shù)據(jù)流傳輸
圖4為 USB數(shù)據(jù)流傳輸狀態(tài)圖,此處USB[3]遵循Device IN Stream 協(xié)議。此協(xié)議描述了狀態(tài)切換機(jī)制,主機(jī)中Endpoint數(shù)據(jù)用來(lái)促發(fā)狀態(tài)轉(zhuǎn)換。當(dāng)配置Endpoint后,pipe處于(Disabled)失能狀態(tài),主機(jī)傳送pipe從而切換到Primr Pige狀態(tài)。在Prime Pige狀態(tài)下發(fā)送NRDY并且設(shè)置PP=0而進(jìn)入idle狀態(tài),在空閑狀態(tài)下等待信號(hào)去選擇進(jìn)入Move Data狀態(tài)還是 Start Stream狀態(tài)。若設(shè)置了Nump>0,則進(jìn)入到Start Stream狀態(tài),接收到Dp時(shí)通過(guò)Streamn和CStream的關(guān)系決定切換到Move Data狀態(tài)還是Start Stream End狀態(tài)。圖像數(shù)據(jù)傳輸完成后通過(guò)傳輸PP和Prime進(jìn)入Prime Pipe ACK狀態(tài),然后返回到空閑狀態(tài)。
3.3 FX3系統(tǒng)中GPIF II狀態(tài)機(jī)設(shè)計(jì)
FX3系統(tǒng)中GPIF II接口是USB3.0控制系統(tǒng)必經(jīng)過(guò)的一個(gè)接口,為使系統(tǒng)整體結(jié)構(gòu)更加清晰,此處采用狀態(tài)機(jī)切換機(jī)制。圖5為GPIF II狀態(tài)機(jī)設(shè)計(jì)轉(zhuǎn)化圖,由圖5知系統(tǒng)配置完后,從開(kāi)始狀態(tài)切換到State1狀態(tài),此狀態(tài)下查詢(xún)FV是否有效,F(xiàn)V有效后切換到State2狀態(tài),此狀態(tài)下檢測(cè)輸入信號(hào)(FV和LV)來(lái)決定是否切換到Stata3狀態(tài)。若State3和state4數(shù)據(jù)傳送是緩沖區(qū)的邊界時(shí),接下來(lái)數(shù)據(jù)傳送從State3和State4分別切換到State7和State8,傳送的數(shù)據(jù)不是緩沖區(qū)的邊界時(shí),接下來(lái)數(shù)據(jù)傳送在等待LV的返回信號(hào)后從State3和State4切換到State5和State6。State9、State10、State11、State12是每個(gè)框架結(jié)束以后CPU得到一個(gè)中斷,在中斷里回調(diào)一個(gè)函數(shù)去使能CPU執(zhí)行不同的任務(wù)。
4 系統(tǒng)的測(cè)試
上位機(jī)中通過(guò)C++編寫(xiě)工程并用Eclipse軟件進(jìn)行工程編輯、編譯,通過(guò)JTAG下載到USB3.0控制系統(tǒng)板級(jí)上,形成API應(yīng)用,此應(yīng)用程序可以觀測(cè)數(shù)據(jù)的傳輸速率、波形顯示等。結(jié)合系統(tǒng)總體架構(gòu)的軟件和硬件平臺(tái),最后測(cè)試的結(jié)果如圖6、圖7所示。圖6顯示了上位機(jī)的應(yīng)用程序獲取到的板級(jí)信息,包括當(dāng)前器件的信息Cypress USB3.0 Generic Driver F1、設(shè)備的PID、設(shè)備的VID和設(shè)備的類(lèi)型等。通過(guò)上位機(jī)的器件信息知上位機(jī)讀取到的信息和板級(jí)上的USB3.0設(shè)備吻合,驗(yàn)證了上位機(jī)API應(yīng)用程序的準(zhǔn)確性。圖7的速度性能測(cè)試是在上位機(jī)的API應(yīng)用程序上調(diào)用速率測(cè)試截圖,圖為FIFO同步寫(xiě)的速率測(cè)試,從圖知可以通過(guò)“終止”按鍵停止圖像數(shù)據(jù)傳輸。圖中的運(yùn)行狀態(tài)顯示Cypress USB3.0 Generic Driver F1傳送了1 680個(gè)數(shù)據(jù)包,失敗為0個(gè)數(shù)據(jù)包,速度最小值為153 600 kB/s,最大值為327 680 kB/s,平均值225 979 kB/s,達(dá)到了預(yù)期的效果,在一定程度上解決了噴繪機(jī)圖像數(shù)據(jù)傳輸速度低的瓶頸。
隨著數(shù)字噴繪機(jī)的發(fā)展,如何在精準(zhǔn)數(shù)據(jù)前提下提高數(shù)據(jù)的傳輸速率值得探究。本設(shè)計(jì)系統(tǒng)基于USB3.0協(xié)議結(jié)合當(dāng)今流行的硬件可編輯邏輯處理器—FPGA+USB3.0控制系統(tǒng)+DDR2實(shí)現(xiàn),從理論和實(shí)際上提高了噴繪機(jī)數(shù)據(jù)傳輸速度,達(dá)到了理想的預(yù)期效果。但設(shè)計(jì)系統(tǒng)沒(méi)能完全面向客戶,還有不少缺陷和不足,需要在以后彌補(bǔ)和改正。希望將來(lái)此設(shè)計(jì)系統(tǒng)可以打開(kāi)高速數(shù)據(jù)在噴繪機(jī)傳輸中的應(yīng)用。
參考文獻(xiàn)
[1]王宗超,倪凱, 王偉能,等. 新一代高速串行接口USB3.0介紹[J].記錄媒體技術(shù),2010(2):34-36.
[2] 朱君麗, 汪文. USB3.0的高速信息傳輸瓶頸研究[J].新器件新技術(shù),2013(6):47-48.
[3] 索曉杰,翟正軍,姜紅梅. USB3.0協(xié)議分析與框架設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2012(8):2233-2235.