佟大鵬 劉 丹
摘 要:現代化生產和科學研究對圖像采集系統的要求日益提高。傳統的圖像采集卡速度慢、處理功能簡單,不能很好地滿足特殊要求,因此,我們構建了高速圖像采集系統。它主要包括圖像采集模塊、圖像低級處理模塊以及總線接口模塊等。這些模塊是在FPGA中利用VHDL編程實現的。由于VHDL設計靈活、編程方便,易于在FPGA中實現并行運算和流水線結構;所以,高速圖像采集系統的速度快、適應性好。
一、系統設計
本系統中專用視頻處理器采用Philips公司的可編程視頻輸入處理芯片SAA7111A。它通過簡潔的I2C總線與其它器件和設備連接可以將視頻信號轉換為多種格式的數字號。
最復雜的信號莫過于視頻信號。視頻信號中除了包含圖像信號之外,還包括了行同步信號、行消隱信號、場同步信號、場消隱信號以及槽脈沖信號、前均衡脈沖、后均衡脈沖等。因而,對視頻信號進行A/D轉換的電路也非常復雜。Philips公司將這些非常復雜的視頻A/D轉換電路集成到了一塊芯片內,從而生產出功能強大的視頻輸入處理芯片SAA7111A,為視頻信號的數字化應用提供了極大的方便。
二、工作原理
系統復位完成FPGA程序加載后,先由FPGA的I2C總線模塊對SAA7111初始化,本系統中SAA7111A的初始設定為:一路模擬視頻信號輸入、自動增益控制、625行50Hz 、PAL制式、YUV422 16bits數字視頻信號輸出、設置默認的圖像對比度、亮度及飽和度。之后等待采集圖像的命令。初始化成功后,SAA7111實時處理模擬視頻信號,輸出亮度和色度信號,同時輸出點時鐘信號,行、場同步信號,行、場參考信號,奇偶場標志信號等。本系統使用灰度圖像,沒有使用色度信號,所以數據線為8位
系統采集圖像的命令由計算機發(fā)出,啟動FPGA的采集同步模塊。采集同步模塊發(fā)出采集標志信號,采集一幀圖像,通過寫數據模塊產生寫地址和寫信號將數據存儲到SRAM中。采集結束時,采集標志信號撤消,采集同步模塊復位,等待下一次采集命令。FPGA處理完1幀圖像數據后,通過讀數據模塊生產讀地址和讀信號來實現將SRAM中的圖像信息讀出并通過PCI總線傳送到計算機中。
在圖像采集過程中,我們使用的是512×512的圖像,即一幀圖像采集512行,奇數場和偶數場各采集256行,每一行采集512個像素。因此,需要通過行延時模塊進行行選擇,濾掉無效行,通過像素延時模塊進行像素選擇,以選擇需要的像素。[4]
三、用VHDL硬件描述語言完成采集控制模塊的行為描述
采集控制模塊又包括幾個子模塊。因為SAA7111采用的是I2C總線,所以采集控制模塊應包括:模擬I2C總線模塊、采集同步模塊、SRAM讀寫模塊。
1.利用I2C協議對SAA7111配置的具體實現
使用FPGA模擬的I2C接口可以對SAA7111提供的多個控制字進行讀寫,從而完全控制SAA7111的運行。對SAA7111的控制字的寫過程如圖2所示。
I2C協議中器件地址是7位,加上讀寫位構成一個完整的字節(jié)。SAA7111的器件地址是0100,101,加上讀寫位后:器件地址+寫=0100 1010即4AH;器件地址+讀=0100 1011,即4BH。從地址是器件內部分配的地址。SAA7111提供了00~1F、40~62共43個控制字。SAA7111讀控制字的過程如圖3所示。
I2C協議中的讀操作比寫操作復雜:首先完成對器件地址和從地址的寫操作;然后發(fā)送4BH,可以開始接收數據;數據傳輸結束時發(fā)送終止信號。
編寫VHDL語言如下:
library ieee;
USE ieee.Std_Logic_1164.all;
LIBRARY lpm;
USE lpm.lpm_components.all;
process(nReset,eclk)
begin
if(nReset='0')then
int<='0';i_ack_r<='0';
elsif(eclk'vent and eclk='1')then
if(nce='0'andnAwe='0')then
if(core_en='1'and eadd="001")then
--寫入命令寄存器
i_ack_r<=cr(47);
end if;
else
i_ack_r<='0'; --自動清除
end if;
int<=cmd_done_ack and ien;
end if;
Eint<=int and(not i_ack_r_;end process;命令碼
采集同步模塊
整個圖像采集部分是一個VHDL語言文件。FPGA采用串行主模式,從SPROM中讀取配置數據,完成自身配置。Set_sample.vhd采集同步模塊,它是圖像采集部分的一個塊語句,輸入輸出信號為:
pcicon0-IN,啟動采集圖像信號;
vref-IN,場參考信號;
rts0-IN,奇偶場標志信號;
sig_frame-OUT,采集同步輸出信號,高電平有效,用于圖像采集和總線管理模塊;
sig_field-OUT,采集同步場參考信號,采集1幀圖像的場參考信號。
源程序如下:
set_sample:block
signal flagct:std_logic_vector(2 downto 0);
begin
process(pcicon0,vref)
begin
if(pcicon0='O')then
flagct<="01";
elsif(vref 'event and vref='1')then
if(flagct="001"and rts0='1')then
flagct<="010";
elsif(flagct="010")then
flagct<="011";
elsif(flagct="011")then
flagct<="100";
end if;
end if;
end process;
process(flagct)
begin
if(flagct="010" or flagct="011")then
sig_frame<='1';
else
sig_frame<='0';
end if;
end process;
sig_field<=sig_frame and vref;
end block;
當pcicon0引腳再現大于等于場周期(20ms)的低電平信號時,可以確保該模塊處于觸發(fā)狀態(tài),在下一個奇數場出現時,(rts0=1),根據SAA7111的場參考信號產生具有兩場時寬的采集同步信號(sig_frame)。該信號有效時為圖像采集階段,對SRAM1寫入數據;該信號撤消時采集同步模塊自動復位,等待下一次采集命令,同時FPGA1開始讀取SRAM1中數據進行處理。采集同步信號有效的同時輸出采集同步場參考信號,用于采集圖像數據?!?/p>