張 彤,呂東歡,歐陽寧
(桂林電子科技大學(xué) 信息與通信學(xué)院,廣西 桂林541004)
責(zé)任編輯:魏雨博
立體視覺(Binocular Stereo Vision)是機(jī)器視覺研究的熱點(diǎn)[1],雙目視頻信號(hào)的同步采集及實(shí)時(shí)顯示是整個(gè)研究的前提和基礎(chǔ),但現(xiàn)階段大部分多路視頻采集卡都是基于分時(shí)復(fù)用或多路切換,不能真正實(shí)現(xiàn)雙目視頻的同步采集及實(shí)時(shí)顯示[2-3]。針對(duì)這一現(xiàn)狀,本文將SOPC(System on Programmable Chip,片上可編程系統(tǒng))技術(shù)與FPGA(Field Programmable Gate Array,現(xiàn)場(chǎng)可編程門陣列)相結(jié)合,提出了一種以Nios II處理器為核心的軟硬件協(xié)同設(shè)計(jì)的雙目同步視頻采集及實(shí)時(shí)顯示系統(tǒng),由DMA(Direct Memory Access,直接內(nèi)存存取)控制器和Avalon-MM(Avalon Memory Map,Avalon存儲(chǔ)器映射接口)模塊組成的DTFC(Data Transfer Fast Channel,數(shù)據(jù)快速傳輸通道)完成視頻數(shù)據(jù)采集和輸出,破除處理器與外設(shè)在數(shù)據(jù)交換上的瓶頸,實(shí)現(xiàn)了真正的雙目視頻同步采集與實(shí)時(shí)顯示。
圖1 系統(tǒng)結(jié)構(gòu)框圖
系統(tǒng)結(jié)構(gòu)框圖如圖1所示。
系統(tǒng)包括視頻采集、視頻輸出、視頻存儲(chǔ)及核心控制模塊。其中Video Capture Control_1和Video Capture Control_2為視頻采集模塊,按照CMOS傳感器(CMOS_1,CMOS_2)的時(shí)序產(chǎn)生控制信號(hào),采集視頻圖像數(shù)據(jù),CMOS傳感器采用2片OmniVision公司的OV7670 CAMERACHIP,通過串行成像控制總線(SCCB)配置傳感器內(nèi)寄存器,使其以30幀/秒(f/s)的速度平穩(wěn)輸出VGA(640×480)畫質(zhì)的視頻流;Video Transfer Control為視頻輸出模塊,通過狀態(tài)機(jī)判斷Slave FIFO的空滿狀態(tài),將數(shù)據(jù)輸出至USB2.0控制芯片CY7C68013A,CY7C68013A是一款Cypress公司生產(chǎn)的高性能USB接口微控制芯片,最高傳輸速率可達(dá)480 Mbit/s,Cypress公司還提供了完善的軟件開發(fā)包,從而降低了上位機(jī)軟件的開發(fā)難度,加快了開發(fā)進(jìn)度。
視頻存儲(chǔ)及核心控制模塊的核心是1片Altera公司的Cyclone IV系列FPGA(EP4CE15F17C8N),其具有15 408個(gè)LEs,同時(shí)具有516 096 bit的RAM,在保持低成本和低功耗的同時(shí),大幅提升了在圖像采集與處理方面的能力;為了降低系統(tǒng)復(fù)雜度,提高系統(tǒng)最高運(yùn)行頻率(fmax),應(yīng)用Altera公司最新發(fā)布的流水橋架構(gòu)(pipeline),將低速外設(shè)通過流水橋與高速處理器相連,使系統(tǒng)的工作時(shí)鐘達(dá)到100 MHz以上;針對(duì)系統(tǒng)運(yùn)行頻率高和視頻信號(hào)數(shù)據(jù)量大的特點(diǎn),視頻存儲(chǔ)模塊(SDRAM_1,SDRAM_2)配置了2片SAMSUNG公司型號(hào)為K4S561632H的256 Mbit同步動(dòng)態(tài)隨機(jī)存取內(nèi)存器(Synchronous Dynamic Random Access Memory,SDRAM)作為SOPC系統(tǒng)的運(yùn)行空間和圖像緩存空間(Framer Buffer),實(shí)現(xiàn)數(shù)據(jù)的乒乓傳輸,實(shí)驗(yàn)證明,系統(tǒng)可以穩(wěn)定運(yùn)行在120 MHz;串行配置芯片EPCS16作為FPGA硬件系統(tǒng)和NiosII軟件程序的存儲(chǔ)空間,保證系統(tǒng)上電后即可運(yùn)行。上述控制器均由Nios II軟核自帶的通用控制器實(shí)現(xiàn),極大地簡化系統(tǒng)的設(shè)計(jì),同時(shí)提高了系統(tǒng)的通用性和可移植性。
上位機(jī)在EX-USB FX2開發(fā)套件的基礎(chǔ)上結(jié)合OpenCV開發(fā)了視頻實(shí)時(shí)顯示軟件。視頻采集與視頻傳輸模塊均已Avalon-MM模塊的形式集成在SOPC系統(tǒng)中,并與DMA控制器組成了數(shù)據(jù)快速傳輸通道,解決了雙目視頻系統(tǒng)在同步性與實(shí)時(shí)性上的難題。
視頻采集模塊包括OV7670初始化控制器與Avalon流模式視頻采集控制器,如圖2所示,采集過程由Nios II處理器控制,處理器首先發(fā)出OV7670處理器初始化信號(hào),對(duì)2片OV7670圖像傳感器進(jìn)行初始化,在收到初始化成功信號(hào)后啟動(dòng)Avalon流模式視頻采集控制器和對(duì)應(yīng)的DMA控制器,將雙路視頻信號(hào)采集至指定的Framer Buffer,將FPGA的并行性與Nios II處理器的可編程性相結(jié)合,充分發(fā)揮了軟硬件各自特點(diǎn)。
圖2 視頻采集模塊
OV7670初始化控制器應(yīng)用Verilog HDL硬件描述語言根據(jù)SCCB總線時(shí)序編寫可綜合的寄存器傳輸級(jí)(RTL)程序?qū)V7670攝像頭進(jìn)行初始化配置,所要配置的主要寄存器如表1所示[4]。
表1 OV7670關(guān)鍵寄存器配置參數(shù)
每路攝像頭對(duì)應(yīng)1個(gè)Avalon流模式視頻采集控制器[5],Avalon流模式視頻采集控制器主要包括信號(hào)同步與視頻采集時(shí)序發(fā)生器兩部分。由于攝像頭的工作時(shí)鐘(24 MHz)與Nios II系統(tǒng)的工作時(shí)鐘(120 MHz)處在不同時(shí)鐘域,為保證雙路視頻數(shù)據(jù)同步性,對(duì)單比特控制信號(hào),如場(chǎng)(VSYNC)、行(HREF)、像素(PCLK)信號(hào)經(jīng)過兩級(jí)觸發(fā)器串聯(lián)同步器后方能使用。對(duì)多比特?cái)?shù)據(jù)信號(hào),如OV7670輸入數(shù)據(jù)需要經(jīng)過帶格雷碼地址發(fā)生器的異步FIFO后方能使用。經(jīng)過上述處理后可以將系統(tǒng)的平均無故障時(shí)間(Mean Time Between Failures,MTBF)控制在可接受范圍內(nèi),保證系統(tǒng)可靠性與同步性。
視頻采集時(shí)序發(fā)生器主要完成RGB565格式的像素拼接和將視頻數(shù)據(jù)流封裝成幀的工作,OV7670數(shù)據(jù)輸出時(shí)序如圖3所示。OV7670的數(shù)據(jù)總線寬度為8 bit,1個(gè)RGB565格式像素(pixel)需要將2個(gè)時(shí)鐘周期(cycle)的數(shù)據(jù)拼接在一起。2個(gè)視頻采集時(shí)序發(fā)生器在收到處理器發(fā)來啟動(dòng)信號(hào)后,同時(shí)開始采集幀同步信號(hào)(VSYNT),在捕獲該信號(hào)的下降沿后將兩路視頻數(shù)據(jù)以像素為單位(16 bit)按Avalon從模式端口時(shí)序送上Avalon總線,Avalon總線以系統(tǒng)時(shí)鐘為工作時(shí)鐘,將視頻數(shù)據(jù)通過各自的DMA(DMA1,DMA2)控制器讀至對(duì)應(yīng)的Framer Buffer(Framer Buffer1/Framer Buffer3,F(xiàn)ramer Buffer2/Framer Buffer4)。系統(tǒng)時(shí)鐘為120 MHz,也就是說,流模式傳輸?shù)淖畲髱挒?40 Mbit/s,相較于PIO(Peripheral I/0)端口傳輸極大地提高了系統(tǒng)的吞吐量,可以滿足VGA(640×480)畫質(zhì),30 f/s視頻實(shí)時(shí)采集的要求。像素拼接減少了Avalon總線對(duì)FIFO的讀寫次數(shù),降低了后續(xù)數(shù)據(jù)處理復(fù)雜度,DMA控制器的引入即保證采集的同步性又破除了系統(tǒng)在數(shù)據(jù)傳輸上的瓶頸。
圖3 OV7670數(shù)據(jù)輸出時(shí)序
視頻存儲(chǔ)模塊主要是以2片SDRAM為核心,配合與之對(duì)應(yīng)的DMA控制器,實(shí)現(xiàn)數(shù)據(jù)的乒乓傳輸。SDRAM作為單口器件只能進(jìn)行串行傳輸,無法同時(shí)對(duì)數(shù)據(jù)進(jìn)行采集和輸出,如果使用傳統(tǒng)的乒乓傳輸設(shè)計(jì)方法,雙目視頻傳輸需要4片SDRAM,PCB布線難度極大。本設(shè)計(jì)應(yīng)用SOPC在控制性上的優(yōu)勢(shì),操作2組DMA控制器(DMA_1,DMA_2)配合2片SDRAM實(shí)現(xiàn)了雙目視頻數(shù)據(jù)的乒乓傳輸,數(shù)據(jù)流向如圖4所示。
圖4 視頻數(shù)據(jù)流向圖
Nios II處理器啟動(dòng)與雙路視頻采集模塊對(duì)應(yīng)的DMA_1和DMA_2控制器,將數(shù)據(jù)從異步FIFO讀至SDRAM_1中緩存Framer Buffer,SDRAM_1可緩存1幀2路視頻數(shù)據(jù)。同時(shí),視頻輸出模塊對(duì)應(yīng)的DMA控制器將數(shù)據(jù)從SDRAM_2中讀出并寫入U(xiǎn)SB緩存中,通過USB芯片將視頻數(shù)據(jù)發(fā)送到USB總線中。采集與輸出同時(shí)進(jìn)行,每采集完1幀數(shù)據(jù)之后,互換DMA的目標(biāo)SDRAM,形成1次乒乓傳輸,這樣將采集數(shù)據(jù)和傳輸數(shù)據(jù)同時(shí)進(jìn)行,避免了串行傳輸?shù)臅r(shí)間浪費(fèi),提高了系統(tǒng)響應(yīng)速度的同時(shí)大幅降低了系統(tǒng)的硬件復(fù)雜度。
視頻輸出模塊包括異步FIFO緩存器與Avalon流模式視頻輸出控制器[6],如圖5所示。由于系統(tǒng)時(shí)鐘(120 MHz)高于USB芯片(CY7C68013A)時(shí)鐘(48 MHz),所以加入異步FIFO緩存器暫存數(shù)據(jù)。根據(jù)視頻信號(hào)數(shù)據(jù)流傳輸特點(diǎn),權(quán)衡FPGA內(nèi)資源與數(shù)據(jù)傳輸速度后,采用寬度為16 byte,深度為4 096 byte的異步FIFO作為緩存,并在控制模塊中引入反壓機(jī)制(Back Push),將異步FIFO的almost_full信號(hào)作為反壓信號(hào)發(fā)送至DMA控制器,DMA控制器根據(jù)該信號(hào)終止或繼續(xù)數(shù)據(jù)傳輸。
圖5 視頻輸出模塊
為了達(dá)到最高傳輸速率,將CY7C68013A設(shè)置為Slave FIFO從機(jī)模式。Avalon流模式視頻輸出控制器作為外部主控制器產(chǎn)生寫FX2內(nèi)部FIFO時(shí)序、握手信號(hào)和輸出使能信號(hào),其核心為一個(gè)有限狀態(tài)機(jī)(Finite State Machine,F(xiàn)SM),如圖6所示。
圖6 視頻輸出狀態(tài)機(jī)
狀態(tài)轉(zhuǎn)移過程如下:
Idle_State:視頻輸出模塊收到Nios II處理器發(fā)來的輸出啟動(dòng)信號(hào),跳轉(zhuǎn)至Initial_State,否則停留在Idle_State。
Initial_State:指向IN FIFO,激活FIFOADR[1∶0],跳轉(zhuǎn)至Flag_State。
Flag_State:如果FIFO滿標(biāo)志位為0(FIFO不滿),則跳轉(zhuǎn)至Transf_State;否則停留在Flag_State。
Transf_State:激活SLWR,將數(shù)據(jù)送上總線,跳轉(zhuǎn)至End_State。
End_State:檢測(cè)是否將1幀視頻數(shù)據(jù)傳輸完成,若完成則跳轉(zhuǎn)至Idle_State,否則跳轉(zhuǎn)至Flag_State。
視頻輸出模塊在Nios II處理器發(fā)出啟動(dòng)信號(hào),完成1幀2路視頻信號(hào)輸出后進(jìn)入等待狀態(tài),整個(gè)過程自動(dòng)完成,將處理器從繁重的輸出傳輸中解放出來專注于系統(tǒng)控制,經(jīng)實(shí)際測(cè)試,系統(tǒng)的輸出速率可以達(dá)到40 MHz/s以上,可以滿足上位機(jī)實(shí)時(shí)顯示的要求。
Nios II軟件主要用于系統(tǒng)工作流程控制[7],合理配置DMA控制器,并配合視頻采集模塊和視頻輸出模塊實(shí)現(xiàn)數(shù)據(jù)的高速傳輸,具體流程圖7所示。
圖7 SOPC軟件流程圖
DMA控制器的初始化是整個(gè)系統(tǒng)的關(guān)鍵,通過直接調(diào)用HAL層宏的方式提高軟件的執(zhí)行效率,初始化過程如圖8所示,首先定義3個(gè)指向DMA控制器結(jié)構(gòu)體的指針分別對(duì)應(yīng)2路視頻通道和1路USB輸出通道,然后配置傳輸長度寄存器為1幀視頻數(shù)據(jù)的數(shù)據(jù)量(640×480×2 byte),最后將2路視頻通道的源地址指向?qū)?yīng)Avalon流模式視頻采集控制器的首地址(Avalon_OV7670_DMA_IP_0_BASE,Avalon_OV7670_DMA_IP_1_BASE),目的地址指向Framer Buffer的相應(yīng)空間,USB輸出通道的源地址指向Framer_Buffer的起始地址,目的地址指向Avalon流模式視頻輸出控制器的首地址(Avalon_USB_DMA_IP_0_BASE)。使用gcc編譯的attribute技術(shù)將Framer Buffer_1和Framer Buffer_3聲明為SDRAM_1上的2個(gè)數(shù)組空間,相對(duì)應(yīng)的將Framer Buffer_2和Framer Buffer_4聲明為SDRAM_2上的2個(gè)數(shù)組空間,后續(xù)每傳輸完1幀數(shù)據(jù)將視頻采集模塊與視頻輸出模塊DMA控制器的目的地址互換就可以實(shí)現(xiàn)數(shù)據(jù)的乒乓傳輸,充分發(fā)揮了SOPC系統(tǒng)在可編程性上的優(yōu)勢(shì)。
圖8 DMA控制器初始化流程圖
系統(tǒng)實(shí)現(xiàn)了雙路視頻信號(hào)同步采集并在上位機(jī)實(shí)時(shí)顯示,圖像傳感器OV7670工作時(shí)鐘為24 MHz,采集速度達(dá)到30 f/s,設(shè)置圖像數(shù)據(jù)輸出尺寸為VGA模式(640×480),輸出格式為RGB565。經(jīng)測(cè)試視頻顯示清晰流暢,兩路信號(hào)高度同步,如圖9所示,相同顏色條格處在圖像的相同位置,圖10為系統(tǒng)對(duì)同一棋盤格試驗(yàn)板的采集結(jié)果。
本文介紹了一種以Nios II處理器為核心軟硬件協(xié)同設(shè)計(jì)的雙目同步視頻采集及顯示SOPC系統(tǒng)的設(shè)計(jì)實(shí)例。詳細(xì)描述了各功能模塊的設(shè)計(jì)方法,給出了雙路視頻同步采集、大數(shù)據(jù)快速傳輸及信號(hào)跨異步時(shí)鐘域等視頻采集和FPGA應(yīng)用方面熱點(diǎn)與難點(diǎn)問題的處理方法。利用視頻采集控制器、視頻輸出控制器及DMA控制器組成的數(shù)據(jù)傳輸快速通道,以2片SDRAM實(shí)現(xiàn)了雙目視頻數(shù)據(jù)的乒乓傳輸(普通方式需4片SDRAM),極大地降低了系統(tǒng)的硬件復(fù)雜度。通過仿真驗(yàn)證和實(shí)際測(cè)試,該系統(tǒng)在同步性、實(shí)時(shí)性及穩(wěn)定性上達(dá)到預(yù)期效果。后續(xù)利用SOPC技術(shù)在通用性和可編程性上的優(yōu)勢(shì),可以進(jìn)一步提高系統(tǒng)的清晰度和幀率,或添加圖像處理協(xié)處理器實(shí)現(xiàn)圖像標(biāo)定和圖像融合等高級(jí)算法。
[1]LIN Lili,ZHOU Wenhui.Binocular stereo vision synchronous acquisition technique based on FPGA[C]//Proc.2010 2nd International Workshop on Database Technology and Applications.Wuhan,China:IEEE Press,2011:22-28.
[2]劉攀,王紅亮,孟令軍.基于FPGA的數(shù)字圖像采集存儲(chǔ)系統(tǒng)的設(shè)計(jì)[J].電視技術(shù),2010,34(6):32-34.
[3]呂蘇誼,許江淳,李玉惠.基于SOPC的雙攝像頭視頻采集系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)科學(xué),2010,37(7A):171-210.
[4]李德明,韓劍,江國強(qiáng).基于OV7670的圖像采集及顯示系統(tǒng)設(shè)計(jì)[J].儀器儀表學(xué)報(bào),2010(8):30-33.
[5]Altera Corporation.Avalon interface specifications[EB/OL].[2013-02-01].http://wenku.baidu.com/view/2be0303f0912a21614792980.html.
[6]吳磊,郭超平,申世濤.基于CY7C68013與FPGA的便攜式數(shù)據(jù)采集系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2012,32(S1):164-166.
[7]張顯才,李向東,丁國寧,等.Nios II系統(tǒng)中DMA控制器的原理及應(yīng)用[J].現(xiàn)代電子技術(shù),2012,35(6):19-21.