文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)07-0061-04
隨著紅外探測技術(shù)的發(fā)展及其在軍事、工業(yè)等領(lǐng)域的廣泛使用,,紅外圖像處理算法獲得了廣泛研究,。在實際嵌入式紅外圖像處理系統(tǒng)中,為了方便硬件調(diào)試和觀察圖像處理的效果,,需要在系統(tǒng)中加入圖像顯示模塊,。通常視頻數(shù)據(jù)流需要處理的數(shù)據(jù)量大,實時性要求高,,所以需要高速大容量的存儲器作為圖像數(shù)據(jù)的緩存,。用于圖像數(shù)據(jù)緩存的存儲器有3種:①同步動態(tài)隨機(jī)存取存儲器SDRAM(Synchronous Dynamic RAM),其容量大,、速度快,、體積小、價格低,,但SDRAM的控制邏輯比較復(fù)雜,,對時序要求也十分嚴(yán)格,,需要設(shè)計專門的SDRAM控制器以完成與SDRAM芯片的接口;②雙口RAM,,它可以同時對數(shù)據(jù)進(jìn)行讀寫,,時序簡單,操作非常方便,,但是容量相對較小,,而且價格高;③靜態(tài)隨機(jī)存取存儲器SRAM(Static RAM),,它不僅容量大,、速度快、體積小,、價格低,,而且時序控制簡單,但是數(shù)據(jù)不能同時讀寫,,工程中多采用2片SRAM做乒乓操作來簡化讀寫控制,。針對實際工程中的體積小、成本低,、開發(fā)周期短等要求,,本文提出一種基于單片SRAM和FPGA的圖像處理及顯示方案,并在實際工程中得到了應(yīng)用,。
本文的初始設(shè)計是面向幀頻為50幀/s,、16 bit灰度、圖像為320×256像素的紅外圖像輸出顯示,,但其設(shè)計方案可以應(yīng)用于不同幀頻,、灰度級及圖像大小的圖像顯示。
1 系統(tǒng)硬件結(jié)構(gòu)和工作原理
系統(tǒng)硬件結(jié)構(gòu)圖如圖1所示,。本系統(tǒng)中,高速串行LVDS視頻信號經(jīng)Camera Link接收芯片DS90CR285接收轉(zhuǎn)化為并行TTL電平后送給FPGA,,同時,,其他系統(tǒng)的高速串行LVDS格式數(shù)據(jù)也可以直接送至FPGA。這些視頻數(shù)據(jù)經(jīng)FPGA進(jìn)行直方圖統(tǒng)計,,并存儲在SRAM中,。然后,F(xiàn)PGA在存儲間隙讀出SRAM內(nèi)的有效像素數(shù)據(jù),,并采用直方圖統(tǒng)計的參數(shù)對圖像灰度拉伸,,然后送至視頻轉(zhuǎn)換芯片ADV7123進(jìn)行D/A轉(zhuǎn)換顯示。
2 各功能模塊設(shè)計
2.1 Camera Link接口
本方案選用DS90CR285將Camera Link格式的4對串行LVDS圖像信號轉(zhuǎn)換成28 bit并行TTL/CMOS的數(shù)據(jù),。根據(jù)Camera Link基本協(xié)議,,28 bit數(shù)據(jù)信號中包括3個數(shù)據(jù)端口:A口(8 bit),、B口(8 bit)、C口(8 bit),,和4個視頻控制信號FVAL(幀有效),、DVAL(數(shù)據(jù)有效)、LVAL(行有效),、SPARE(空,,暫時未用)。經(jīng)過Camera Link芯片轉(zhuǎn)換后的時鐘信號是整個相機(jī)的同步驅(qū)動信號,,所有的數(shù)據(jù)和視頻控制信號都和該時鐘信號同步,。數(shù)據(jù)轉(zhuǎn)換后送入FPGA的時序如圖2。
2.2 FPGA核心功能模塊實現(xiàn)
本設(shè)計中視頻數(shù)據(jù)的處理都在FPGA內(nèi)實現(xiàn),,其內(nèi)部功能框圖見圖3,。
本文主要討論在FPGA內(nèi),利用視頻數(shù)據(jù)的行場掃描間隙對單片SRAM進(jìn)行讀寫操作從而完成模擬圖像的顯示功能,。直方圖統(tǒng)計功能在另文中描述,。
本系統(tǒng)中,視頻信號時鐘為20 MHz,,PAL制式信號數(shù)據(jù)時鐘采用13.5 MHz,。為了讓SRAM讀寫時間更加充裕,使用了兩個FIFO模塊作為數(shù)據(jù)緩沖:FIFO_IN,、FIFO_OUT,。FIFO_IN用來做SRAM的輸入緩沖器,F(xiàn)IFO_OUT用來做SRAM的輸出緩沖器,。FIFO可以通過IP核來實現(xiàn),,存儲寬度為16 bit,存儲深度設(shè)置為1.5倍行像素,,本系統(tǒng)為1.5×320=480[1-2],。
2.2.1 FIFO_IN模塊
為保證數(shù)據(jù)讀寫效率,此模塊的讀寫方式需進(jìn)行合理規(guī)劃,,具體為每次往FIFO中寫一行數(shù)據(jù),,寫完后立刻從FIFO讀一行數(shù)據(jù)并寫入SRAM。像素時鐘為FIFO的寫時鐘,,行有效信號作為FIFO的寫使能,,F(xiàn)IFO讀時鐘為100 MHz,也是SRAM的讀寫時鐘,,通過判斷行下降沿來生成一個320的計數(shù)器,,并在計數(shù)器有效期間將FIFO讀使能置為高。FVAL的上升沿作為FIFO的復(fù)位信號,。此FIFO的讀寫時序圖見圖4,。
2.2.2 FIFO_OUT模塊
此模塊主要是緩沖灰度拉伸后的視頻數(shù)據(jù)用于輸出顯示,。本系統(tǒng)要求輸出標(biāo)準(zhǔn)的PAL制式的模擬視頻,PAL制式視頻場頻為50 Hz,,幀頻為25 Hz,。本方案選用專用的圖像DA芯片ADV7123, 該芯片是一款高速的RGB D/A轉(zhuǎn)換芯片,,內(nèi)部集成有3路10位精度的D/A轉(zhuǎn)換器,,分別用于RGB數(shù)字信號的D/A轉(zhuǎn)換,數(shù)據(jù)吞吐率可達(dá)到330 MS/s,,適合高分辨彩色視頻生成,。ADV7123提供有3路數(shù)字輸入接口(RE9:0]、G[9:0],、B[9:0])以及CRT消隱和同步控制信號(BLANK,、SYNC)。標(biāo)準(zhǔn)PAL制式的行場消隱信號和行場同步信號都是標(biāo)準(zhǔn)信號,,在FPGA內(nèi)很容易實現(xiàn),,本文不再論述。實際應(yīng)用中只需要在需要顯示圖像的正確行場位置,,將圖像灰度數(shù)據(jù)送入G[9:0]通道,,即可在lOG端口得到復(fù)合視頻信號。同時這些正確行場位置標(biāo)志信號作為FIFO的輸出使能,,輸出時鐘為13.5 MHz,,輸入時鐘為100 MHz,輸入使能為灰度拉伸模塊的輸出數(shù)據(jù)有效信號,,輸入數(shù)據(jù)為灰度拉伸模塊的輸出數(shù)據(jù),。FVAL的上升沿作為FIFO的復(fù)位信號。
2.2.3 SRAM讀寫控制模塊
SRAM作為視頻數(shù)據(jù)的緩沖區(qū),,根據(jù)上述時序其容量最好能大于2幀數(shù)據(jù),,同時為了便于以后擴(kuò)展,本方案中選用SRAM為CY7C1472BV33,,容量為4 M×18 bit,。由于SRAM屬于單向存儲器,利用單片SRAM作存儲的難點在于如何將讀寫控制分開,。此控制包含2部分:讀寫使能和讀寫地址變換。下面分別從讀和寫來說明這2部分控制的實現(xiàn),。
FIFO_IN的讀使能作為SRAM的寫使能,,寫地址在寫使能有效期間從SRAM的零地址依次遞增,即地址范圍為0~81 919(320×256-1),。但由于本系統(tǒng)中視頻信號20 ms一幀,,PAL制式視頻顯示一幀需要奇場20 ms,、偶場20 ms,共40 ms,,所以在偶場顯示時還是在讀SRAM中0~81 919部分的數(shù)據(jù),,此時視頻信號必須寫入SRAM的另外一部分空間,這就要求在奇場和偶場時寫地址要進(jìn)行切換,;或者采用在奇場時數(shù)據(jù)寫入SRAM,,偶場時不寫入,這樣剛好做到顯示完一幀圖像,,下一幀圖像數(shù)據(jù)就可以覆蓋上一幀圖像的數(shù)據(jù),,這樣寫地址就一直是從0~81 919,不需要切換,。本方案采用后者,,其寫使能及寫地址的FPGA主要代碼如下:
//SRAM寫使能
always @(posedge SRAM_CLK)
if (!rst_n | (sram_write_counter==319))
ui_sram_write <= 0;
else if(LVAL_fallage)
ui_sram_write <= 1,;//SRAM寫地址切換
always @(posedge SRAM_CLK)
if (!rst_n | Hsync_odd_riseage)
ui_sram_write_add <= 0,;//起始地址
else if (ui_sram_write)
ui_sram_write_add <= ui_sram_write_add + 1;
SRAM的寫使能設(shè)計要避免與SRAM的讀使能沖突,。本方案在FIFO_OUT模塊上設(shè)計了一個可編程空標(biāo)志位program_empty,,當(dāng)fifo數(shù)據(jù)不足160個時,program_empty置高,,PAL制式視頻的行掃描周期為64μs,,也就是FIFO_OUT每64 μs被讀一次(一次讀出320個數(shù)),這樣只要在64 μs時間內(nèi)能夠?qū)懭?20個數(shù)就可以保證下次行掃描能夠從FIFO_OUT取出數(shù)據(jù),。由于本系統(tǒng)中SRAM的寫使能周期為16.5 μs,,因此本方案是將SRAM讀狀態(tài)分2種情況,在FVAL信號有效期間,,采用program_empty置高和SRAM的寫使能下降沿的“與”操作作為SRAM讀觸發(fā)信號,;在FVAL信號無效期間,SRAM無寫控制,,program_empty信號的上升沿將作為SRAM的讀觸發(fā)信號,。然后根據(jù)讀觸發(fā)信號生成一個320的計數(shù)器,并在計數(shù)器有效期間將SRAM的讀使能置為高,。這樣就能保證SRAM的讀寫不沖突,,且數(shù)據(jù)也不會漏寫,控制時序見圖5,。
PAL制式視頻顯示分為奇場和偶場,,因此在奇場時,SRAM的讀地址應(yīng)該滿足:第n行地址范圍為320×(n-1)~319+320×(n-1)(n=1,,2……128),;偶場時,,RAM的讀地址應(yīng)該滿足:第n行地址范圍320×n~319+320×n(n=1,2……128),,其讀使能及讀地址的FPGA主要代碼如下:
//////// sram的讀標(biāo)志位有2種狀態(tài):(1)奇場數(shù)據(jù)有效時////用寫sram的下降沿‘與’fifo半行標(biāo)志位,。(2)奇場數(shù)據(jù)無效時用 fifo半行標(biāo)志位產(chǎn)生上升沿
always @(posedge SRAM_CLK)
if (!rst_n)
ui_sram_read_flag <= 0;
else begin
if ((FVAL_d | ui_sram_write_5d)& Hsync_odd )
ui_sram_read_flag <= ui_sram_write_fallage &
fifo_sram_adv7123_prom_empty_d,;
else
ui_sram_read_flag<=fifo_sram_adv7123_prom_empty_riseage,;
end
//// SRAM讀地址切換
always @(posedge SRAM_CLK)
if (!rst_n | Hsync_odd_riseage)
ui_sram_read_add <= 0;//奇場起始地址
else if (Hsync_odd_fallage)
ui_sram_read_add <= 320,;//偶場起始地址
else if (ui_sram_read_fallage)
ui_sram_read_add <= ui_sram_read_add+320,;
else if (ui_sram_read)
ui_sram_read_add <= ui_sram_read_add+1;
最后通過下面的賦值給出了SRAM芯片的讀寫,、片選及地址信號:
assign SRAM_read_write_en=~(ui_sram_write & Hsync_odd),;
//SRAM讀寫使能
assign SRAM_CE=~(ui_sram_read | ui_sram_write);
//SSRAM片選
assign SRAM_ADD=(ui_sram_write)?ui_sram_write_add:
ui_sram_read_add,;//SSRAM地址
2.2.4 灰度拉伸
將SRAM的讀使能和讀數(shù)據(jù)送入灰度拉伸模塊作為數(shù)據(jù)使能和輸入數(shù)據(jù),。本方案中,圖像灰度線性拉伸算法表達(dá)式為:
式(1)中:Y是拉伸后輸出圖像灰度值;X是SRAM中讀出的數(shù)據(jù),,為原始圖像16 bit二進(jìn)制數(shù)灰度值,;Xmin是輸入圖像數(shù)據(jù)直方圖統(tǒng)計最小灰度值;Xmax是輸入圖像數(shù)據(jù)直方圖統(tǒng)計最大灰度值,。為保證精度,,實際應(yīng)用中將上述公式進(jìn)行簡單變換,可以記為:
Q值在上幀結(jié)束前直方圖統(tǒng)計模塊已經(jīng)得到,,這樣拉伸運算只需1次減法和乘法運算,,得到積左移14 bit后,截取低10 bit就得到拉伸后的灰度值,。需要注意的是,,截取前要判定乘法是否溢出,如果溢出,,結(jié)果置為最大灰度值210,。本方案中主要通過調(diào)用乘法器IP核來完成乘法運算,不同硬件的乘法器延遲時間不同,,所以必須要將輸入數(shù)據(jù)使能信號作相應(yīng)延遲后,,成為輸出使能與乘法器輸出數(shù)據(jù)同步[3]。經(jīng)過灰度拉伸后的圖像數(shù)據(jù)送入FIFO_OUT模塊用于圖像顯示,,其中,,灰度拉伸模塊的輸出使能及輸出數(shù)據(jù)作為FIFO_OUT模塊的輸入使能和輸入數(shù)據(jù)。
該圖像處理方案以FPGA 作為核心控制芯片,采用單片SRAM實現(xiàn)了圖像預(yù)處理,、數(shù)據(jù)緩存、圖像存儲及顯示的功能,。隨著FPGA 性能的不斷提高及其靈活的可編程性,,設(shè)計者可以進(jìn)一步在FPGA內(nèi)部實現(xiàn)各種其他的圖像處理算法。這樣,,直接采用FPGA和單片SRAM的方案不但減小了PCB 尺寸,,降低了元件數(shù)量及PCB布線的難度,也降低了元件相互連線帶來的信號失真,,從而增加了可靠性和穩(wěn)定性,。本方案已成功應(yīng)用在本單位的圖像采集和處理產(chǎn)品中。
參考文獻(xiàn)
[1] 田耘,,胡彬,,徐文波,等.Xilinx ISE Design Suite 10.x FPGA開發(fā)指南[M].北京:人民郵電出版社,,2008.
[2] Xilinx Corporation.fifo_generator_ds317.http://www.xilinx.com,,2005.
[3] Xilinx Corporation.Muli_gen_ds255.http://www.xilinx.com,2005.