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