楊會建,楊陽,張環,朱瑩
(長春理工大學 電子信息工程學院,長春 130022)
視頻圖像采集傳感器主要有CCD傳感器和CMOS傳感器兩種。CMOS傳感器是利用CMOS工藝制造的圖像傳感器,主要利用了半導體效應。它可以輕易地將周邊電路(如AGC、CDS、Timing generator、或DSP等)集成到傳感器芯片中[1]。因此與CCD傳感器相比,CMOS傳感器具有成本低、低功耗及高整合度等特點[2]。近年來,CMOS傳感器得到了越來越廣泛地應用,視頻監控系統就是其中一個領域。本設計正是針對這一領域,利用FPGA的強大并行處理能力,將CMOS傳感器采集信息進行并行處理后實時顯示。
采用FPGA的EP2C8Q208C8作為主控芯片,CMOS傳感器采用具有內嵌放大器、A/D轉換、顏色空間轉換、白/黑像素校正等單元的由OmniVision所研制的OV7670圖像傳感器。每次上電復位后首先通過主控芯片根據SCCB通信協議對OV7670相關寄存器進行配置,使其工作在RGB或YUV、自動白平衡等狀態。在初始化CMOS傳感器之后,為確保數據的準確性,前10幀數據丟棄,然后開始進行圖像采集。

圖1 OV7670硬件原理圖
OV7670的硬件連接圖如圖1所示。采用3.3V電壓供電,CMOS_XCLK為系統輸入時鐘,由FPGA分頻后的25M時鐘提供,CMOS_PCLK為輸出像素時鐘,用來為數據采集提供時鐘。CMOS_SCLK和CMOS_SDAT為SCCB通信時所需的時鐘信號和數據信號,其中時鐘信號為單向輸入,數據信號為雙向傳輸,初始化OV7670只需通過這兩個信號線即可。CMOS_D[7..0]為8位數據信號,用來采集視頻信息。CMOS_HREF和CMOS_VSYNC是視頻采集時的行幀同步信號,配合像素時鐘使用。值得注意的是,對于SCCB通信信號CMOS_SCLK和CMOS_SDAT必須外接上拉4.7K電阻,才能輸出高電平。因為SCCB內部采用了Open Drain結構,如果不接上拉電阻只能輸出低電平。
1.2.1 通信協議
SCCB(OmniVision serial camera control bus),是歐姆尼圖像技術公司開發的串行攝像頭控制總線[3],廣泛應用于OV系列圖像傳感器上。SCCB是一種三線總線,由SCCB_E、SIO_C和SIO_D組成。SCCB_E是控制芯片工作的信號,當進行通信時,必須置1,SIO_C是時鐘信號,SIO_D是雙向數據信號,一個主控制器可以控制至少一個以上從設備。當SCCB_E無效時,變為兩線控制總線,兼容I2C總線接口。本文采用兩線SCCB接口如圖2所示[4],只有SIO_C(時鐘信號線)和SIO_D(數據信號線)兩條[5]。FPGA作為主控制器,用來對OV7670(從控制器)的寄存器地址0x00-0xC9進行相關配置,使其工作在不同的模式下,如RGB(565)或YUV、鏡像方式、自動白平衡等。

圖2 兩線控制模塊
SCCB的寫操作通信協議如圖3所示。ID Address是CMOS的器件地址,OV7670為0x42;Sub-address為寄存器地址;Write data是具體的寫入數據,X表示無關位。對于讀操作通信協議,第一、二相和寫操作一樣,第三相的地址為0x43,第四相為寫入數據,最后一位NA必須置1。
通信過程如下:首先發送器件ID地址,然后發送寄存器地址,對于寫通信格式,通過FPGA往CMOS寄存器里寫數據。對于讀通信格式,需要再次發送CMOS器件地址,但需注意此時最低位應為1,最后再將寄存器里數值讀出。THD:STA為在將時鐘拉低之前必須提前將數據位拉低的最小開始條件保持時間,至少為0.6μs。

圖3 SCCB寫通信數據格式
系統在檢測到SIO_C和SIO_D都為邏輯低后就進行數據通信。在通信過程中,每次傳輸一位數據在時鐘上升沿到來之前必須至少有0.1μs的建立時間。而在時鐘上升沿之后同樣數據要保持一定的時間不變,這個時間稱為保持時間THD:DAT,最小值可以為0。只有當建立時間和保持時間都滿足通信協議要求,數據才能被寫入觸發器。
每次通信完之后,在將數據位SIO_D拉高之前需將時鐘SIO_C拉高TSU:STO的時間,至少為0.6μs。通信協議如圖4所示。

圖4 SCCB通信協議
1.2.2 SCCB寄存器配置
利用Verilog語言在Quartus中對CMOS傳感器進行模塊化設計,生成的RTL視圖如下圖5所示。iCLK是FPGA提供的25M時鐘用來給OV7670的系統時鐘,iRST_N是系統復位信號,Config_Done是寄存器配置完后的標志位。主要是通過I2C_SCLK和I2C_SDAT根據SCCB協議來設置相關寄存器值,從而驅動OV7670,使其在一定的模式下采集視頻信息。

