李營,呂兆承
(淮南師范學(xué)院電子工程學(xué)院, 安徽 淮南 232038)
圖像監(jiān)控系統(tǒng)在日常生活中的作用越來越大,傳統(tǒng)的圖像控制系統(tǒng)常采用單片機(jī)實(shí)現(xiàn),功能難以拓展,越來越難以適應(yīng)市場對識(shí)別系統(tǒng)遠(yuǎn)程拓展的要求.FPGA芯片具備高速并行計(jì)算、可編程,易拓展等優(yōu)點(diǎn),若采用其實(shí)現(xiàn)圖像采集顯示平臺(tái)功能易拓展[1-2].鑒于此本文根據(jù)攝像頭圖像捕獲原理和SDRAM兵乓存儲(chǔ)原理,利用層次化建模思想選擇 FPGA芯片,Verilog HDL最終實(shí)現(xiàn)基于FPGA的圖像采集與實(shí)時(shí)顯示系統(tǒng).
1.1 OV7725攝像頭簡介作為一種CMOS圖像傳感器,OV7725 攝像頭工作原理是利用圖像的感光陣列將光信號轉(zhuǎn)換為電信號[3],并將數(shù)據(jù)分為2個(gè)通道經(jīng)AD轉(zhuǎn)換為數(shù)字信號,通過DSP處理器,F(xiàn)IFO緩存等電路送達(dá)數(shù)據(jù)輸出端口.攝像頭OV7725內(nèi)部具有標(biāo)準(zhǔn)的 SCCB 配置接口,實(shí)現(xiàn)常見攝像功能,且系統(tǒng)設(shè)計(jì)時(shí)將攝像頭輸出的圖像格式設(shè)置為RGB565.
1.2 SCCB總線通信協(xié)議串行攝像頭控制總線(SCCB)即三線式串行總線,該總線具有控制OV系列攝像頭圖像數(shù)據(jù)格式設(shè)置、分辨率設(shè)置以及圖像處理參數(shù)設(shè)置等功能,即攝像頭內(nèi)部上百個(gè)寄存器需要通過SCCB 協(xié)議進(jìn)行配置從而完成其相關(guān)功能[4].SCCB 時(shí)序與 I2C 時(shí)序類似.因此文中使用I2C完成OV7725寄存器配置.
I2C是一種多用于在數(shù)據(jù)量小且傳輸距離短情形下的主從通信[3].作為具有數(shù)據(jù)線SDA和時(shí)鐘線SCL的兩線式串行總線,I2C總線具備發(fā)送數(shù)據(jù)和接收數(shù)據(jù)功能.總線時(shí)序分為寫時(shí)序和讀時(shí)序.
寫時(shí)序:啟動(dòng)總線→設(shè)備ID設(shè)置→應(yīng)答位→寫地址寄存器→寫操作應(yīng)答信號→寫寄存器數(shù)據(jù)→寫操作應(yīng)答信號→關(guān)閉總線.
讀時(shí)序:啟動(dòng)總線→設(shè)備ID設(shè)置→應(yīng)答位→寫地址寄存器→寫操作應(yīng)答信號→啟動(dòng)總線→寫操作應(yīng)答信號→讀數(shù)據(jù)寄存器→關(guān)閉總線.
本系統(tǒng)由FPGA芯片、時(shí)鐘電路、系統(tǒng)電源、接口電路,攝像頭OV7725,SDRAM和VGA接口的顯示器構(gòu)成[4],系統(tǒng)功能框圖如圖1所示.從圖可知,該系統(tǒng)底層可劃分為:PLL時(shí)鐘等7個(gè)模塊.
圖1 系統(tǒng)設(shè)計(jì)思路和功能框圖
2.1 PLL分頻模塊該模塊的輸入時(shí)鐘clk為50 MHz,復(fù)位信號rst_n,模塊輸出的時(shí)鐘依次為c0(100 MHz), c1(100 MHz,75度相位),c2(clk_25 MHz),以備其他模塊調(diào)用.
2.2 OV7725_i2c寄存器配置模塊本模塊的功能是通過配置OV7725的70個(gè)用戶寄存器以完成分辨率、數(shù)據(jù)格式、色溫色差等配置.該模塊負(fù)責(zé)和i2c_driver模塊交互,將需要配置的數(shù)據(jù)傳遞給i2c_drive,由i2c_drive模塊完成攝像頭的驅(qū)動(dòng).本模塊的接口框圖如圖2,攝像頭常見寄存器配置地址與數(shù)據(jù)如表1所示[6].
圖2 i2c寄存器配置模塊框圖
表1 OV7725攝像頭常見寄存器配置信息(部分)
圖2中各端口含義說明如下:
1)clk:連接I2C驅(qū)動(dòng)模塊的輸出時(shí)鐘dri_clk.
2)rst_n:該信號為系統(tǒng)復(fù)位信號和PLL分頻時(shí)鐘相與.
3)i2c_done信號:該信號與i2c_driver模塊驅(qū)動(dòng)輸出i2c_done連接.由于OV7725需要有70個(gè)寄存器進(jìn)行配置,故需將地址和數(shù)據(jù)發(fā)送到i2c_driver模塊,每當(dāng)i2c_driver模塊配置完成一個(gè)寄存器后,會(huì)傳遞一個(gè)i2c_done信號至圖像采集模塊,告訴其i2c_driver模塊配置完成一個(gè)寄存器.
4)i2c_data:I2C要配置的地址與數(shù)據(jù)(高8位地址,低8位數(shù)據(jù)).
5)i2c_exec: I2C觸發(fā)執(zhí)行標(biāo)志信號.
6)init_done:當(dāng)本模塊70個(gè)寄存器配置完成后,init_done拉高,初始化完成信號.
2.3 i2c驅(qū)動(dòng)模塊該模塊的功能是供其他需使用i2c協(xié)議的模塊例化,即I2C_dri模塊的絕大部分端口連接到OV7725_i2c寄存器配置模塊,從而最終完成攝像頭采集模塊的寄存器配置,該模塊的接口框圖如圖3所示,部分端口的含義與2.2節(jié)端口含義一致,其余端口的含義是:
圖3 i2c驅(qū)動(dòng)模塊框圖
1)bit_ctrl:固定連接1,代表器件地址分兩次寫.
2)i2c_addr[15∶0]: I2C器件內(nèi)地址,即寫入EPROM的讀寫字地址.
3)i2c_data_w [7∶0]:I2C要寫的數(shù)據(jù).
4)i2c_exec:I2C觸發(fā)執(zhí)行標(biāo)志信號.
5)i2c_rh_wl:I2C讀寫控制信號,讀操作時(shí)值為1.
6)i2c_done:I2C每次讀寫完成會(huì)輸出該信號,用來通知外部模塊當(dāng)前的I2C操作完成.
7)dri_clk:驅(qū)動(dòng)I2C操作的驅(qū)動(dòng)時(shí)鐘.
該模塊的狀態(tài)遷移圖如圖4所示,圖中,各狀態(tài)的含義詳見參考文獻(xiàn)[5],此處不再詳述,圖4與1.2小節(jié)所示I2C讀寫時(shí)序一致.
圖4 i2c驅(qū)動(dòng)模塊狀態(tài)遷移圖
2.4 圖像采集模塊該模塊的功能是將攝像頭接收到的RGB圖像數(shù)據(jù)值格式進(jìn)行轉(zhuǎn)化,即將8 bit轉(zhuǎn)為16 bit的,并舍棄前10 幀圖像,同時(shí)給出有效信號,最終送達(dá)sdram頂層模塊,該模塊的接口框圖如圖5所示.圖5中各端口說明如下:
圖5 圖像采集模塊接口框圖
1) cam_data [7∶0]:系統(tǒng)輸入攝像頭數(shù)據(jù).
2) rst_n:復(fù)位信號,其功能是寄存器配置模塊70個(gè)寄存器配置完成后再開始采集數(shù)據(jù)工作[6]cam_pclk:攝像頭數(shù)據(jù)像素時(shí)鐘.
3) cam_vsync: 攝像頭場同步信號.
4) cam_href:cmos行同步信號.
5) cmos_frame_valid:數(shù)據(jù)使能有效信號, cmos_frame_data [15∶0]:16bit圖像有效數(shù)據(jù)[6].
2.5 SDRAM存儲(chǔ)器頂層模塊本模塊的功能是解決圖像采集模塊的圖像輸出數(shù)據(jù)與VGA驅(qū)動(dòng)模塊接收數(shù)據(jù)的速度不匹配問題,并完成數(shù)據(jù)的讀寫和跨時(shí)鐘問題.具體實(shí)施時(shí) FIFO 模塊和乒乓操作被用來完成讀寫,從而保障實(shí)時(shí)快速顯示圖像[7].
本設(shè)計(jì)存儲(chǔ)選用的 SDRAM共128 M存儲(chǔ)空間,設(shè)計(jì)時(shí)將其劃分為4個(gè)L-Bank, 其中兩兩一組,將BANK0和BANK1作為第一個(gè)存儲(chǔ)空間,起始地址是00.BANK2和BANK3作為第2個(gè)存儲(chǔ)空間,起始地址是10,兩個(gè)存儲(chǔ)空間的的不同是BANK地址的最高位,兵乓存儲(chǔ)讀過程為:每次讀當(dāng)前存儲(chǔ)空間到最大地址,都跳轉(zhuǎn)到另一個(gè)存儲(chǔ)空間BANK的起始地址.兵乓存儲(chǔ)寫過程為:每次寫到最大地址,都跳轉(zhuǎn)到另一個(gè)存儲(chǔ)空間BANK的起始地址.
SDRAM 存儲(chǔ)器頂層模塊包含F(xiàn)IFO控制模塊和SDRAM控制器模塊,其工作過程是首先對SDRAM上電初始化,然后對SDRAM進(jìn)行讀、寫以及刷新操作,下面對其內(nèi)部各個(gè)模塊進(jìn)行介紹.
2.5.1 FIFO控制模塊 FIFO控制模塊內(nèi)含寫入數(shù)據(jù)的wrfifo模塊和讀取數(shù)據(jù)的rdfifo兩個(gè)模塊.其存儲(chǔ)和讀取過程利用乒乓操作原理實(shí)現(xiàn)[8].
2.5.2 SDRAM控制器模塊 該模塊包括數(shù)據(jù)讀寫傳輸模塊、命令控制模塊、狀態(tài)控制模塊[9],其構(gòu)成如圖6所示.
圖6 SDRAM控制器模塊構(gòu)成框圖
數(shù)據(jù)讀寫傳輸模塊主要完成SDRAM 的數(shù)據(jù)傳輸.命令控制模塊的功能是實(shí)現(xiàn)SDRAM的讀寫操作以及 SDRAM的動(dòng)態(tài)刷新,保證SDRAM控制器的正常操作[10].SDRAM控制模塊通過刷新計(jì)數(shù)器和初始化狀態(tài)機(jī)完成狀態(tài)控制[11-13],初始化過程如圖7所示.
圖7 SDRAM上電初始化過程
2.6 VGA時(shí)序控制模塊VGA時(shí)序控制模塊的設(shè)計(jì)思路是把圖像的數(shù)據(jù)按照正確的行場時(shí)序進(jìn)行傳輸.具體的設(shè)計(jì)方法為:先按照分辨率的要求,用計(jì)數(shù)器形成行場同步時(shí)序,再判斷計(jì)數(shù)器是否計(jì)數(shù)到顯示區(qū),然后從SDRAM里面讀取數(shù)據(jù)送到VGA顯示器上顯示.文中采用的640*480@60HZ通信時(shí)序,其原理在文獻(xiàn)[2]中已詳述,此處不再敘述,對應(yīng)的行周期為31.75 ns,場周期為16.6 ms.
3.1 系統(tǒng)開發(fā)工具仿真軟件采用QuartusⅡ13.1,硬件描述語言采用Verilog HDL,F(xiàn)PGA芯片采用 EP4CE10F178.
3.2 系統(tǒng)軟件仿真系統(tǒng)設(shè)計(jì)完成后生成的RTL圖如圖8所示,由圖可知各個(gè)功能模塊與圖1系統(tǒng)設(shè)計(jì)思路和功能框圖一致[4],說明系統(tǒng)設(shè)計(jì)思路正確.
圖8 系統(tǒng)RTL圖
3.3 系統(tǒng)時(shí)序信號仿真系統(tǒng)設(shè)計(jì)完成后編寫測試文件對各個(gè)模塊依次進(jìn)行時(shí)序仿真,其中OV7725_i2c寄存器配置模塊仿真結(jié)果如圖9所示.圖中各端口含義與2.2小結(jié)中表1一致,說明該模塊功能正確,其他模塊也可逐一驗(yàn)證,由于篇幅所限此處不在列出.
圖9 OV7725_i2c寄存器配置模塊仿真圖(截圖)
3.4 系統(tǒng)硬件顯示FPGA作為處理器讀取攝像頭采集到的圖像,并存儲(chǔ)與SDRAM存儲(chǔ)器內(nèi),通過 VGA接口實(shí)時(shí)顯示.
本文中利用FPGA芯片,OV7725攝像頭,SDRAM存儲(chǔ)器,設(shè)計(jì)出基于FPGA的圖像采集與實(shí)時(shí)顯示系統(tǒng)設(shè)計(jì).該系統(tǒng)通過Cyclone IV系列的EP4CE10F178器件進(jìn)行硬件驗(yàn)證.最終得到實(shí)時(shí)清晰的圖像,達(dá)到了預(yù)期設(shè)計(jì)的目標(biāo)和效果.文章提出的圖像采集系統(tǒng)是對FPGA開發(fā)智能車牌識(shí)別系統(tǒng)的前期有效嘗試,且系統(tǒng)后期可利用藍(lán)牙等設(shè)施進(jìn)行擴(kuò)展,并對車牌進(jìn)行定位和識(shí)別,該系統(tǒng)有一定的應(yīng)用前景.