喬 威,崔旭晶,崔秀艷,呂梓豪
(1.沈陽(yáng)理工大學(xué) 自動(dòng)化與電氣工程學(xué)院,沈陽(yáng) 110159;2.河北軟件職業(yè)技術(shù)學(xué)院,河北 保定 071000)
隨著高新科技的迅速發(fā)展,人們對(duì)棲身環(huán)境的安全性、舒適性要求越來(lái)越高,造成家居智能化的需求持續(xù)增長(zhǎng),而門(mén)禁視頻采集與實(shí)時(shí)顯示系統(tǒng)是現(xiàn)代智能家居技術(shù)的一個(gè)熱門(mén)領(lǐng)域,具有較大的研究?jī)r(jià)值和應(yīng)用前景[1]。
對(duì)于處理視頻信息這種控制復(fù)雜、數(shù)據(jù)量大的數(shù)據(jù),傳統(tǒng)單片機(jī)的低效率處理方式,在實(shí)時(shí)處理視頻中的關(guān)鍵信息方面存在較大困難,而FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)技術(shù)具有并行、高速、精確的優(yōu)點(diǎn),在視頻圖像處理中具有較大優(yōu)勢(shì)[2-3]。
作為門(mén)禁系統(tǒng)的“眼睛”,系統(tǒng)應(yīng)具備攝像頭、顯示屏、存儲(chǔ)器等主要外圍器件,本文采用FPGA芯片設(shè)計(jì),高效利用其設(shè)計(jì)方法的多變性和可編程等優(yōu)勢(shì),實(shí)現(xiàn)系統(tǒng)的視頻采集、顯示、硬件加速、圖像處理等關(guān)鍵技術(shù)[4-7]。隨著IP技術(shù)的不斷成熟,FPGA具有靈活性、并行處理加速、現(xiàn)場(chǎng)可編程等優(yōu)勢(shì)。
本設(shè)計(jì)采用ov5640攝像頭,像素500萬(wàn),最高可輸出2592×1944分辨率,15fps的視頻流,可以滿足普通用戶的門(mén)禁系統(tǒng)對(duì)清晰度的要求。存儲(chǔ)器采用SDRAM芯片,內(nèi)存256M,每個(gè)bank為16M,其運(yùn)行速度快,適合于跨時(shí)鐘域的數(shù)據(jù)傳輸。LCD液晶屏選為7寸,采用簡(jiǎn)單方便的VGA控制,實(shí)用性很強(qiáng)。
系統(tǒng)總體框架圖如圖1所示。本設(shè)計(jì)按照電路功能,將FPGA芯片分為三個(gè)主要功能模塊:(1)攝像頭ov5640的驅(qū)動(dòng)模塊(ov5640_top),此模塊用于實(shí)現(xiàn)對(duì)攝像頭的上電控制、寄存器配置以及接收視頻流數(shù)據(jù)等功能。(2)存儲(chǔ)器SDRAM的驅(qū)動(dòng)模塊(sdram_2fifo_top),此模塊用于實(shí)現(xiàn)視頻流數(shù)據(jù)緩存以及跨時(shí)鐘域信號(hào)傳輸功能。(3)LCD液晶屏的驅(qū)動(dòng)模塊(lcd_drive),此模塊先從存儲(chǔ)器SDRAM中讀取數(shù)據(jù),再以VGA格式顯示于液晶屏上,實(shí)現(xiàn)視頻監(jiān)控功能。
圖1 系統(tǒng)總體框架圖
圖1所示三個(gè)主要功能模塊的子模塊及其功能如下。
攝像頭驅(qū)動(dòng)模塊ov5640_top,其工作時(shí)鐘為24MHz,包括三個(gè)子模塊:上電時(shí)序控制子模塊power_ctrl、寄存器配置子模塊ov5640_cfg、視頻流捕獲子模塊ov5640_data。上電時(shí)序控制子模塊通過(guò)計(jì)數(shù)器計(jì)數(shù),完成26ms延時(shí)并產(chǎn)生上電時(shí)序;寄存器配置子模塊通過(guò)下級(jí)子模塊ov5640_iic與攝像頭進(jìn)行雙向通信,完成分辨率、數(shù)據(jù)格式、色溫色差等配置;視頻流捕獲子模塊是數(shù)據(jù)接收模塊,用于將接收的8bitRGB數(shù)據(jù)合并為16bit,并舍棄前10幀圖像。
存儲(chǔ)器驅(qū)動(dòng)模塊sdram_2fifo_top,包括三個(gè)子模塊:通用控制器子模塊sdram_top、異步fifo控制子模塊dcfifo_ctrl、bank乒乓選擇子模塊sdbank_switch。通用控制器子模塊包含對(duì)存儲(chǔ)器的讀、寫(xiě)、自動(dòng)刷新控制;異步fifo控制子模塊通過(guò)調(diào)用IP核來(lái)產(chǎn)生兩個(gè)異步fifo,并控制其完成對(duì)存儲(chǔ)器數(shù)據(jù)的自動(dòng)寫(xiě)入或讀出;bank乒乓選擇子模塊是對(duì)bank進(jìn)行選擇,選中的bank將輸入或讀取一幀圖像。
液晶屏驅(qū)動(dòng)模塊lcd_driver,可以模擬出LCD液晶屏所需的VGA時(shí)序,并與讀fifo聯(lián)合讀取存儲(chǔ)器中的數(shù)據(jù)。此模塊通過(guò)定義分辨率參數(shù)的方式,能夠方便地移植并完成不同分辨率的顯示功能。
為了同步實(shí)現(xiàn)攝像頭的視頻圖像采集到LCD液晶屏顯示,需要將捕獲后的數(shù)據(jù)作為輸入存入SDRAM存儲(chǔ)器中,并通過(guò)LCD液晶屏驅(qū)動(dòng)讀取出來(lái)。本視頻圖像采集系統(tǒng)包含多個(gè)時(shí)鐘域,分別用于不同器件的控制,PLL為鎖相環(huán),時(shí)鐘域分布圖如圖2所示。
圖2 時(shí)鐘域分布圖
在VGA顯示中,理想狀態(tài)下同一時(shí)刻只顯示一個(gè)完整的幀,而不會(huì)出現(xiàn)前后兩幀交錯(cuò)現(xiàn)象,但是在實(shí)際幀存與VGA掃描中,由于輸入視頻流不一定與VGA相匹配,并且在讀寫(xiě)中由于時(shí)序差異很難保證兩者進(jìn)程一致,所以前后幀交錯(cuò)出現(xiàn)的情況100%會(huì)出現(xiàn)。采用乒乓操作可以避免這一情況,首先將4個(gè)bank分兩組,每組兩個(gè)bank,其中一組為bank 0+1,另一組為bank 2+3,在SDRAM上電初期,SDRAM會(huì)被初始化,此時(shí)乒乓為0,從bank 2+3中讀出數(shù)據(jù),bank 0+1中寫(xiě)入數(shù)據(jù),直到一幀數(shù)據(jù)寫(xiě)完并且一幀數(shù)據(jù)讀完,乒乓跳變?yōu)?,這時(shí)數(shù)據(jù)從bank 0+1讀取,從bank 2+3輸入,直到另一幀數(shù)據(jù)讀寫(xiě)完,切換乒乓值,依次反復(fù)。乒乓操作流程圖如圖3所示。
圖3 乒乓操作流程圖
ov5640攝像頭支持SCCB協(xié)議,其內(nèi)部幾百個(gè)寄存器是用SCCB協(xié)議進(jìn)行配置的。SCCB就是常用的IIC通信總線,其時(shí)序和IIC總線一致。數(shù)據(jù)接口中信號(hào)傳遞有串行和并行兩種,IIC控制總線通過(guò)串行方式發(fā)送數(shù)據(jù),數(shù)據(jù)格式以MSB為先,LSB為后的形式發(fā)送,每次發(fā)送8bit數(shù)據(jù),發(fā)送完8位數(shù)據(jù)后,通過(guò)所選器件返回的信號(hào)完成一次數(shù)據(jù)傳輸。ov5640數(shù)據(jù)接收模塊每接收兩個(gè)8bit的像素?cái)?shù)據(jù),便輸出一個(gè)完整的像素點(diǎn)數(shù)據(jù),模塊框圖如圖4所示。
圖4 ov5640數(shù)據(jù)接收模塊框圖
Vsync是場(chǎng)同步信號(hào),當(dāng)檢測(cè)到Vsync上升沿時(shí),可以判斷一幀圖像傳輸完成,如果傳輸圖像累加到10幀,并且即將輸出下一幀時(shí),就可以輸出wfifo_en。ov5640輸出的8bit數(shù)據(jù)再經(jīng)過(guò)兩次移位后,組合成完整像素點(diǎn)數(shù)據(jù),與wfifo_en一起以固定格式輸出,同時(shí)作為SDRAM控制模塊寫(xiě)fifo的輸出,wfifo_en是寫(xiě)fifo的寫(xiě)使能。
SDRAM芯片為H57V2562GTR系列的256M內(nèi)存芯片,適用于需要大內(nèi)存密度和高帶寬的內(nèi)存應(yīng)用設(shè)計(jì)。它由四個(gè)bank組成,每個(gè)bank有8192(行地址數(shù))×512(列地址數(shù))個(gè)內(nèi)存單元,每個(gè)單元可存放16bit數(shù)據(jù)。對(duì)SDRAM內(nèi)存尋址是先指定bank地址,再指定行地址,最后指定列地址,確定尋址單元,并進(jìn)行讀寫(xiě)操作。
SDRAM芯片的行地址寬度13bit,列地址寬度9bit,數(shù)據(jù)寬度16bit,bank寬度2bit。上電初始化時(shí)間需要至少100μs,為了保證穩(wěn)定,定為200μs。自動(dòng)刷新時(shí)間跟行地址有關(guān),定為7.8125μs。圖5是移植完成的SDRAM通用控制器模塊框圖。
圖5 SDRAM通用控制器模塊框圖
LCD顯示屏是英偉達(dá)7寸TFT LCD液晶屏,型號(hào)為A070VW05V2。它由TFT液晶屏和驅(qū)動(dòng)板組成,內(nèi)部嵌入了一塊數(shù)模轉(zhuǎn)換器,可以將數(shù)字信號(hào)轉(zhuǎn)換成模擬信號(hào),同時(shí)集成了VGA接口來(lái)支持更多設(shè)備。
VGA驅(qū)動(dòng)通過(guò)計(jì)數(shù)器產(chǎn)生行、列同步信號(hào),并在規(guī)定時(shí)間內(nèi)將RGB信號(hào)發(fā)送給顯示器,就可以完成顯示功能,其中為了便于移植,設(shè)計(jì)的所有LCD參數(shù)都以宏定義的方式存于lcd_para.v文件中,具體模塊圖如圖6所示。
圖6 LCD驅(qū)動(dòng)模塊圖
3.1.1 ov5640數(shù)據(jù)接收模塊仿真
ov5640功能是接收ov5640攝像頭傳輸?shù)臄?shù)據(jù)并進(jìn)行簡(jiǎn)單處理,通過(guò)研究所接收數(shù)據(jù)的時(shí)序可以判斷出ov5640驅(qū)動(dòng)的正確性。在模擬出ov5640攝像頭的輸出時(shí)序后,就可以對(duì)攝像頭進(jìn)行仿真了[8],如圖7所示。
圖7 數(shù)據(jù)接收仿真圖
從圖7中可以看出,行、場(chǎng)信號(hào)時(shí)序都正確,RGB565數(shù)據(jù)輸出正常,同時(shí)數(shù)據(jù)輸出的clk內(nèi)使能數(shù)據(jù)也有效。
3.1.2 VGA驅(qū)動(dòng)模塊仿真
通過(guò)設(shè)計(jì)一個(gè)LCD數(shù)據(jù)產(chǎn)生模塊,輸出與VGA協(xié)議相同的數(shù)據(jù),作為L(zhǎng)CD屏驅(qū)動(dòng)輸出,通過(guò)判斷輸出時(shí)序是否正確,可以判斷模塊設(shè)計(jì)的正確與否,如圖8所示。
圖8 VGA仿真圖
圖8中的仿真正確生成了LCD的像素時(shí)鐘、行同步信號(hào)、場(chǎng)同步信號(hào)、RGB信號(hào)。在場(chǎng)同步信號(hào)完成之后,行同步信號(hào)隨之而來(lái),在之后的時(shí)間正確輸入RGB信號(hào),完成VGA模塊仿真,驗(yàn)證VGA模塊功能正確。
3.2實(shí)物驗(yàn)證
圖9 ov5640攝像圖片顯示
FPGA芯片型號(hào)為EP4CE6F17C8N。在通過(guò)了VerilogHDL語(yǔ)言編程及模塊設(shè)計(jì)、ModelSim 10.1d仿真后,在Quartus II 13.0中進(jìn)行管腳綁定、邏輯綜合,最后生成.sof目標(biāo)文件并下載到FPGA芯片中,最終在LCD顯示屏上成功顯示圖像[9],下載到開(kāi)發(fā)板驗(yàn)證結(jié)果如圖9所示。
本設(shè)計(jì)應(yīng)用Verilog HDL硬件描述語(yǔ)言、Modelsim仿真軟件、Quartus II綜合開(kāi)發(fā)工具和FPGA芯片,采用自上向下的設(shè)計(jì)方法,完成了智能家居的門(mén)禁攝像采集及實(shí)時(shí)顯示系統(tǒng)設(shè)計(jì)。經(jīng)過(guò)長(zhǎng)時(shí)間調(diào)試,設(shè)計(jì)的各種模塊成功地通過(guò)了功能時(shí)序仿真、邏輯綜合約束和測(cè)試平臺(tái)測(cè)試,能夠正確地執(zhí)行輸入得到相應(yīng)輸出;通過(guò)下載到開(kāi)發(fā)板驗(yàn)證,最終得到實(shí)時(shí)清晰的視頻顯示圖像,達(dá)到了預(yù)期設(shè)計(jì)的目標(biāo)和效果。