摘要:介紹一種采用單片SRAM和FPGA實現紅外圖像顯示的新方案,并對顯示系統結構、FPGA各功能模塊設計、SRAM的讀/寫時序設計進行了詳細論述。該圖像顯示方案可用于紅外圖像處理系統的硬件調試和紅外圖像處理效果觀測。實際使用情況表明,該顯示方案能夠很好地滿足紅外圖像處理系統的圖像輸出需求。
隨著紅外探測技術的發展及其在軍事、工業等領域的廣泛使用,紅外圖像處理算法獲得了廣泛研究。在實際嵌入式紅外圖像處理系統中,為了方便硬件調試和觀察圖像處理的效果,需要在系統中加入圖像顯示模塊。通常視頻數據流需要處理的數據量大,實時性要求高,所以需要高速大容量的存儲器作為圖像數據的緩存。用于圖像數據緩存的存儲器有3種:①同步動態隨機存取存儲器SDRAM(Synchronous Dynamic RAM),其容量大、速度快、體積小、價格低,但SDRAM的控制邏輯比較復雜,對時序要求也十分嚴格,需要設計專門的SDRAM控制器以完成與SDRAM芯片的接口;②雙口RAM,它可以同時對數據進行讀寫,時序簡單,操作非常方便,但是容量相對較小,而且價格高;③靜態隨機存取存儲器SRAM(Static RAM),它不僅容量大、速度快、體積小、價格低,而且時序控制簡單,但是數據不能同時讀寫,工程中多采用2片SRAM做乒乓操作來簡化讀寫控制。針對實際工程中的體積小、成本低、開發周期短等要求,本文提出一種基于單片SRAM和FPGA的圖像處理及顯示方案,并在實際工程中得到了應用。
本文的初始設計是面向幀頻為50幀/s、16bit灰度、圖像為320×256像素的紅外圖像輸出顯示,但其設計方案可以應用于不同幀頻、灰度級及圖像大小的圖像顯示。
1 系統硬件結構和工作原理
系統硬件結構圖如圖1所示。本系統中,高速串行LVDS視頻信號經Camera Link接收芯片DS90CR285接收轉化為并行TTL電平后送給FPGA,同時,其他系統的高速串行LVDS格式數據也可以直接送至FPGA。這些視頻數據經FPGA進行直方圖統計,并存儲在SRAM中。然后,FPGA在存儲間隙讀出SRAM內的有效像素數據,并采用直方圖統計的參數對圖像灰度拉伸,然后送至視頻轉換芯片ADV7123進行D/A轉換顯示。

2 各功能模塊設計
2.1 Camera Link接口
本方案選用DS90CR285將Camera Link格式的4對串行LVDS圖像信號轉換成28bit并行TTL/CMOS的數據。根據Camera Link基本協議,28bit數據信號中包括3個數據端口:A口(8bit)、B口(8bit)、C口(8bit),和4個視頻控制信號FVAL(幀有效)、DVAL(數據有效)、LVAL(行有效)、SPARE(空,暫時未用)。經過Camera Link芯片轉換后的時鐘信號是整個相機的同步驅動信號,所有的數據和視頻控制信號都和該時鐘信號同步。數據轉換后送入FPGA的時序如圖2。

2.2 FPGA核心功能模塊實現
本設計中視頻數據的處理都在FPGA內實現,其內部功能框圖見圖3。

本文主要討論在FPGA內,利用視頻數據的行場掃描間隙對單片SRAM進行讀寫操作從而完成模擬圖像的顯示功能。直方圖統計功能在另文中描述。
本系統中,視頻信號時鐘為20MHz,PAL制式信號數據時鐘采用13.5MHz。為了讓SRAM讀寫時間更加充裕,使用了兩個FIFO模塊作為數據緩沖:FIFO_IN、FIFO_OUT。FIFO_IN用來做SRAM的輸入緩沖器,FIFO_OUT用來做SRAM的輸出緩沖器。FIFO可以通過IP核來實現,存儲寬度為16bit,存儲深度設置為1.5倍行像素,本系統為1.5×320=480[1-2]。
2.2.1 FIFO_IN模塊
為保證數據讀寫效率,此模塊的讀寫方式需進行合理規劃,具體為每次往FIFO中寫一行數據,寫完后立刻從FIFO讀一行數據并寫入SRAM。像素時鐘為FIFO的寫時鐘,行有效信號作為FIFO的寫使能,FIFO讀時鐘為100 MHz,也是SRAM的讀寫時鐘,通過判斷行下降沿來生成一個320的計數器,并在計數器有效期間將FIFO讀使能置為高。FVAL的上升沿作為FIFO的復位信號。此FIFO的讀寫時序圖見圖4。

