基于FPGA的數據嵌入式圖像采集系統
根據I2C總線(xiàn)數據傳輸的時(shí)序,總線(xiàn)控制器的狀態(tài)機分為空閑狀態(tài)、啟動(dòng)狀態(tài)、數據傳輸狀態(tài)、應答狀態(tài)和停止狀態(tài)。Idle狀態(tài)表示總線(xiàn)空閑狀態(tài),SCL和SDA都為高電平,若clk=1則進(jìn)入Start狀態(tài)。Start狀態(tài)表示總線(xiàn)啟動(dòng),此時(shí)保持SCL為高電平,將SDA由高電平變?yōu)榈碗娖?,從而啟?dòng)數據傳輸。Data_trans狀態(tài)中一次傳1 Byte數據。在本狀態(tài)中,1 Byte數據的傳輸過(guò)程為將時(shí)鐘線(xiàn)變?yōu)榈碗娖?,然后將數據放在數據線(xiàn)SDA上。再將時(shí)鐘線(xiàn)變?yōu)楦唠娖?,讓接收方進(jìn)行數據接收。傳輸完1 Byte后進(jìn)入Hold。Hold狀態(tài)用來(lái)表示應答階段,主要是產(chǎn)生一個(gè)時(shí)鐘脈沖,讓接收方對1 Byte的數據產(chǎn)生應答信號。在此狀態(tài)中進(jìn)行對本次數據連續傳送是否完畢進(jìn)行判斷。如未傳輸完則繼續到Start狀態(tài)進(jìn)行下一次數據的傳輸,并將count-1。Stop狀態(tài)表示數據傳輸結束。在SCL高電平期間將SDA由低轉為高。然后輸出一個(gè)配置完成的信號。寄存器配置狀態(tài)機如圖3所示。本文引用地址:http://dyxdggzs.com/article/190003.htm
3.3 控制模塊
控制模塊由control_enable模塊和control_interface模塊組成主要負責圖像采集模塊和顯示接口模塊的同步和使能。當解碼芯片配置完成后,從CONFIGURACION_OK輸入使能信號,啟動(dòng)該模塊,同時(shí)通過(guò)href和odd信號啟動(dòng)圖像采集模塊和顯示接口模塊,href=1表示SAA7113H通過(guò)VPO傳輸像素數據;odd=1表示奇數場(chǎng),odd=0表示偶數場(chǎng)。
3.4 像素存儲模塊
圖像的一幀為720×625提取其中的有效像素640×576存入SDRAM中,再讀出480行數據進(jìn)行格式轉換和顯示。
由于SDRAM每個(gè)單元為16位,所以將一個(gè)Y和一個(gè)Cb或Cr合存在一個(gè)地址空間中,即兩個(gè)時(shí)鐘周期產(chǎn)生一個(gè)地址。SDRAM有4端口模式,2個(gè)用于將FIFO中的數據寫(xiě)SDRAM,2個(gè)用于將數據讀到FIFO中,讀寫(xiě)采用的時(shí)鐘不同,寫(xiě)時(shí)鐘采用解碼芯片的27MHz,而瀆時(shí)鐘采用VGA的25MHz,由于SDRAM的讀寫(xiě)速度為50 MHz,時(shí)鐘頻率不同,不能直接寫(xiě)入,因此需要一個(gè)FIFO將數據暫時(shí)儲存,再將其寫(xiě)到SDRAM中。
此處關(guān)鍵問(wèn)題是隔行掃描到逐行掃描的轉換。SAA7113H是先奇數場(chǎng)后偶數場(chǎng)的順序輸出,即隔行輸出,而VGA顯示是逐行顯示的,因此要進(jìn)行去隔行操作。利用對SDRAM的讀寫(xiě)地址的控制能夠有效解決隔行到逐行的轉換問(wèn)題,數據寫(xiě)入SDRAM是將隔行數據寫(xiě)入到SDRAM的0-640× 576的地址空間中,其中640×23-640×310為1、3、5、…奇數場(chǎng)的有效數據,640×336-640×623為2、4、6、…偶數場(chǎng)的有效數據。兩場(chǎng)數據分別通過(guò)不同的FIFO讀出,格式轉換時(shí)交叉讀取兩個(gè)FIFO中的數據,這樣讀出的數據即1、2、3、4、…逐行數據。
3.5 格式轉換模塊
要將攝像頭采集的圖像顯示在顯示器上,需進(jìn)行數據的格式轉換,將YUV格式的數據轉換成RGB格式的數據。YUV 4:2:2格式的數據兩個(gè)相鄰的像素共用一對Cb和Cr分量,所以在進(jìn)行格式轉換時(shí)要先解交織,即一次從FIFO中提取相鄰的兩個(gè)像素數據,將Cb和Cr各復用一次,使得YUV變成4:4:4格式,然后進(jìn)行格式的轉換。將轉換好的數據存放在reg_RGB中,VGA顯示的時(shí)候交叉讀取這兩個(gè)寄存器中的數據。轉換公式如下所示
由于在FPGA中進(jìn)行浮點(diǎn)運算較困難,因此可將式(1)中的各系數轉化為整數在進(jìn)行運算,采用將各系數放大1 024倍的方法,得到r、g、b后再除以1 024,放大后的公式為
根據上述公式得到r、g、b。然后將結果均右移10位完成除法運算,得到RGB值。由于r、g、b均為8位,取值范圍為0~255,而運算過(guò)程較易生成負數和超過(guò)255的正數,因此運算結果需將負數取0,超過(guò)255的正數取為255。此方法雖然會(huì )引入誤差,但對最終圖像的顯示效果不會(huì )有較大影響。
3.6 顯示接口模塊
由interface_vga負責圖像的顯示,從reg_RGB寄存器中讀取轉換好的數據,對這兩個(gè)像素的讀取由一個(gè)轉換電路負責在兩個(gè)寄存器之間切換。顯示接口模塊將r、g、b以及hsync、vsync一起發(fā)送給編碼芯片THS8134,通過(guò)VGA顯示出來(lái),hsync和vsyne分別是行和場(chǎng)同步信號。在仿真中,選用CycloneⅡEP2C20Q240C8芯片,用QuartusⅡ8.0進(jìn)行綜合與仿真。圖4是對顯示接口模塊的仿真。由仿真結果可以看出,行同步和場(chǎng)同步符合時(shí)序要求。
4 結束語(yǔ)
實(shí)現了一種基于CycloneII系列FPGA與視頻信號處理芯片SAA7113H的嵌入式圖像采集系統。系統結構簡(jiǎn)單系、統穩定、功耗低、成本低、速度快以及接口方便,可以滿(mǎn)足視頻監控系統等的需要。圖像采集系統中采用FPGA作為采集控制部分,可以提高系統處理的速度及系統的靈活性和適應性,對于不同的視頻圖像信號,只要在FPGA內對控制邏輯稍作修改,便可實(shí)現信號采集。
評論