王 成 崔少輝 王法臻 馬銘駿
(1.陸軍工程大學(xué)石家莊校區(qū) 石家莊 050003)(2.65655部隊(duì) 赤峰 024000)
為了滿足火炮窺膛、導(dǎo)彈電視跟蹤模塊等測(cè)試的需求,現(xiàn)在通用自動(dòng)測(cè)試系統(tǒng)中大多安裝模擬圖像采集卡用以完成裝備圖像采集分析任務(wù)[1],這樣就需要研究模擬圖像產(chǎn)生裝置,供自動(dòng)測(cè)試系統(tǒng)功能自檢使用。然而市場(chǎng)上并沒有方便獲取的模擬信號(hào)的視頻信號(hào)產(chǎn)生器,以往自動(dòng)測(cè)試系統(tǒng)中圖像采集卡自檢往往通過在自檢適配器中安裝攝像頭,圖像采集卡連接攝像頭輸出完成功能自檢,這種方式的缺點(diǎn)在于需要為攝像頭單獨(dú)開孔,而且難以固定。為了解決上述問題,本文基于FPGA的PAL制視頻信號(hào)產(chǎn)生器,同時(shí)研究了VHDL程序自動(dòng)生成技術(shù),實(shí)現(xiàn)了圖像生成過程中的“所見即所得”。
考慮到我國(guó)電視及國(guó)內(nèi)圖像采集卡都支持PAL制式,因此視頻信號(hào)產(chǎn)生器也基于PAL制式[2]。PAL制式,由Walter Bruch提出,即逐行倒相制式。通過采用逐行倒相的方法,以掃描方式傳送圖像數(shù)據(jù)[3]。圖像數(shù)據(jù)傳送速率每秒25幀,每幀625行[4],分為奇數(shù)行和偶數(shù)行兩場(chǎng)的隔行掃描——即每秒50場(chǎng),每場(chǎng)312.5行,場(chǎng)掃描頻率為50Hz,行掃描頻率為15625Hz,周期為64μs[5]。
基于FPGA的PAL制視頻信號(hào)產(chǎn)生器系統(tǒng)框圖如圖1所示,系統(tǒng)采用6MHz晶振,系統(tǒng)采用外接+5V電源輸入,系統(tǒng)通過電壓變換器,輸出3.3V電源給FPGA芯片使用,±10V電源供為信號(hào)合成模塊中的運(yùn)放供電,F(xiàn)PGA需要產(chǎn)生圖像信號(hào)和同步信號(hào)兩路信號(hào)。
為了達(dá)到在電視屏幕上正確地顯示視頻信號(hào)的目的,將視頻信號(hào)設(shè)計(jì)為電視信號(hào)的625行、每行時(shí)間為64μs,使視頻圖像點(diǎn)陣與電視掃描位置一一對(duì)應(yīng),并利用行計(jì)數(shù)器和列計(jì)數(shù)器記錄當(dāng)前的掃描位置,同時(shí)根據(jù)行/列計(jì)數(shù)器的值確定各信號(hào)的輸出。FPGA的頂層設(shè)計(jì)如圖2所示。
圖1 基于FPGA的PAL制視頻信號(hào)產(chǎn)生器系統(tǒng)設(shè)計(jì)框圖
圖2 PAL制視頻信號(hào)產(chǎn)生器的FPGA頂層設(shè)計(jì)原理圖
根據(jù)PAL制式同步信號(hào)產(chǎn)生的需求,若采用6MHz晶振,每行64μs對(duì)應(yīng)的計(jì)數(shù)值為384,對(duì)應(yīng)384進(jìn)制的列計(jì)數(shù)器,5種負(fù)電平的同步信號(hào)對(duì)應(yīng)的起始時(shí)刻、脈寬、列計(jì)數(shù)器值分別為
S0:0μs開始,脈寬4.7μs,計(jì)數(shù)值0~28;
S1:0μs開始,脈寬27.3μs,計(jì)數(shù)值0~164;
S2:32μs開始,脈寬27.3μs,計(jì)數(shù)值192~356;
S3:0μs開始,脈寬2.35μs,計(jì)數(shù)值0~14;
S4:32μs開始,脈寬2.35μs,計(jì)數(shù)值192~206;
其中,S1~S4為場(chǎng)同步和幀同步信號(hào),S0為行同步信號(hào)[6]。
設(shè)1為行計(jì)數(shù)器的值、r為列計(jì)數(shù)器的值,sync為同步信號(hào)輸出,則它們之間的關(guān)系用VHDL語言可描述為
同步信號(hào)產(chǎn)生模塊的仿真波形如圖3所示。
圖3 同步信號(hào)產(chǎn)生模塊的仿真波形
由FPGA程序產(chǎn)生數(shù)字圖像信號(hào),即將1幀圖像可以看做是一個(gè)384*625的二維數(shù)組[7],根據(jù)需要產(chǎn)生的圖像,對(duì)二維數(shù)組進(jìn)行相應(yīng)設(shè)置即可產(chǎn)生所需的圖像??紤]到手工計(jì)算二維數(shù)組,然后根據(jù)二維數(shù)組編寫FPGA程序,工作量非常大。為此,我們開發(fā)了數(shù)字圖像信號(hào)自動(dòng)生成FPGA程序輔助軟件,如圖4所示。
圖4 數(shù)字圖像信號(hào)自動(dòng)生成FPGA程序輔助軟件主界面
數(shù)字圖像信號(hào)自動(dòng)生成FPGA程序輔助軟件采用“所見即所得”的思想,采用MFC中多框架視圖結(jié)構(gòu),在視圖中繪制了一個(gè)384*625矩形框代表圖像顯示區(qū)域,設(shè)計(jì)了一系列可視化對(duì)象[8],作為軟件的基本元素,可視化對(duì)象承載了所有數(shù)據(jù)信息和界面信息??紤]到VHDL本身不支持乘法運(yùn)算,需要設(shè)計(jì)乘法器[9],因此在圖像生成示例程序主要考慮“直線”和“方塊”圖像的自動(dòng)生成FPGA程序,下面以產(chǎn)生“直線”圖像為例詳細(xì)介紹。首先定義了CDrawObj類完成界面拖放、序列化和設(shè)置顏色等屬性的基本操作,在該類基礎(chǔ)上繼承實(shí)現(xiàn)了CDrawRect類用來完成“直線”圖像的繪制與序列化[10]。其中序列化的實(shí)現(xiàn)算法如下:
步驟1:對(duì)象個(gè)數(shù)不為0,則在當(dāng)前路徑下創(chuàng)建VHDL_generate.vhd文件,成功轉(zhuǎn)入步驟2,否則報(bào)錯(cuò)退出;
步驟2:寫入VHDL文件頭,主要包括使用VHDL庫(kù)和變量聲明等;
步驟3:根據(jù)可視化類具體類型,生成圖像信號(hào)對(duì)應(yīng)的FPGA代碼;
步驟4:寫入VHDL文件尾,主要包括圖像信號(hào)輸出語句和其他結(jié)構(gòu)化語句。
其中生成圖像信號(hào)對(duì)應(yīng)的FPGA代碼是核心,以“直線”圖像為例,其代碼生成思路是:首先確定是水平方向還是垂直方向,然后確定直線兩端在可視化界面上的相對(duì)坐標(biāo),最后利用VHDL中的FOR語句生成相應(yīng)代碼,自動(dòng)生成完整的VHDL語言代碼[11]示例如下:
考慮到電視跟蹤系統(tǒng)測(cè)試時(shí)需要產(chǎn)生標(biāo)準(zhǔn)運(yùn)動(dòng)圖像信號(hào),以檢測(cè)電視跟蹤系統(tǒng)是否正常工作。為此,在FPGA頂層設(shè)計(jì)中添加一個(gè)計(jì)數(shù)器模塊index,并修改目標(biāo)信號(hào)模塊,如圖5所示。
其中index模塊時(shí)鐘輸入為晶振信號(hào)經(jīng)過row和line兩個(gè)模塊分頻后的信號(hào),時(shí)鐘周期約為40ms,其計(jì)數(shù)長(zhǎng)度即為運(yùn)動(dòng)目標(biāo)的長(zhǎng)度。
target1目標(biāo)模塊輸入受行、列和計(jì)數(shù)控制,產(chǎn)生一個(gè)點(diǎn)目標(biāo)直線運(yùn)動(dòng)的示例代碼如下:
圖5 PAL制視頻信號(hào)產(chǎn)生器的FPGA頂層設(shè)計(jì)原理圖
信號(hào)合成模塊將FPGA輸出的圖像信號(hào)和同步信號(hào)疊加并合成,PAL制視頻信號(hào)標(biāo)準(zhǔn)規(guī)定:圖像信號(hào)幅度0.7V,同步脈沖幅度-0.3V,峰-峰值Vp-p=1.0V[12]。信號(hào)合成模塊采用LF347單片四運(yùn)放完成,其電路設(shè)計(jì)如圖6所示。
圖6 信號(hào)合成模塊電路設(shè)計(jì)原理圖
通過運(yùn)放實(shí)現(xiàn)了圖像信號(hào)和同步信號(hào)的放大與疊加,產(chǎn)生的圖像信號(hào)符合圖像采集卡自檢要求。
本文基于FPGA設(shè)計(jì)了PAL制視頻信號(hào)產(chǎn)生器,利用FPGA產(chǎn)生PAL制信號(hào)所需的同步信號(hào)與圖像信號(hào),通過信號(hào)合成后可以產(chǎn)生靜態(tài)和動(dòng)態(tài)圖像信號(hào),并研究了VHDL程序的自動(dòng)生成技術(shù),開發(fā)了數(shù)字圖像信號(hào)自動(dòng)生成FPGA程序輔助軟件實(shí)現(xiàn)了圖像生成過程中的“所見即所得”。