2.2.2 FIFO_OUT模塊
此模塊主要是緩沖灰度拉伸后的視頻數據用于輸出顯示。本系統要求輸出標準的PAL制式的模擬視頻,PAL制式視頻場頻為50Hz,幀頻為25Hz。本方案選用專用的圖像DA芯片ADV7123, 該芯片是一款高速的RGB D/A轉換芯片,內部集成有3路10位精度的D/A轉換器,分別用于RGB數字信號的D/A轉換,數據吞吐率可達到330MS/s,適合高分辨彩色視頻生成。ADV7123提供有3路數字輸入接口(RE9:0]、G[9:0]、B[9:0])以及CRT消隱和同步控制信號(BLANK、SYNC)。標準PAL制式的行場消隱信號和行場同步信號都是標準信號,在FPGA內很容易實現,本文不再論述。實際應用中只需要在需要顯示圖像的正確行場位置,將圖像灰度數據送入G[9:0]通道,即可在lOG端口得到復合視頻信號。同時這些正確行場位置標志信號作為FIFO的輸出使能,輸出時鐘為13.5MHz,輸入時鐘為100MHz,輸入使能為灰度拉伸模塊的輸出數據有效信號,輸入數據為灰度拉伸模塊的輸出數據。FVAL的上升沿作為FIFO的復位信號。
2.2.3 SRAM讀寫控制模塊
SRAM作為視頻數據的緩沖區,根據上述時序其容量最好能大于2幀數據,同時為了便于以后擴展,本方案中選用SRAM為CY7C1472BV33,容量為4M×18bit。由于SRAM屬于單向存儲器,利用單片SRAM作存儲的難點在于如何將讀寫控制分開。此控制包含2部分:讀寫使能和讀寫地址變換。下面分別從讀和寫來說明這2部分控制的實現。
FIFO_IN的讀使能作為SRAM的寫使能,寫地址在寫使能有效期間從SRAM的零地址依次遞增,即地址范圍為0~81919(320×256-1)。但由于本系統中視頻信號20ms一幀,PAL制式視頻顯示一幀需要奇場20ms、偶場20ms,共40 ms,所以在偶場顯示時還是在讀SRAM中0~81 919部分的數據,此時視頻信號必須寫入SRAM的另外一部分空間,這就要求在奇場和偶場時寫地址要進行切換;或者采用在奇場時數據寫入SRAM,偶場時不寫入,這樣剛好做到顯示完一幀圖像,下一幀圖像數據就可以覆蓋上一幀圖像的數據,這樣寫地址就一直是從0~81 919,不需要切換。本方案采用后者,其寫使能及寫地址的FPGA主要代碼如下:

SRAM的寫使能設計要避免與SRAM的讀使能沖突。本方案在FIFO_OUT模塊上設計了一個可編程空標志位program_empty,當fifo數據不足160個時,program_empty置高,PAL制式視頻的行掃描周期為64μs,也就是FIFO_OUT每64μs被讀一次(一次讀出320個數),這樣只要在64μs時間內能夠寫入320個數就可以保證下次行掃描能夠從FIFO_OUT取出數據。由于本系統中SRAM的寫使能周期為16.5μs,因此本方案是將SRAM讀狀態分2種情況,在FVAL信號有效期間,采用program_empty置高和SRAM的寫使能下降沿的“與”操作作為SRAM讀觸發信號;在FVAL信號無效期間,SRAM無寫控制,program_empty信號的上升沿將作為SRAM的讀觸發信號。然后根據讀觸發信號生成一個320的計數器,并在計數器有效期間將SRAM的讀使能置為高。這樣就能保證SRAM的讀寫不沖突,且數據也不會漏寫,控制時序見圖5。

PAL制式視頻顯示分為奇場和偶場,因此在奇場時,SRAM的讀地址應該滿足:第n行地址范圍為320×(n-1)~319+320×(n-1)(n=1,2……128);偶場時,RAM的讀地址應該滿足:第n行地址范圍320×n~319+320×n(n=1,2……128),其讀使能及讀地址的FPGA主要代碼如下:

2.2.4 灰度拉伸
將SRAM的讀使能和讀數據送入灰度拉伸模塊作為數據使能和輸入數據。本方案中,圖像灰度線性拉伸算法表達式為:

式(1)中:Y是拉伸后輸出圖像灰度值;X是SRAM中讀出的數據,為原始圖像16bit二進制數灰度值;Xmin是輸入圖像數據直方圖統計最小灰度值;Xmax是輸入圖像數據直方圖統計最大灰度值。為保證精度,實際應用中將上述公式進行簡單變換,可以記為:

Q值在上幀結束前直方圖統計模塊已經得到,這樣拉伸運算只需1次減法和乘法運算,得到積左移14bit后,截取低10bit就得到拉伸后的灰度值。需要注意的是,截取前要判定乘法是否溢出,如果溢出,結果置為最大灰度值210。本方案中主要通過調用乘法器IP核來完成乘法運算,不同硬件的乘法器延遲時間不同,所以必須要將輸入數據使能信號作相應延遲后,成為輸出使能與乘法器輸出數據同步[3]。經過灰度拉伸后的圖像數據送入FIFO_OUT模塊用于圖像顯示,其中,灰度拉伸模塊的輸出使能及輸出數據作為FIFO_OUT模塊的輸入使能和輸入數據。
該圖像處理方案以FPGA 作為核心控制芯片,采用單片SRAM實現了圖像預處理、數據緩存、圖像存儲及顯示的功能。隨著FPGA 性能的不斷提高及其靈活的可編程性,設計者可以進一步在FPGA內部實現各種其他的圖像處理算法。這樣,直接采用FPGA和單片SRAM的方案不但減小了PCB 尺寸,降低了元件數量及PCB布線的難度,也降低了元件相互連線帶來的信號失真,從而增加了可靠性和穩定性。本方案已成功應用在本單位的圖像采集和處理產品中。
參考文獻
[1] 田耘,胡彬,徐文波,等.Xilinx ISE Design Suite 10.x FPGA開發指南[M].北京:人民郵電出版社,2008.
[2] Xilinx Corporation.fifo_generator_ds317.http://www.xilinx.com,2005.
[3] Xilinx Corporation.Muli_gen_ds255.http://www.xilinx.com,2005.