楊朋飛,聶 亮
(西安工業(yè)大學(xué) 光電工程學(xué)院,西安710021)
圖像信息在人類生產(chǎn)生活所能獲取到的信息中占比很大,能實時、非接觸式地獲取高保真性的圖像信息對國土安全、民用電子領(lǐng)域具有深遠的影響[1-3]。 現(xiàn)今,隨著基礎(chǔ)器件工藝提升和高集成度芯片內(nèi)部架構(gòu)更新迭代,具有并行處理能力的單片現(xiàn)場可編程門陣列FPGA 芯片可兼具其他處理器很多重要功能。 目前已有的圖像采集系統(tǒng)基本能實現(xiàn)目標顯像,但也存在圖像數(shù)據(jù)存取速度低、系統(tǒng)耗費資源大、體積較大、系統(tǒng)內(nèi)部邏輯或控制算法復(fù)雜度高、設(shè)計系統(tǒng)外部接口通用性較低等不足方面[4-7]。為使系統(tǒng)小型化和圖像數(shù)據(jù)高速存取,方便靈活地實現(xiàn)對目標實時顯像,本文設(shè)計了一種基于FPGA和DDR 存儲的相機圖像采集系統(tǒng), 旨在提供一種高速、大容量存儲的實時圖像采集方案,為后續(xù)有關(guān)工作提供理論和技術(shù)基礎(chǔ)。
類似“人眼”觀測視場范圍之內(nèi)景物,圖像采集系統(tǒng)同樣需要借助相機這一器件來完成目標物清晰、準確地成像在光電成像探測器像敏面,圖像信息轉(zhuǎn)換為電信息這種過程。 為將電信息所承載的圖像信息準確地解析呈現(xiàn)出來,處理單元的設(shè)計極其重要。 系統(tǒng)采用通信總線類似IIC,具有SCCB 接口的相機模組,其成像探測器為OmniVision 公司研發(fā)的CMOS OV7670 圖像傳感器[8]。 文中以單片Xilinx Spartan6 XC6SLX16 型FPGA 為核心,充分利用ISE 開發(fā)環(huán)境提供的內(nèi)部時鐘核(clock)、ROM 核和DDR 核等豐富資源,實現(xiàn)相機寄存器配置、相機輸出數(shù)據(jù)格式轉(zhuǎn)換、DDR 讀寫控制以及VGA 顯示等模塊邏輯設(shè)計。 針對系統(tǒng)640×480 圖像分辨率,30幀/s 的視頻流,其數(shù)據(jù)量為
采用Micron 公司DDR3 SDRAM 芯片MT41J 128M16JT 對采集到的圖像數(shù)據(jù)進行存儲[9],DDR3工作效率是DDR2 的兩倍[10],其容量為2 Gb,讀寫速度可達800 Mb/s。 在實際設(shè)計過程中將DDR3 讀寫速度保持在625 Mb/s, 以期與25 MHz 系統(tǒng)外部時鐘產(chǎn)生倍頻關(guān)系。 系統(tǒng)進行RGB565 彩色顯示時,需經(jīng)D/A 轉(zhuǎn)換電路將FPGA 輸出的數(shù)字圖像信號轉(zhuǎn)換為模擬圖像信號, 進而經(jīng)由VGA 接口將目標顯示在終端顯示器。 圖1 為系統(tǒng)整體結(jié)構(gòu)框架。
圖1 系統(tǒng)整體原理架構(gòu)圖Fig.1 Structure diagram of system overall principle
Iic_control 單元實現(xiàn)標準IIC 時序輸出,用于對CMOS 相機進行配置。OV7670 模組與FPGA 以兼容IIC 總線進行信息交互,極大地降低開發(fā)周期和開發(fā)成本。 標準IIC 具有時鐘線SCL 和數(shù)據(jù)線SDA,時序采用傳輸速率為100 k bit/s 的標準模式。文中對相機進行配置過程中, 考慮到FPGA 內(nèi)部邏輯代碼精簡和整個系統(tǒng)功耗等問題, 僅使用到IIC協(xié)議的寫操作命令, 即主機 (Master)FPGA 和從機(Slave)CMOS 相機進行通信。寫操作包括下列過程:①Master 發(fā)起START 啟動信號;②Master 發(fā)送具有IIC 接口的器件地址addr(7 bit)和寫操作0(1 bit),等待ACK 信號;③Slave 發(fā)送ACK 信號;④Master發(fā)送寄存器地址addr(8 bit),等待ACK 信號;⑤Slave發(fā)送ACK 信號;⑥Master 發(fā)送數(shù)據(jù)data(8 bit),即要寫入寄存器中的數(shù)據(jù),等待ACK 信號;⑦Slave 發(fā)送ACK 信號; ⑧第6 步和第7 步可以重復(fù)多次,即順序?qū)懚鄠€寄存器;⑨Master 發(fā)起STOP 停止信號。經(jīng)Modelsim 軟件對Iic_control 模塊進行仿真,如圖2 所示。測試結(jié)果表明,IIC 協(xié)議邏輯正確,能正常穩(wěn)定工作。 Iic_control 模塊中的SDA 數(shù)據(jù)線傳輸?shù)南鄼C寄存器地址和數(shù)據(jù)是由Iic_generate 模塊產(chǎn)生。 不僅如此,Iic_control 模塊也輸出相機配置使能信號(tiic_en,高電平有效)、相機配置完成標志位(tiic_init_done,高電平有效)、相機復(fù)位信號(image_sensor_reset_n,低電平有效)和相機低功耗使能信號(image_sensor_pwdn,高電平有效)。 CMOS OV7670 相機202 個寄存器地址和數(shù)據(jù)存放在ROM中,通過調(diào)用ISE 軟件IP 核可具體實現(xiàn)。 相機寄存器進行配置之前,需對相機進行初始化。 圖3 為Iic_generate 模塊輸出相機初始化信號的狀態(tài)圖。
圖2 Iic_control 模塊信號仿真圖Fig.2 Signals simulation diagram of Iic_control module
圖3 相機初始化狀態(tài)轉(zhuǎn)移圖Fig.3 State transition diagram of camera initializes
Camera_capture 模塊實現(xiàn)將CMOS 相機模組輸出的8 bit 數(shù)據(jù)轉(zhuǎn)換為64 bit 數(shù)據(jù)。 在OV7670 輸出格式為RGB565 的情況下,一個像素為2 Byte。 表1為Camera_capture 模塊部分信號說明。 針對模塊輸入8 bit 數(shù)據(jù),將其轉(zhuǎn)化為64 bit 輸出數(shù)據(jù),實現(xiàn)方法如下:
在camera_vsync 信號為低電平,camera_href 為高電平的狀態(tài)下,檢測計數(shù)器counter 的當前值。 若counter<7(counter 從0 開始計數(shù)),則將獲取到的相機數(shù)據(jù)存儲在64 位寄存器camera_data_reg 中;若counter=7,即獲取到第8 個字節(jié)數(shù)據(jù)時,則將采集到的相機數(shù)據(jù)存儲在64 位寄存器ddr_data_camera中,并在同步時鐘作用下,將ddr_data_camera 數(shù)據(jù)非阻塞輸入DDR_control 模塊。 采用Verilog 語言進行描述:
表1 Camera_capture 模塊部分信號Tab.1 Partial signals of camera_capture module
DDR_control 模塊用于實現(xiàn)對DDR3 的讀寫操作。 經(jīng)過Camera_capture 模塊輸出的相機數(shù)據(jù)存儲在DDR3 SDRAM 芯片MT41J128M16JT 中,DDR3 SDRAM 內(nèi)部分塊(A 和B)存儲相機數(shù)據(jù),如圖4 所示。 利用DDR 核配置2 個64 bit 的雙向端口Port0和Port1,DDR 核中的仲裁器來判斷處理當前狀態(tài)是Part0 還是Part1 操作。 本設(shè)計系統(tǒng)中,F(xiàn)PGA 與DDR3 進行信息交互所需接口信號是通過調(diào)用DDR 核產(chǎn)生,降低開發(fā)難度,增加設(shè)計系統(tǒng)穩(wěn)定性。Port0 對DDR 進行寫操作,Port1 對DDR 進行讀操作,DDR_control 模塊直接例化MIG 生成的時鐘單元和DDR 核。DDR 進行寫操作時,用戶邏輯先將數(shù)據(jù)寫入數(shù)據(jù)FIFO,送入DDR 核的Port0,再將命令寫入命令FIFO;DDR 進行讀操作時,用戶邏輯先將命令寫入命令FIFO, 再將數(shù)據(jù)從Port1 讀出。 DDR讀操作時,其地址必須和寫操作地址一致。 在寫操作過程中,
式中:A0為Port0 寫DDR 的初始地址;Ak為第k 次Port0 寫DDR 的地址。 在讀操作過程中,
式中:A0′為Port1 讀DDR 的初始地址;Ai′為第i 次Port1 讀DDR 的地址。
圖4 DDR3 讀寫控制流程Fig.4 Control flow chart of DDR3 read-write
本設(shè)計系統(tǒng)中,Port0 的寫命令為010,Port1 的讀命令為001。 DDR 讀寫操作狀態(tài)機如圖5 所示。
圖5 DDR3 讀寫操作狀態(tài)機Fig.5 Operation state machines of DDR3 read-write
VGA_control 模塊實現(xiàn)VGA 行列信號產(chǎn)生,相機采集圖像數(shù)據(jù)及DDR 讀操作相關(guān)信號輸出。VGA_control 模塊在讀使能條件下, 將DDR_control模塊輸出的相機存儲數(shù)據(jù)按標準VGA 協(xié)議輸出至外部顯示器。輸出圖像采用RGB565 模型,即一個像素16 位,紅色(R)占5 位,綠色(G)占6 位,藍色(B)占5 位。DDR_control 模塊輸入的64 bit 相機數(shù)據(jù)需轉(zhuǎn)換為4 個像素輸出,其轉(zhuǎn)換方法如下:
在VGA 輸出的行列信號有效狀態(tài)下, 將讀取的64 bit 相機數(shù)據(jù)[63:59]位輸出至紅色信號通道;[58:53]位輸出至綠色信號通道;[52:48]位輸出至藍色信號通道, 一個像素輸出完成。 依次類推,將[47:43]位輸出至紅色信號通道,[42:37]輸出至綠色信號通道,[36:32]輸出至藍色信號通道,完成第二個像素輸出。 依次循環(huán),完成第三個、第四個像素輸出。 在VGA 為640×480(60 Hz)顯示模式下,定義相關(guān)參數(shù)見表2。
表2 VGA 為640×480(60 Hz)顯示模式相關(guān)參數(shù)Tab.2 Display mode related parameters of VGA within 640×480(60 Hz)
在VGA_control 模塊中, 通過檢測列同步脈沖下降沿來產(chǎn)生DDR 地址復(fù)位信號,代碼實現(xiàn)如下:
針對VGA_control 設(shè)計模塊,利用Modelsim 對其進行仿真驗證,如圖6 所示。 在模塊測試過程中,VGA 讀取DDR 數(shù)據(jù)為十進制1100,與DDR 輸出數(shù)據(jù)相吻合。 同時,VGA_control 模塊中時鐘頻率為25 MHz,所設(shè)計的計數(shù)器計數(shù)準確,輸出信號邏輯正確、穩(wěn)定。
圖6 VGA_control 模塊信號仿真圖Fig.6 Signals simulation diagram of VGA_control module
將設(shè)計程序固化在Spartan6 FPGA 中,搭建系統(tǒng)。測試過程中,程序運行穩(wěn)定,像質(zhì)清晰,圖像實時動態(tài)性良好。利用ChipScope 在線抓取信號,如圖7 所示,分析結(jié)果表明,在DDR3 讀寫使能滿足的條件下,當相機寫入DDR3 SDRAM 存儲器的64 bit 數(shù)據(jù)為BCF3BCF3BCF3BCF3 時,從DDR3 SDRAM 存儲器讀出的64 bit 數(shù)據(jù)為BCF3BCF3BCF3BCF3,DDR3讀寫數(shù)據(jù)正確。 系統(tǒng)時鐘精確,F(xiàn)PGA 外部接口信號設(shè)計準確。 圖8 為采集系統(tǒng)運行效果,在低照度條件下,系統(tǒng)能有效穩(wěn)定地實現(xiàn)高質(zhì)量的實時圖像采集。
圖7 ChipScope 在線抓取DDR3 數(shù)據(jù)圖Fig.7 DDR3 data diagram of ChipScope online grab
圖8 圖像實時采集系統(tǒng)測試圖Fig.8 Test diagram of image real-time acquisition system
本文基于FPGA 和DDR3 設(shè)計的CMOS 相機圖像采集系統(tǒng), 利用Verilog 語言實現(xiàn)各模塊邏輯功能,系統(tǒng)能有效地實現(xiàn)30 幀/s 的圖像實時顯示。 同時,系統(tǒng)能針對不同分辨率的CMOS 相機進行靈活地調(diào)整,簡單快捷,可移植性強。 系統(tǒng)外部輸入時鐘25 MHz,具有標準的接口協(xié)議,工作穩(wěn)定,結(jié)構(gòu)簡單,成本較低,可應(yīng)用于對實時性成像和系統(tǒng)體積要求較高的領(lǐng)域。