《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 基于單片SRAM和FPGA的紅外圖像顯示的設(shè)計及實現(xiàn)
基于單片SRAM和FPGA的紅外圖像顯示的設(shè)計及實現(xiàn)
來源:電子技術(shù)應(yīng)用2011年第7期
胡 哲,張貴清,祁釋冰,夏博儒,李芬芬
(湖北航天技術(shù)研究所,湖北 武漢430040)
摘要: 介紹一種采用單片SRAM和FPGA實現(xiàn)紅外圖像顯示的新方案,并對顯示系統(tǒng)結(jié)構(gòu)、FPGA各功能模塊設(shè)計、SRAM的讀/寫時序設(shè)計進行了詳細論述。該圖像顯示方案可用于紅外圖像處理系統(tǒng)的硬件調(diào)試和紅外圖像處理效果觀測。實際使用情況表明,該顯示方案能夠很好地滿足紅外圖像處理系統(tǒng)的圖像輸出需求。
關(guān)鍵詞: FPGA 紅外圖像顯示 SRAM
中圖分類號: TN911.73
文獻標(biāo)識碼: A
文章編號: 0258-7998(2011)07-0061-04
Design and realization of infrared image display based on one SRAM and FPGA
Hu Zhe,Zhang Guiqing,Qi Shibing,Xia Boru,Li Fenfen
Hubei Institute of Spaceflight,Wuhan 430040,China
Abstract: A new solution using only one SRAM and FPGA for infrared image display on monitor, which can be used in many fields such as hardware debugging of infrared image processing system and visualization of image processing effect, is presented in this paper. The structure of display system, FPGA logic function block, SRAM read and write timing are also analyzed in detail. And it successfully satisfies the output image quality of infrared image processing system.
Key words : infrared image display;FPGA;SRAM


    隨著紅外探測技術(shù)的發(fā)展及其在軍事、工業(yè)等領(lǐng)域的廣泛使用,紅外圖像處理算法獲得了廣泛研究。在實際嵌入式紅外圖像處理系統(tǒng)中,為了方便硬件調(diào)試和觀察圖像處理的效果,需要在系統(tǒng)中加入圖像顯示模塊。通常視頻數(shù)據(jù)流需要處理的數(shù)據(jù)量大,實時性要求高,所以需要高速大容量的存儲器作為圖像數(shù)據(jù)的緩存。用于圖像數(shù)據(jù)緩存的存儲器有3種:①同步動態(tài)隨機存取存儲器SDRAM(Synchronous Dynamic RAM),其容量大、速度快、體積小、價格低,但SDRAM的控制邏輯比較復(fù)雜,對時序要求也十分嚴(yán)格,需要設(shè)計專門的SDRAM控制器以完成與SDRAM芯片的接口;②雙口RAM,它可以同時對數(shù)據(jù)進行讀寫,時序簡單,操作非常方便,但是容量相對較小,而且價格高;③靜態(tài)隨機存取存儲器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進行直方圖統(tǒng)計,并存儲在SRAM中。然后,F(xiàn)PGA在存儲間隙讀出SRAM內(nèi)的有效像素數(shù)據(jù),并采用直方圖統(tǒng)計的參數(shù)對圖像灰度拉伸,然后送至視頻轉(zhuǎn)換芯片ADV7123進行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)換后的時鐘信號是整個相機的同步驅(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進行讀寫操作從而完成模擬圖像的顯示功能。直方圖統(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ù)讀寫效率,此模塊的讀寫方式需進行合理規(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ù)吞吐率可達到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ù),同時為了便于以后擴展,本方案中選用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的另外一部分空間,這就要求在奇場和偶場時寫地址要進行切換;或者采用在奇場時數(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&mu;s,也就是FIFO_OUT每64 &mu;s被讀一次(一次讀出320個數(shù)),這樣只要在64 &mu;s時間內(nèi)能夠?qū)懭?20個數(shù)就可以保證下次行掃描能夠從FIFO_OUT取出數(shù)據(jù)。由于本系統(tǒng)中SRAM的寫使能周期為16.5 &mu;s,因此本方案是將SRAM讀狀態(tài)分2種情況,在FVAL信號有效期間,采用program_empty置高和SRAM的寫使能下降沿的&ldquo;與&rdquo;操作作為SRAM讀觸發(fā)信號;在FVAL信號無效期間,SRAM無寫控制,program_empty信號的上升沿將作為SRAM的讀觸發(fā)信號。然后根據(jù)讀觸發(fā)信號生成一個320的計數(shù)器,并在計數(shù)器有效期間將SRAM的讀使能置為高。這樣就能保證SRAM的讀寫不沖突,且數(shù)據(jù)也不會漏寫,控制時序見圖5。

    PAL制式視頻顯示分為奇場和偶場,因此在奇場時,SRAM的讀地址應(yīng)該滿足:第n行地址范圍為320&times;(n-1)~319+320&times;(n-1)(n=1,2&hellip;&hellip;128);偶場時,RAM的讀地址應(yīng)該滿足:第n行地址范圍320&times;n~319+320&times;n(n=1,2&hellip;&hellip;128),其讀使能及讀地址的FPGA主要代碼如下:
//////// sram的讀標(biāo)志位有2種狀態(tài):(1)奇場數(shù)據(jù)有效時////用寫sram的下降沿&lsquo;與&rsquo;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ù)。本方案中,圖像灰度線性拉伸算法表達式為:
    
    式(1)中:Y是拉伸后輸出圖像灰度值;X是SRAM中讀出的數(shù)據(jù),為原始圖像16 bit二進制數(shù)灰度值;Xmin是輸入圖像數(shù)據(jù)直方圖統(tǒng)計最小灰度值;Xmax是輸入圖像數(shù)據(jù)直方圖統(tǒng)計最大灰度值。為保證精度,實際應(yīng)用中將上述公式進行簡單變換,可以記為:
    
    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è)計者可以進一步在FPGA內(nèi)部實現(xiàn)各種其他的圖像處理算法。這樣,直接采用FPGA和單片SRAM的方案不但減小了PCB 尺寸,降低了元件數(shù)量及PCB布線的難度,也降低了元件相互連線帶來的信號失真,從而增加了可靠性和穩(wěn)定性。本方案已成功應(yīng)用在本單位的圖像采集和處理產(chǎ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.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。