杜宗展+王振河+馮迎春
摘 要: VGA(視頻圖形陣列)是一種標(biāo)準(zhǔn)的顯示接口,被廣泛應(yīng)用。根據(jù)VGA,F(xiàn)PGA(現(xiàn)場(chǎng)可編程門陣列)的作用原理,設(shè)計(jì)的基于FPGA的VGA接口可以直接將數(shù)據(jù)送至顯示器,同時(shí)增添了關(guān)于輸出圖像灰度等級(jí)的設(shè)計(jì)。與傳統(tǒng)設(shè)計(jì)相比,該設(shè)計(jì)沒有計(jì)算機(jī)的處理過(guò)程,可節(jié)省硬件成本,加快數(shù)據(jù)處理速度,被廣泛應(yīng)用到視頻顯示領(lǐng)域。
關(guān)鍵詞: 現(xiàn)場(chǎng)可編程門陣列; 視頻圖形陣列; 顯示接口; 灰度
中圖分類號(hào): TN919?34; TP391.8 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)16?0095?05
Design of VGA image display system based on FPGA
DU Zongzhan1, WANG Zhenhe2, FENG Yingchun2
(1. School of Electrical Engineering, Shandong University, Jinan 250061, China;
2. Maintenance Company, Shandong Electric Power Group Co., Jinan 250061, China)
Abstract: As a standard display interface, VGA (video graphics array) has been widely used. According to the principles of VGA and FPGA (field programmable gate array), the designed VGA interface based on FPGA can send the data to the display directly, and grayscale of the output image was added to this design. Compared to the traditional design, there is no computer processing procedure in the design, which can save the expense of hardware and enhance the speed of data processing. It is widely used to the domain of video display.
Keywords: field programmable gate array; video graphics array; display interface; grayscale
在傳統(tǒng)的圖像處理系統(tǒng)中,要將圖像顯示出來(lái),采取的方法是先將圖像數(shù)據(jù)傳入電腦,然后經(jīng)過(guò)顯示器顯示。在這個(gè)傳輸過(guò)程中,對(duì)圖像的控制需要經(jīng)過(guò)CPU,這樣既造成資源浪費(fèi),一直通過(guò)電腦處理還會(huì)降低系統(tǒng)的靈活性[1]。利用FPGA(現(xiàn)場(chǎng)可編程門陣列)對(duì)VGA(視頻圖形陣列)顯示接口進(jìn)行設(shè)計(jì),數(shù)據(jù)不需要經(jīng)過(guò)計(jì)算機(jī),只在整個(gè)系統(tǒng)內(nèi)部傳輸。這種設(shè)計(jì)使得系統(tǒng)的組成規(guī)模和硬件設(shè)備成本減少,系統(tǒng)的穩(wěn)定性、擴(kuò)展性和可靠性得到增強(qiáng)[2?3]。VGA自從推出以來(lái),作為一種標(biāo)準(zhǔn)顯示接口在視頻、計(jì)算機(jī)等顯示器領(lǐng)域有較廣泛的應(yīng)用[4]。FPGA的特點(diǎn)是容量大、投資少、周期短、靈活性等,F(xiàn)PGA強(qiáng)大的處理功能使其在視頻領(lǐng)域得到廣泛應(yīng)用[5?8],成為硬件設(shè)計(jì)的首選方式之一[9?10]。
1 VGA概述
1.1 VGA接口定義
VGA(Video Graphic Array)視頻圖形陣列是一種顯示標(biāo)準(zhǔn)[11],VGA接口就是顯示器經(jīng)過(guò)VGA標(biāo)準(zhǔn)數(shù)據(jù)輸出的接口。VGA視頻輸出接口一共有15個(gè)管腳,如圖1所示。在VGA輸出接口的15個(gè)管腳里面,3條基本色彩線(紅、綠、藍(lán))以及水平、垂直2條控制線是其中最重要的。這5條控制線可以組成8種組合,顯示8種色彩。
圖1 VGA接口
1.2 VGA顯示原理
VGA顯示器在顯示屏幕上的彩色是由R,G,B(紅、綠、藍(lán))三個(gè)基本色組成的,陰極射線管(CRT)發(fā)出電子束,打在熒光屏上產(chǎn)生三基色。VGA圖像顯示器的顯示是通過(guò)CRT逐行掃描或隔行掃描的方式實(shí)現(xiàn)的[12?13],即輸入信號(hào)在顯示器屏幕上方開始從左到右,從上到下逐行掃描。行掃描信號(hào)HS控制從左到右掃描、場(chǎng)掃描信號(hào)VS控制從上到下的掃描。電子束在掃描完一行后會(huì)回到下一行的起始位置,CRT對(duì)電子束消隱,用行同步信號(hào)HS進(jìn)行行同步;等所有行掃描結(jié)束,場(chǎng)同步信號(hào)VS進(jìn)行場(chǎng)同步,同時(shí)進(jìn)行場(chǎng)消隱,使電子束回到屏幕左上方[14]。
1.3 VGA時(shí)序分析
計(jì)算機(jī)業(yè)界根據(jù)不同的顯示接口制定了多種顯示接口協(xié)議,VGA是其中的一種[15]。在VGA的顯示接口協(xié)議中,顯示模式的不同是因?yàn)榉直媛屎退⑿侣什煌?,因而時(shí)序也不同[16]。不同顯示模式的時(shí)序都由VGA工業(yè)標(biāo)準(zhǔn)來(lái)控制。設(shè)計(jì)VGA圖像顯示時(shí)需要注意的是時(shí)序的驅(qū)動(dòng)和VGA信號(hào)的電平驅(qū)動(dòng)[17]。時(shí)序的驅(qū)動(dòng)是設(shè)計(jì)的關(guān)鍵點(diǎn),時(shí)序若有偏差,顯示肯定會(huì)不正常,嚴(yán)重情況會(huì)損壞彩色顯示器。圖2為VGA的掃描時(shí)序圖。
圖2 VGA行(場(chǎng))掃描時(shí)序圖
水平掃描時(shí)間是指完成一行掃描所需要的時(shí)間,其倒數(shù)代表行頻率;垂直掃描時(shí)間是指完成整個(gè)屏幕掃描需要的時(shí)間,倒數(shù)為場(chǎng)頻率,即一屏刷新一次的頻率。常見的有60 Hz,75 Hz等。在本文中,時(shí)鐘頻率以700×480@59.94 Hz(60 Hz)為例,每場(chǎng)對(duì)應(yīng)著525個(gè)行周期(信號(hào)是N制式,525=10+2+480+33),其中480是圖像顯示行。每一場(chǎng)都有場(chǎng)同步信號(hào),脈沖的寬度是2個(gè)行周期的脈沖,每顯示行有860點(diǎn)時(shí)鐘,其中700點(diǎn)是有效顯示區(qū),每一行有行同步信號(hào),該脈沖寬度為96個(gè)脈沖。由此可以算出:行頻為525×59.94=31 469 Hz;需要的時(shí)鐘頻率為:525×860×59.94≈27 MHz。VGA的行時(shí)序、場(chǎng)時(shí)序分別包括4個(gè)參數(shù):顯示前沿、同步脈沖、顯示后沿和顯示有效時(shí)序段,參數(shù)值見表1。
2 VGA驅(qū)動(dòng)程序的FPGA實(shí)現(xiàn)
FPGA(Field?Programmable Gate Array)現(xiàn)場(chǎng)可編程門陣列,是整個(gè)系統(tǒng)的核心。FPGA擁有廣泛的硬件資源,功能強(qiáng)大,可重配置能力強(qiáng),保密性好,系統(tǒng)硬件規(guī)模小、投資少等特點(diǎn),是嵌入式設(shè)計(jì)的主流平臺(tái)之一[18?19],利用FPGA編程器件實(shí)現(xiàn)VGA顯示,實(shí)際應(yīng)用廣泛。系統(tǒng)組成框架圖如圖3所示。
表1 參數(shù)值
圖3 系統(tǒng)框架圖
(1) 系統(tǒng)通過(guò)CCD紅外攝像頭采集紅外圖像LVDS數(shù)據(jù)傳輸給FPGA芯片,F(xiàn)PGA內(nèi)部實(shí)現(xiàn)的功能包括:圖像采集模塊、亮度值轉(zhuǎn)換為灰度值模塊、SRAM控制模塊、VGA控制模塊。
(2) 圖像采集模塊獲取紅外圖像LVDS數(shù)據(jù),根據(jù)紅外圖像的時(shí)鐘信號(hào)及同步信號(hào)劃分出一塊存儲(chǔ)地址及一幀圖像的大小。
(3) 亮度值轉(zhuǎn)換為灰度值模塊是對(duì)紅外圖像亮度值映射到灰度值的轉(zhuǎn)換,也就說(shuō)獲得紅外圖像亮度范圍為0~65 535映射到灰度范圍0~255上。
(4) SRAM控制模塊是對(duì)外圍SRAM芯片的讀/寫操作,也就是說(shuō)通過(guò)SRAM控制模塊可以把轉(zhuǎn)換好的紅外圖像數(shù)據(jù)存儲(chǔ)到SRAM芯片,新數(shù)據(jù)來(lái)到更新SRAM芯片中數(shù)據(jù),讀信號(hào)來(lái)到讀取SRAM芯片中數(shù)據(jù),是一種乒乓讀寫操作的實(shí)現(xiàn)。
(5) VGA控制模塊實(shí)現(xiàn)了使用27 MHz時(shí)鐘輸出700×480@60 Hz VGA信號(hào),同時(shí)控制ADV7125芯片輸出到VGA顯示屏幕上。
VGA驅(qū)動(dòng)程序需要完成的任務(wù)是:行同步信號(hào)和列同步信號(hào)根據(jù)VGA時(shí)序產(chǎn)生,在有效像素期間內(nèi)將顯示顏色的數(shù)據(jù)傳輸?shù)絉GB;顯示模式和刷新頻率不同時(shí),同步信號(hào)的前、后、同步信號(hào)、有效像素?cái)?shù)也不同,需要通過(guò)像素時(shí)鐘率來(lái)進(jìn)行設(shè)置;例如表1中數(shù)據(jù),以700×480,60 Hz為例,像素時(shí)鐘為27 MHz,像素時(shí)鐘=(16+96+48+700)×(10+2+33+480)×60=27 MHz。
以下是本設(shè)計(jì)中VGA實(shí)現(xiàn)顯示的Verilog代碼:
/*
vga(700*480, 60hz)
dclk=27M hs:Horizontal vs:Vertical
every Vertical has 525 Horizontals
every Horizontal has 860 point
IDEA BY XIAYANG
*/
module vga_drive(
//vga port////////////////////////////////////////////
hs, //vga hs
vs, //vga vs
reset, //reset
clk, //vga clk input 27M
rgb_r, //vga red output[9:0]
rgb_b, //
rgb_g, //
blank, //blank=hs&&vs
vga_sync, //tvsync=0
vga_clk, //clk to ad7125 27M
//sram port////////////////////////////////////////////
sram_addr, //sram address output[17:0]
sram_data, //sram data input[15:0]
ce_n,
we_n,
lb_n,
ub_n,
oe_n
);
////////////////////////////////////////////////////////
input clk,reset;
input[15:0] sram_data;
output[17:0] sram_addr;
output hs,vs,blank,vga_sync,vga_clk,ce_n,we_n,lb_n,ub_n,oe_n;
reg vga_clk;
//output[9:0] rgb_r,rgb_g,rgb_b;
output[7:0] rgb_r,rgb_g,rgb_b;
reg hs,vs,ce_n,we_n,lb_n,ub_n,oe_n;
//reg[9:0] rgb_r,rgb_b,rgb_g;
reg[7:0] rgb_r,rgb_b,rgb_g;
reg[17:0] sram_addr;
reg[9:0] h_cnt,v_cnt;
reg[1:0] h_state;
reg[1:0] v_state;
reg flage; //control sram upper data or lower data
reg [1:0] clk_count=0;
//reg lcd_dclk;
parameter video=0,front=1,sync=2,back=3;
assign blank=hs&&vs; //blank
assign vga_sync=0; //tvsync
//assign vga_clk=lcd_dclk; //vga clk 27M
//////////////////////hs&vs(clk)///////////////////////////
always @ (posedge clk)
begin
clk_count<=clk_count+2′d1;
if(clk_count[0])
vga_clk<=1′b0;
else
vga_clk<=1′b1;
end
always@(posedge vga_clk or negedge reset)
begin
if(~reset)
begin
h_cnt<=0;
v_cnt<=0;
end
else if(h_cnt==859)
begin
h_cnt<=0;
if(v_cnt==524)
begin
v_cnt<=0;
end
else v_cnt<=v_cnt+1;
end
else h_cnt<=h_cnt+1;
end
///////////////////////h_state////////////////////////
always @ (posedge vga_clk or negedge reset)
begin
if(~reset)
begin
sram_addr<=0;
flage<=0;
end
else
begin
case(h_state)
video: //video state
begin
hs<=1;
/////////////////control display//////////////////////
we_n<=1;
ce_n<=0;
oe_n<=0;
lb_n<=0;
ub_n<=0;
if(h_cnt%2)
begin
rgb_r[7:0]<=8′b11110000;
rgb_g[7:0]<=8′b11110000;
rgb_b[7:0]<=8′b11110000;
end
else
begin
rgb_r[7:0]<=8′b11110000;
rgb_g[7:0]<=8′b11110000;
rgb_b[7:0]<=8′b11110000;
end
//////////////////////////////////////////////////////
if(h_cnt==639) h_state<=front;
else h_state<= video;
end
front: // front porch
begin
hs<=1;
rgb_r<=0;
rgb_g<=0;
rgb_b<=0;
if(h_cnt==715) h_state<=sync;
else h_state<= front;
end
sync: //sync pulse
begin
hs<=0;
rgb_r<=0;
rgb_g<=0;
rgb_b<=0;
if(h_cnt==811) h_state<=back;
else h_state<= sync;
end
back: //back porch
begin
hs<=1;
rgb_r<=0;
rgb_g<=0;
rgb_b<=0;
if(h_cnt==859) h_state<=video;
else h_state<= back;
end
default: h_state<=video;
endcase
end
end
//////////////////////v_state/////////////////////
always@(posedge vga_clk)
begin
case(v_state)
video: //video state
begin
vs<=1;
if(v_cnt==479) v_state<=front;
else v_state<= video;
end
front: //front proch
begin
vs<=1;endprint
if(v_cnt==489) v_state<=sync;
else v_state<= front;
end
sync: //sync pulse
begin
vs<=0;
if(v_cnt==491) v_state<=back;
else v_state<= sync;
end
back: //back porch
begin
vs<=1;
if(v_cnt==524) v_state<=video;
else v_state<= back;
end
default: v_state<=video;
endcase
end
endmodule
VGA時(shí)序控制模塊控制產(chǎn)生700×480的顯示范圍,另外,消隱范圍、水平同步時(shí)序信號(hào)HS以及垂直同步時(shí)序信號(hào)VS的值也受VGA時(shí)序控制模塊控制[20]。通常情況下,時(shí)序計(jì)數(shù)器是通過(guò)像素時(shí)鐘來(lái)控制水平同步時(shí)序信號(hào)HS,譯碼計(jì)數(shù)器的值產(chǎn)生HS信號(hào)。當(dāng)前像素顯示的位置由計(jì)數(shù)器在指定的某一行處產(chǎn)生。一個(gè)獨(dú)立的計(jì)數(shù)器產(chǎn)生垂直時(shí)序信號(hào)VS,垂直同步計(jì)數(shù)器在每個(gè)HS脈沖信號(hào)來(lái)臨時(shí)自動(dòng)加1,譯碼值產(chǎn)生VS信號(hào),計(jì)數(shù)器產(chǎn)生當(dāng)前顯示行。這2個(gè)計(jì)數(shù)器從地址到顯示緩沖器連續(xù)計(jì)數(shù)。
3 灰度圖像的實(shí)現(xiàn)
這里把能真實(shí)地反映自然物本來(lái)顏色的圖像稱之為真彩色圖像,真彩色圖像占用的存儲(chǔ)空間大、耗時(shí)多[21]。只含有亮度信息,而無(wú)色彩信息的圖像稱為灰度圖,例如平時(shí)生活中見到的黑白照片:照片的亮度有明暗的變化,但是沒有彩色。在顯示器上要想顯示灰度圖,需要把亮度的值進(jìn)行量化。亮度值通常包括從0~255的范圍,一共256個(gè)級(jí)別,其中0是代表最暗即全黑,255代表最亮即全白。在.bmp格式的文件中是沒有灰度圖這一概念的,但是可以通過(guò)在.bmp文件中表示出灰度圖。通過(guò)利用每一項(xiàng)的 RGB 值都是相同的256色的調(diào)色板來(lái)實(shí)現(xiàn),也就是說(shuō) RGB 值從(0,0,0),(1,1,1)一直到(255,255,255)這樣的方式。其中(0,0,0)是全黑色,(255,255,255)是全白色,中間的代表灰色。這樣,灰度圖就可以用256色圖來(lái)表示,同理灰度級(jí)別也可以用256級(jí)別來(lái)表示。本文中VGA顯示系統(tǒng)中灰度圖的研究和添加,使得顯示器不僅能顯示彩色,同時(shí)可以有不同灰度等級(jí)的圖像輸出。
4 結(jié) 語(yǔ)
本文在基于FPGA的VGA圖像顯示系統(tǒng)的研究中,通過(guò)基于FPGA進(jìn)行的設(shè)計(jì)以及VGA顯示接口的使用,使系統(tǒng)的成本大大降低,數(shù)據(jù)傳輸速度增強(qiáng)。在應(yīng)用上可以根據(jù)時(shí)鐘頻率大小設(shè)置分辨頻率大小,相比專用IP模塊減少了不必要的電路配置,增加了模塊的靈活性。另外,添加了顯示彩色圖像可以轉(zhuǎn)化為灰度圖的設(shè)計(jì),完善了輸出圖像多為彩色圖的不足,使輸出圖像的色彩變化更具選擇性。
參考文獻(xiàn)
[1] 董兵,朱齊丹,文睿.基于FPGA的VGA圖像控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].應(yīng)用科技,2006,33(10):42?45.
[2] 朱奕丹,方怡冰.基于FPGA的圖像采集與VGA顯示系統(tǒng)[J].計(jì)算機(jī)應(yīng)用,2011,31(5):1258?1264.
[3] 劉威,石彥杰,高博.基于FPGA的VGA顯示模式和像素頻率的識(shí)別[J].電子工程師,2008,34(1):50?52.
[4] 蔣艷紅.基于FPGA的VGA圖像信號(hào)發(fā)生器設(shè)計(jì)[J].電子測(cè)量技術(shù),2008,31(3):78?81.
[5] 楊欽,周云飛,胡永兵.基于FPGA的視頻圖像采集與顯示系統(tǒng)設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2013,34(6):1988?1992.
[6] 邵忠俊,程光偉.基于FPGA的視頻采集與顯示模塊設(shè)計(jì)[J].電子元器件應(yīng)用,2010,12(12):24?25.
[7] 劉文英.基于FPGA的視頻圖像預(yù)處理系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].天津:天津師范大學(xué),2010.
[8] 祝長(zhǎng)鋒,肖鐵軍.基于FPGA的視頻圖像采集系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(17):4404?4407.
[9] 張亞平,賀占莊.基于FPGA的VGA顯示模塊設(shè)計(jì)[J].計(jì)算機(jī)技術(shù)與發(fā)展,2007,17(6):242?245.
[10] 鄭爭(zhēng)兵.基于FPGA的VGA波形顯示系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].液晶與顯示,2014,29(1):88?93.
[11] 周卓然,徐道連,呂鳳飛,等.基于FPGA的VGA圖像顯示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].儀表技術(shù)與傳感器,2012(7):90?92.
[12] 袁堂青,張玉璘.基于FPGA的VGA漢字顯示系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].濟(jì)南大學(xué)學(xué)報(bào):自然科學(xué)版,2011,25(1):37?38.
[13] 熊文彬,蔣泉,曲建軍,等.基于FPGA實(shí)現(xiàn)的視頻顯示系統(tǒng)[J].液晶與顯示,2011,26(1):92?93.
[14] 陳姚節(jié),盧建華.基于FPGA的VGA顯示接口的研究與設(shè)計(jì)[J].交通與計(jì)算機(jī),2005,23(2):47?49.
[15] Video Electronics Standards Association. VESA and industry standards and guidelines for computer display monitor timing (DMT) [S]. San Jose, USA: VESA, 1998.
[16] 朱文偉,許忠仁.基于FPGA的VGA圖像控制器的設(shè)計(jì)與實(shí)現(xiàn)[J].貴州大學(xué)學(xué)報(bào):自然科學(xué)版,2009,26(2):109?111.
[17] 劉樂善.微型計(jì)算機(jī)接口技術(shù)及應(yīng)用[M].武漢:華中科技大學(xué)出版社,1999.
[18] 鄭爭(zhēng)兵.一種基于FPGA的UART電路設(shè)計(jì)[J].國(guó)外電子測(cè)量技術(shù),2010,29(7):85?87.
[19] 鄭爭(zhēng)兵.基于DSP Builder的FIR數(shù)字濾波器設(shè)計(jì)與驗(yàn)證[J].陜西理工學(xué)院學(xué)報(bào):自然科學(xué)版,2013,29(2):34?38.
[20] 郭永彩,蘇渝維,高潮.基于FPGA的紅外圖像實(shí)時(shí)采集系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].儀器儀表學(xué)報(bào),2011,32(3):514?519.
[21] 周雪芹,劉曉紅.利用VC實(shí)現(xiàn)真彩色位圖到灰度圖的轉(zhuǎn)換[J].模式識(shí)別與仿真技術(shù),2005,24(3):25?27.endprint