楊斌,劉布民,吳斌,程鵬
(1.電子科技大學(xué) 微電子與固體電子學(xué)院,四川 成都 610054;2.中國(guó)科學(xué)院微電子研究所,北京 100029)
隨著數(shù)字通信與數(shù)字多媒體技術(shù)的發(fā)展,實(shí)時(shí)圖像系統(tǒng)已經(jīng)被廣泛應(yīng)用于商業(yè)、工業(yè)、醫(yī)學(xué)、軍事、科學(xué)研究等領(lǐng)域。目前的實(shí)時(shí)圖像系統(tǒng)中,海量的數(shù)據(jù)處理和數(shù)據(jù)成像功能,通常借助計(jì)算機(jī)終端(PC終端)完成,所以系統(tǒng)需要實(shí)時(shí)地將采集到的圖像數(shù)據(jù)傳遞到PC終端。而現(xiàn)在大多數(shù)以PC為終端的實(shí)時(shí)圖像系統(tǒng),都采用PCI接口進(jìn)行數(shù)據(jù)采集后的數(shù)據(jù)傳輸[1],具有安裝復(fù)雜、開發(fā)周期長(zhǎng)、體積大等缺點(diǎn),不適于小型化設(shè)備的應(yīng)用場(chǎng)合。針對(duì)這種情況,本文提出了一種以PC為終端,基于FPGA和USB2.0芯片的便攜式實(shí)時(shí)圖像采集傳輸系統(tǒng)。該系統(tǒng)充分利用了FPGA的實(shí)時(shí)控制能力和實(shí)時(shí)數(shù)據(jù)處理能力,以及USB2.0芯片低成本、高吞吐率、移植方便等特點(diǎn),使得整體系統(tǒng)具有成本低、可擴(kuò)展性強(qiáng)、功耗低、設(shè)備體積小等優(yōu)勢(shì),能夠作為小型化設(shè)備應(yīng)用于多種實(shí)際場(chǎng)合,有較高的應(yīng)用價(jià)值。
系統(tǒng)由 USB2.0芯片、FPGA和圖像傳感器組成[2],外加PC終端,配合系統(tǒng)工作。系統(tǒng)框圖如圖1所示。
系統(tǒng)工作原理:系統(tǒng)上電后,在PC終端的圖形界面中,定義圖像傳感器的配置信息;USB2.0芯片將配置信息轉(zhuǎn)發(fā)至FPGA;FPGA根據(jù)所得信息,對(duì)圖像傳感器進(jìn)行初始化配置;配置完成后,傳感器周期性地采集圖像信號(hào)發(fā)送至FPGA;FPGA利用內(nèi)部2個(gè)采用乒乓操作的FIFO,將圖像數(shù)據(jù)緩存后,發(fā)送至 USB2.0芯片(USB2.0芯片傳輸速度比圖像數(shù)據(jù)獲取速度快);USB2.0芯片將圖像數(shù)據(jù)轉(zhuǎn)發(fā)至PC終端;最后PC終端將實(shí)時(shí)圖像信息顯示出來。如果PC終端顯示的圖像未達(dá)到用戶要求,可實(shí)時(shí)修改圖像傳感器工作模式,以滿足要求。
圖1 系統(tǒng)框圖
系統(tǒng)中,圖像傳感器采用OmniVision公司的低功耗CMOS彩色圖像傳感器芯片 OV7649;FPGA采用 Altera公司面向低功耗、低成本應(yīng)用而推出的CycloneII系列中的EP2C5AF256A7;USB2.0芯片選用Cypress公司的CY7C68013A,它是應(yīng)用廣泛的USB2.0芯片CY7C68013的低功耗版本。EP2C5AF256A7、CY7C68013A組成USB2.0通信部分,該部分為本系統(tǒng)的核心。
FPGA處于系統(tǒng)中核心位置,用于控制圖像傳感器和USB2.0芯片,并將實(shí)時(shí)圖像數(shù)據(jù)緩存轉(zhuǎn)發(fā)。
EP2C5AF256A7的邏輯功能較強(qiáng),完成系統(tǒng)功能后,還有不少邏輯余量,可用于其他控制邏輯,使系統(tǒng)具有較強(qiáng)的可擴(kuò)展性。
USB2.0芯片是系統(tǒng)中數(shù)據(jù)傳輸?shù)暮诵模糜趯D像數(shù)據(jù)轉(zhuǎn)發(fā)至PC終端,并將配置信息轉(zhuǎn)發(fā)到FPGA。圖2為CY7C68013A芯片框圖,片內(nèi)集成了USB2.0收發(fā)器、串行接口引擎(SIE)、增強(qiáng)型的8051微處理器和可編程的外圍接口[3]。
CY7C68013A有3種可用的接口模式:
(1)端口模式下,數(shù)據(jù)經(jīng)內(nèi)部8051微處理器轉(zhuǎn)發(fā),設(shè)計(jì)靈活,但數(shù)據(jù)傳輸速度較慢。
(2)從屬FIFO模式下,數(shù)據(jù)通過片內(nèi)FIFO與外部邏輯連接,傳輸速率高,但需要外部邏輯來提高設(shè)計(jì)靈活性。
圖2 CY7C68013A芯片框圖
(3)GPIF模式下,片內(nèi)FIFO和外部邏輯之間,集成可編程接口,以犧牲傳輸速率來提高數(shù)據(jù)傳輸?shù)撵`活性,是端口模式和從屬FIFO模式的折中。
考慮到系統(tǒng)實(shí)時(shí)性和采用的FPGA邏輯功能較強(qiáng)等原因素,CY7C68013A工作在從屬FIFO模式。
在USB2.0通信部分,主要的硬件連接為FPGA與USB2.0芯片的硬件連接。圖3為FPGA與USB2.0芯片中對(duì)應(yīng)管腳之間的電氣連接。
圖3 USB2.0芯片與FPGA的硬件連接
圖中,IFCLK用于數(shù)據(jù)同步和控制信息同步,采用48 MHz的時(shí)鐘頻率。FLAGB_FULL和FLAGC_EMPTY為FIFO狀態(tài)標(biāo)識(shí)信號(hào)。FIFOADR[1:0]為端點(diǎn)選擇信號(hào):當(dāng)傳遞圖像數(shù)據(jù)時(shí),F(xiàn)IFOADR[1:0]=10;當(dāng)傳遞配置信息時(shí),F(xiàn)IFOADR[1:0]=00。SLOE為數(shù)據(jù)使能信號(hào)。SLRD、SLWR為讀寫控制信號(hào):SLRD有效時(shí),USB2.0芯片轉(zhuǎn)發(fā)配置信息;SLWR有效時(shí),USB2.0芯片轉(zhuǎn)發(fā)圖像數(shù)據(jù)。PKTEND為包結(jié)束命令:FPGA發(fā)送完1幀圖像數(shù)據(jù)后,將該信號(hào)置為有效1次,防止數(shù)據(jù)流不連續(xù)。FD[7:0]為FPGA與USB2.0芯片之間通信的雙向8位數(shù)據(jù)總線。
USB2.0通信部分的軟件實(shí)現(xiàn)包括:(1)USB2.0芯片固件程序;(2)PC終端驅(qū)動(dòng)程序;(3)FPGA的控制代碼。
USB2.0芯片內(nèi)嵌了加強(qiáng)型8051微處理器,幫助 USB2.0芯片完成初始化、協(xié)議通信和片內(nèi)電源管理等工作[4]。要使微處理器正常工作,就離不開固件的控制和協(xié)調(diào),固件應(yīng)該完成下面的內(nèi)容:
(1)初始化:設(shè)置特殊功能寄存器的初值,使USB2.0芯片做好工作準(zhǔn)備。
(2)完成USB2.0協(xié)議規(guī)定的USB設(shè)備端的響應(yīng)動(dòng)作。
(3)處理收到的中斷。
(4)完成數(shù)據(jù)的收發(fā)和處理。
(5)控制與外圍電路的接口,協(xié)同外圍電路工作。
在Keil uVision 2軟件環(huán)境下,修改Cypress公司提供的固件框架中的TD_Init()函數(shù),配置USB2.0芯片進(jìn)入用戶所需要的工作方式;修改TD_Poll()函數(shù),定義USB2.0芯片的數(shù)據(jù)傳輸方式,即可完成固件程序的編寫。下面是核心固件代碼:
//接口配置:
IFCONFIG=0x43;
SYNCDELAY;
FIFOPINPOLAR=0x0C;
SYNCDELAY;
//設(shè)定端點(diǎn)2工作模式:
EP2CFG=0xA2;
SYNCDELAY;
OUTPKTEND=0x82;
SYNCDELAY;
OUTPKTEND=0x82;
SYNCDELAY;
EP2FIFOCFG=0x10;
SYNCDELAY;
//設(shè)定端點(diǎn)6工作模式:
EP6CFG=0xE0;
SYNCDELAY;
EP6FIFOCFG=0x0C;
SYNCDELAY;
EP6AUTOINLENH=0x02;
SYNCDELAY;
EP6AUTOINLENL=0x00;
SYNCDELAY;
驅(qū)動(dòng)程序通過控制PC終端的硬件,完成USB2.0協(xié)議中主機(jī)端動(dòng)作;完成PC終端和USB2.0芯片之間的數(shù)據(jù)收發(fā)和存儲(chǔ)[5]。
驅(qū)動(dòng)程序基于Windows XP系統(tǒng)環(huán)境開發(fā),使用JUNGO公司的 Windriver和Microsoft公司的Visual C++6.0進(jìn)行實(shí)現(xiàn)。具體開發(fā)過程:
(1)通過Windriver獲取USB2.0芯片的硬件連接情況和各個(gè)通信管道的狀態(tài)參數(shù)。
(2)根據(jù)得到的信息,對(duì)Windriver中的參數(shù)進(jìn)行修改,生成驅(qū)動(dòng)程序框架。
(3)使用Visual C++6.0修改驅(qū)動(dòng)程序框架,完成系統(tǒng)中PC終端的驅(qū)動(dòng)程序。
從USB2.0協(xié)議角度,F(xiàn)PGA是USB2.0設(shè)備端:響應(yīng)主機(jī)端命令;從數(shù)據(jù)收發(fā)角度,F(xiàn)PGA是主控器:與USB2.0芯片內(nèi)的FIFO進(jìn)行通信。圖4為FPGA讀寫數(shù)據(jù)時(shí)的狀態(tài)轉(zhuǎn)移圖。
圖4 FPGA讀寫數(shù)據(jù)時(shí)的狀態(tài)轉(zhuǎn)移圖
FPGA完成數(shù)據(jù)收發(fā)的過程可以分為FPGA讀數(shù)據(jù)和FPGA寫數(shù)據(jù)兩個(gè)部分:
(1)FPGA讀數(shù)據(jù)
①?gòu)?fù)位后,進(jìn)入空閑狀態(tài)。
②開始讀信號(hào)有效后,判斷FIFO狀態(tài),如 FIFO空,跳回空閑狀態(tài);FIFO不空,跳入讀數(shù)據(jù)狀態(tài)。
③在讀數(shù)據(jù)狀態(tài)中,F(xiàn)PGA讀數(shù),并將讀數(shù)計(jì)數(shù)器加1。
④讀完1個(gè)數(shù)據(jù)后,判斷讀信號(hào)和FIFO標(biāo)志位,如果讀信號(hào)有效且FIFO不空,跳回讀數(shù)據(jù)狀態(tài);如果讀信號(hào)無效或FIFO空,跳入空閑狀態(tài)。
⑤跳入空閑狀態(tài)后,等待觸發(fā)條件。
圖5是該模塊在Quartus 8.0軟件的SignalTap II Logic Analyzer中獲得的波形。
(2)FPGA寫數(shù)據(jù)
①?gòu)?fù)位后,進(jìn)入空閑狀態(tài)。
圖5 FPGA往PC終端讀3 bit波形
圖6 FPGA往PC終端寫3 bit波形
②開始寫信號(hào)有效后,判斷FIFO狀態(tài),如FIFO滿,跳回空閑狀態(tài);FIFO不滿,跳入寫數(shù)據(jù)狀態(tài)。
③寫完1個(gè)數(shù)據(jù)后,判斷寫信號(hào)和FIFO標(biāo)志位,如果寫信號(hào)有效且FIFO不滿,跳回寫數(shù)據(jù)狀態(tài);如果寫信號(hào)無效或FIFO滿,跳入空閑狀態(tài)。
④跳入空閑狀態(tài)后,等待觸發(fā)條件。
圖6是該模塊在Quartus 8.0軟件的SignalTap II Logic Analyzer中獲得的波形。
在系統(tǒng)實(shí)測(cè)中,圖像傳感器芯片工作在27 MHz時(shí)鐘頻率下,采集84 S/s、640×480分辨率的實(shí)時(shí)圖像數(shù)據(jù),實(shí)時(shí)峰值采集速率接近207 Mb/s;USB2.0通信部分,峰值傳輸速率可達(dá)423 Mb/s,為實(shí)時(shí)圖像采集速度的2倍;FPGA在完成系統(tǒng)功能后,還有不少的邏輯余量。所以,該系統(tǒng)可通過以下方式擴(kuò)展:(1)多路實(shí)時(shí)圖像數(shù)據(jù)采集;(2)提高圖像分辨率或幀頻;(3)利用邏輯余量增加系統(tǒng)功能。
本文提出的實(shí)時(shí)圖像系統(tǒng)具有低成本、低功耗、高吞吐率和擴(kuò)展性強(qiáng)等優(yōu)點(diǎn),能夠很好地適用于多種小型化便攜式設(shè)備應(yīng)用場(chǎng)合。
[1]BI Bo,SUN Shu Ying,WANG Chun Ping.Design of data acquisition equipment based on USB[C].ICEMI’2007,8th,IEEE,2007:866-869.
[2]方加喜,李玉山.USB接口的數(shù)字?jǐn)z像系統(tǒng)設(shè)計(jì)[J].電子技術(shù)應(yīng)用,2002,28(7):50-52.
[3]錢峰.EZ-USB FX2單片機(jī)原理、編程及應(yīng)用[M].北京:北京航空航天大學(xué)出版社,2006.
[4]張?chǎng)?蘇東林,李保權(quán),等.基于 USB的 DSP高速數(shù)據(jù)傳輸系統(tǒng)[J].電子技術(shù)應(yīng)用,2006,32(10):99-101.
[5]胡文靜,陳松.基于EZ-USB芯片CY7C68013的驅(qū)動(dòng)程序設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用研究,2005(9):121-122.