基于FPGA的VGA顯示系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
摘要:針對(duì)VGA(視頻圖形陣列)接口顯示器的檢測(cè)需求,設(shè)計(jì)了一種基于Altera FPGA的VGA顯示系統(tǒng)。詳細(xì)介紹了VGA顯示的原理,采用硬件描述語(yǔ)言Verilog完成了VGA顯示所需的驅(qū)動(dòng)時(shí)序和圖像存儲(chǔ)相關(guān)模塊的設(shè)計(jì),并對(duì)整個(gè)系統(tǒng)進(jìn)行了綜合仿真,驗(yàn)證了設(shè)計(jì)的正確性。仿真與測(cè)試結(jié)果表明,該設(shè)計(jì)可以在簡(jiǎn)單的情況下實(shí)現(xiàn)圖像或字符顯示,節(jié)約了硬件成本,還可以滿(mǎn)足不同顯示標(biāo)準(zhǔn)的需要。
本文引用地址:http://www.ex-cimer.com/article/201603/287500.htm引言
VGA (Video Graphics Array)是IBM公司在1987年隨PS/2機(jī)一起推出的一種視頻傳輸標(biāo)準(zhǔn),具有分辨率高、顯示速率快、顏色豐富等優(yōu)點(diǎn),在顯示器領(lǐng)域得到了廣泛的應(yīng)用。隨著電子設(shè)計(jì)自動(dòng)化(EDA)技術(shù)的發(fā)展,近年來(lái)FPGA(現(xiàn)場(chǎng)可編程邏輯門(mén)陣列)在大規(guī)模嵌入式系統(tǒng)設(shè)計(jì)中得到了廣泛應(yīng)用。本文對(duì)基于FPGA的VGA顯示系統(tǒng)進(jìn)行了研究,利用了Altera Cyclone IV系列的FPGA高達(dá)上百兆的工作頻率特性為數(shù)字圖像處理提供了良好的實(shí)時(shí)性,其內(nèi)部集成的數(shù)字鎖相環(huán)為系統(tǒng)的工作時(shí)鐘提供的良好的穩(wěn)定性,其內(nèi)部嵌入的存儲(chǔ)器可以存儲(chǔ)一定容量的圖像信息,其豐富的I/O口資源可以擴(kuò)展外接大容量的顯示接口。此外,F(xiàn)PGA電路的可重構(gòu)性,為系統(tǒng)功能的優(yōu)化和升級(jí)以及功能拓展提供了很大的設(shè)計(jì)空間。因此,由FPGA完成VGA圖像的顯示和控制,較好的實(shí)現(xiàn)了圖像數(shù)據(jù)處理的實(shí)時(shí)性和可靠性,具有成本低、結(jié)構(gòu)簡(jiǎn)單、應(yīng)用靈活的優(yōu)點(diǎn),可以廣泛應(yīng)用于視頻和計(jì)算機(jī)的顯示技術(shù)領(lǐng)域。
1 VGA顯示原理
計(jì)算機(jī)顯示器的顯示有許多標(biāo)準(zhǔn),如VGA、SVGA等。VGA 作為一種標(biāo)準(zhǔn)的顯示接口得到廣泛的應(yīng)用。常見(jiàn)的彩色顯示器,一般由CRT(陰極射線管)構(gòu)成,彩色是由R、G、B(紅、綠、藍(lán))三基色組成。顯示器中的陰極射線槍通過(guò)發(fā)出電子束打在涂有熒光粉的熒光屏上,產(chǎn)生RGB三基色,合成一個(gè)彩色像素。掃描從屏幕的左上方開(kāi)始,從左到右,從上到下,進(jìn)行掃描,每掃完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對(duì)電子束進(jìn)行消隱,每行結(jié)束時(shí),用行同步信號(hào)進(jìn)行行同步;掃描完所有行,用場(chǎng)同步信號(hào)進(jìn)行場(chǎng)同步,并使掃描回到屏幕的左上方,同時(shí)進(jìn)行場(chǎng)消隱,預(yù)備下一場(chǎng)的掃描。
VGA接口電路如圖1所示,VGA采用15 pin的接口,用于顯示的接口信號(hào)主要有5個(gè):1個(gè)行同步信號(hào)(HSY);1個(gè)場(chǎng)同步信號(hào)(VSY)、以及3個(gè)顏色信號(hào)(VGA_G、VGA_R、VGA_B)。
VGA 的接口時(shí)序如圖2所示,場(chǎng)同步信號(hào)VSYNC在每幀開(kāi)始的時(shí)候產(chǎn)生一個(gè)固定寬度的低脈沖,行同步信號(hào)HSYNC在每行開(kāi)始的時(shí)候產(chǎn)生一個(gè)固定寬度的低脈沖,數(shù)據(jù)DATA在某些固定的行和列的交匯處有效。
對(duì)于VGA接口信號(hào)的時(shí)序驅(qū)動(dòng),要嚴(yán)格遵循VGA顯示工業(yè)標(biāo)準(zhǔn)。在不同分辨率下,VGA驅(qū)動(dòng)時(shí)序中的行、列同步信號(hào)的格式是完全一致的,都由同步段、后廊段、激活段和前廊段組成,只是對(duì)應(yīng)每段的高低電平的保持時(shí)間不同。本文采用刷新頻率為60Hz,分辨率為800x600的VGA顯示標(biāo)準(zhǔn),其驅(qū)動(dòng)時(shí)序表如表1所示。按照800x600x60Hz 的顯示標(biāo)準(zhǔn)時(shí)序,一個(gè)列像素掃描需要25ns,要完成一行的掃描,需要1056個(gè)列像素,也就是說(shuō)需要1056x25ns 的時(shí)間。如果要完成所有行的掃描的話(huà),需要628x1056x25ns的時(shí)間。但不是所有時(shí)間都用來(lái)VGA圖像顯示,有一部分的時(shí)間用來(lái)時(shí)序同步操作。
2 FPGA的設(shè)計(jì)與實(shí)現(xiàn)
設(shè)計(jì)采用Altera公司的Cyclone IV系列FPGA(EP4CE6F17C8)作為主控制器,該芯片具有多達(dá)16272個(gè)LE、179個(gè)用戶(hù)I/O口。器件中M9K存儲(chǔ)塊提供240 KB存儲(chǔ)容量,能夠被配置來(lái)支持多種操作模式,包括ROM、RAM、FIFO以及單口和雙口模式。器件具有3個(gè)可編程鎖相環(huán)(PLL) 和9 個(gè)全局時(shí)鐘線,能提供時(shí)鐘管理和頻率合成,實(shí)現(xiàn)最大的系統(tǒng)功能。VGA圖像顯示器是一個(gè)較大的數(shù)字系統(tǒng)。本設(shè)計(jì)采用模塊化的設(shè)計(jì)方法,遵循自頂向下的程序設(shè)計(jì)思想,進(jìn)行功能劃分并按層次設(shè)計(jì)。采用硬件描述語(yǔ)言Verilog設(shè)計(jì)了各個(gè)功能模塊并進(jìn)行仿真,使頂層VGA顯示模塊實(shí)體仿真綜合得以順利通過(guò)。VGA圖像顯示器的邏輯結(jié)構(gòu)框圖如圖3所示。根據(jù)VGA顯示的原理,VGA圖像顯示器的工作原理是:時(shí)鐘分頻模塊負(fù)責(zé)為系統(tǒng)提供驅(qū)動(dòng)的基準(zhǔn)時(shí)鐘,VGA時(shí)序發(fā)生模塊負(fù)責(zé)產(chǎn)生時(shí)序驅(qū)動(dòng)信號(hào)、行列地址信號(hào)和有效區(qū)域信號(hào),同時(shí)在正確的時(shí)序控制下,由圖像顯示控制模塊讀取圖像信息存儲(chǔ)模塊中的像素?cái)?shù)據(jù)并產(chǎn)生R、G、B三基色信號(hào)至顯示器的VGA接口,進(jìn)行圖像顯示。
2.1 時(shí)鐘分頻模塊設(shè)計(jì)
設(shè)計(jì)驅(qū)動(dòng)VGA采用800x600x60Hz顯示標(biāo)準(zhǔn),該顯示標(biāo)準(zhǔn)需要的最小單位也就是列像素所占用的時(shí)間周期為25ns。也就是說(shuō),至少需要頻率為 40MHz 的時(shí)鐘為VGA驅(qū)動(dòng)提供基準(zhǔn)時(shí)鐘,利用FPGA器件的嵌人式鎖相環(huán)(PLL)對(duì)FPGA源時(shí)鐘(頻率為50MHz)進(jìn)行倍頻(四倍頻后五分頻得到 40MHz)。PLL是FPGA的重要硬件資源,其主要的功能是對(duì)源時(shí)鐘編程、倍頻、分頻等。
2.2 VGA時(shí)序發(fā)生模塊設(shè)計(jì)
VGA時(shí)序發(fā)生模塊接口信號(hào)包括:行同步信號(hào)HSYNC Signal、場(chǎng)同步信號(hào)VSYNC Signal、有效區(qū)域信號(hào)Ready_Sig、行地址信號(hào)Column_Addr_Sig、列地址信號(hào)Row_Addr_Sig。行同步信號(hào)是根據(jù)行像素計(jì)數(shù)寄存器Count_H的計(jì)數(shù)值來(lái)產(chǎn)生,場(chǎng)同步信號(hào)產(chǎn)生是根據(jù)列像素計(jì)數(shù)寄存器Count_V的計(jì)數(shù)值來(lái)產(chǎn)生,而有效區(qū)域信號(hào)Ready_Sig用來(lái)確定串行輸出的顯示器的紅、綠、藍(lán)信號(hào)線上電平的高低。
經(jīng)過(guò)PLL分頻后的時(shí)鐘每過(guò)25ns,Count_H就會(huì)累加計(jì)數(shù),當(dāng)其計(jì)到1056個(gè)列像素時(shí),Count_V加1,Count_V最大計(jì)到628。VSYNC Signal 在同步段保持低電平,之后就會(huì)拉高輸出,同步段保持低電平的時(shí)間是掃描4個(gè)列像素的時(shí)間。而HSYNC Signal在同步段即剛開(kāi)始的128個(gè)行像素保持低電平,之后輸出高電平。有效區(qū)域信號(hào)Ready_Sig發(fā)生在HSYNC Signal和VSYNC Signal的激活段交集處,輸出為高電平有效。為了精確地控制圖像顯示在屏幕的位置,VGA時(shí)序發(fā)生模塊有義務(wù)輸出當(dāng)前的行地址信號(hào)(Column_Addr_Sig)和列地址信號(hào)(Row_Addr_Sig)。行地址的計(jì)數(shù)是發(fā)生在128個(gè)Count_H之后,而列地址計(jì)數(shù)是27個(gè)Count_V之后開(kāi)始計(jì)數(shù)。
VGA時(shí)序發(fā)生模塊sync_module.v的部分代碼如下:
module sync_module
(
input CLK, RSTn;
output VSYNC_Sig, HSYNC_Sig, Ready_Sig;
output [10:0] Column_Addr_Sig, Row_Addr_Sig;
);
………………………
…………
assign VSYNC_Sig = ( Count_V <= 11'd4 ) ? 1'b0 : 1'b1;
assign HSYNC_Sig = ( Count_H <= 11'd128 ) ? 1'b0 : 1'b1;
assign Ready_Sig = isReady;
assign Column_Addr_Sig = isReady ? Count_H - 11'd216 : 11'd0;
assign Row_Addr_Sig = isReady ? Count_V - 11'd27 : 11'd0;
endmodule
本文來(lái)源于中國(guó)科技期刊《電子產(chǎn)品世界》2016年第2期第48頁(yè),歡迎您寫(xiě)論文時(shí)引用,并注明出處。
評(píng)論