圖5 SCCB配置RTL視圖
圖6是配置OV7670的流程圖。系統上電后通過硬件復位使整個芯片處于復位狀態。復位結束后,FPGA根據SCCB的通信協議設置OV7670的物理地址、寄存器地址,然后再對相關寄存器配置,在對所有寄存器配置完成后,接下來就可以驅動OV7670。因為每次發送時的物理地址是固定的0x42,所以寄存器LUT_DATA只需存儲寄存器地址和需配置的數據即可。本設計為了提高系統的靈活性,采用索引的方式,程序設計中只需讓索引值LUT_INDEX小于寄存器數n即可。當需配置的寄存器數改變時,只需改變寄存器數n。部分寄存器的配置如表1所示。

圖6 SCCB流程圖

表1 部分寄存器的配置
1.2.3 SCCB波形仿真
為了驗證程序通信的正確性,需要利用Modelsim仿真工具對其進行波形仿真。圖7是對寄存器配置的仿真波形圖。從仿真波形可以看到,此時的開始條件保持時間為0.1ms,開始條件建立時間遠大于600ns,建立時間是0.05ms,保持時間為0,仿真結果和通信協議很好的符合一致。

圖7 Write寄存器仿真波形
配置完OV7670寄存器后,可進行視頻數據采集。數據采集的信號線有像素時鐘PCLK,行同步HREF和幀同步VSYNC[6],分辨率為640*480。幀同步VSYNC低有效,行同步HREF為高時進行數據采集,且每次HREF維持高電平的時間為640個像素時鐘,在此期間不斷采集數據送至FPGA內部WRFIFO進行緩存。當VSYNC低電平持續507個像素時鐘后被拉高,至此一幀數據采集完成[7]。圖8是其時序圖,tsu為建立時間,≥15ns,thd是保持時間,≥8ns;下降沿到數據輸出有效時間tPDV≤5ns。tPHH和tPHL分別是像素時鐘下降沿到HREF上升沿和下降沿的時間,最大為5ns,最小可以為0。

圖8 數據采集時序圖
圖9是利用SignalTap II采集的波形圖。從波形圖中可知,系統時鐘和像素時鐘同步,在cmos_vsync為低且cmos_href為高時數據開始采集,之前數據都為0。在每次時鐘的上升沿到來之前數據已經穩定約20ns,大于數據建立時間要求的至少15ns。保持時間同樣約為20ns,大于數據保持時間要求的至少8ns。波形很好的滿足了建立時間和保持時間等各項時間系數,符合設計要求。

圖9 SignalTap II信號波形圖
視頻采集顯示部分采用通用的工業VGA標準接口,在FPGA和VGA接口之間加入ADV7123數模轉換芯片,將FPGA內部緩存在RDFIFO中的16位數據讀出經過ADV7123轉換[8]成3位模擬量輸出。對于VGA的場同步信號VSYNC和行同步信號HSYNC,是由FPGA同步控制的。需要注意的是,和CMOS采集信號的幀行信號不同,當VSYNC和HSYNC都為高電平時,數據有效輸出。
對于要求顯示的靜態字體,利用FPGA的ROM來配置,將顯示的字體以.mif文件加載到ROM中,視頻實時顯示如圖10所示。

圖10 視頻實時顯示
本設計是針對視頻采集系統設計的方案,以并行、快速的FPGA為主控芯片,采用了OmniVision公司的OV7670傳感器來采集視頻信息。根據SCCB通信協議對OV7670相關寄存器進行了控制,使其采集信號格式為RGB565。而后利用SignalTap II對視頻采集信號進行了時序分析,最后VGA視頻實時顯示很好的證明了該設計的可行性。該設計除具有電路簡單,低功耗、低成本等一系列優點外,只要將外部電路稍加改動就可以應用于其他視頻采集系統中,能夠為以后設計出更高級的視頻監控系統奠定基礎。
[1]CMOS傳感器_百度百科[EB/OL]http://baike.baidu.com/view/356089.2015-02.
[2]刁曉靜.無線多傳感器網絡中圖像傳輸系統的實現[D].南京:南京理工大學,2006.
[3]楊侃,孫堯,詹艷艷.基于S3C44B0嵌入式系統的SCCB 設計與實現[J].現代電子技術,2008,31(22):183-186.
[4]苑瑋琦,湯永華.OmniVision圖像傳感器的SCCB總線協議在DSP中的實現[J].儀器儀表學報,2006,27(6):1687-1688.
[5]褚紅娟,隋國榮.基于SCCB通信的FPGA視頻采集模塊[J].自動化儀表,2010,31(11):68-70,74.
[6]劉鑫.基于ARM的圖像采集系統的設計[D].武漢:武漢理工大學,2007.
[7]薛敏彪,吳廣偉,王健,等.嵌入式機載視頻輸出接口設計[J].現代電子技術,2011,34(2):9-11,14.
[8]高強,王煒,劉建,等.SCCB總線配置的FPGA視頻采集與顯示系統設計[J].單片機與嵌入式系統應用,2014,14(1):73-75.