摘要:依據(jù)標(biāo)準(zhǔn)的VGA顯示接口的顯示原理,介紹了一種利用可編程邏輯器件FPGA,并以VerilogHDL語(yǔ)言為邏輯描述工具來(lái)完成VGA接口的控制,從而實(shí)現(xiàn)簡(jiǎn)單的彩色條紋顯示的具體方法。
關(guān)鍵宇:VGA;FPGA;VerilogHDL;彩色條紋顯示
0 引言
VGA作為一種標(biāo)準(zhǔn)的顯示接口,現(xiàn)已得到了廣泛的應(yīng)用。傳統(tǒng)的VGA顯示控制主要以專門的芯片電路和通用處理器來(lái)實(shí)現(xiàn),體積大且不靈活。隨著EDA技術(shù)的發(fā)展,可編程邏輯器件有了長(zhǎng)足的發(fā)展。FPGA是現(xiàn)場(chǎng)可編程邏輯陣列器件,簡(jiǎn)化的FPGA基本由可編程輸入輸出單元、基本可編程邏輯單元、嵌入式RAM模塊、豐富的布線資源、底層嵌入式功能單元和內(nèi)嵌專用硬核等6部分組成?;贔PGA的產(chǎn)品設(shè)計(jì)具有開(kāi)發(fā)過(guò)程簡(jiǎn)單,投資小,可反復(fù)修改,周期短,易于產(chǎn)品升級(jí)等優(yōu)點(diǎn),故其應(yīng)用越來(lái)越廣泛。本文介紹了一種用FPGA實(shí)現(xiàn)VGA顯示的控制器,從而實(shí)現(xiàn)簡(jiǎn)易彩色條紋顯示,并在此基礎(chǔ)上通過(guò)外加存儲(chǔ)器模塊來(lái)完成圖像的實(shí)時(shí)處理與顯示的實(shí)現(xiàn)方法,該方法也可方便地應(yīng)用于各種嵌入式便攜系統(tǒng)中。
1 VGA的顯示原理
VGA是IBM在1987年隨PS/2機(jī)一起推出的一種視頻傳輸標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)具有分辨率高、顯示速度快、顏色豐富等優(yōu)點(diǎn)。根據(jù)分辨率不同,VGA又可分為VGA(640x480)、SVGA(800x600)、XGA(1024x768)等。VGA顯示采用逐行掃描方式。掃描是從屏幕的左上方開(kāi)始,從左到右,從上到下。每掃完一行,電子束回到左邊下一行的開(kāi)始位置,期間對(duì)電子束進(jìn)行行消隱。并在每行結(jié)束時(shí),用行同步信號(hào)對(duì)行進(jìn)行同步,掃描完所有行后,再用場(chǎng)同步信號(hào)對(duì)場(chǎng)進(jìn)行同步,并使電子束回到屏幕的左上方,同時(shí)對(duì)場(chǎng)進(jìn)行消隱,并預(yù)備下一次掃描。該方法的關(guān)鍵是對(duì)時(shí)序的控制。
1.1 VGA時(shí)序
確定VGA顯示接口時(shí)序主要應(yīng)考慮行同步信號(hào)(HSYNC)、場(chǎng)同步信號(hào)(VSYNC)、藍(lán)基色(B)、紅基色(R)、綠基色(G)這5個(gè)信號(hào),如果能從FPGA中按其時(shí)的需要求準(zhǔn)確發(fā)送這些信號(hào)到VGA接口,就可以實(shí)現(xiàn)對(duì)VGA的控制。VGA的信號(hào)時(shí)序如圖1所示,它分為行數(shù)據(jù)時(shí)序和場(chǎng)數(shù)據(jù)時(shí)序兩部分。
所謂行時(shí)序,就是顯示一行數(shù)據(jù)的時(shí)序。從圖1(a)可以看出,顯示一行數(shù)據(jù)需要的時(shí)序分四部分。產(chǎn)生行同步脈沖信號(hào)HSYNC的周期e=a+ b+c+d。其中a為同步信號(hào)時(shí)間。b為行消隱后肩時(shí)間,c為數(shù)據(jù)有效時(shí)間,d為行消隱前肩。從圖(b)可以看出,場(chǎng)同步時(shí)序與行同步時(shí)序類似,也是顯示一屏數(shù)據(jù)的時(shí)序,這里以行為單位。場(chǎng)同步脈沖信號(hào)VSYNC的周期L=h+i+j+k,其中h為同步信號(hào)時(shí)間,i為場(chǎng)消隱后肩時(shí)間,j為數(shù)據(jù)有效時(shí)間,k為場(chǎng)消隱前肩時(shí)間。
不同的分辨率下,行同步和場(chǎng)同步信號(hào)的周期是不同的,時(shí)序上的時(shí)間也不一樣。表1列出了VGA的常用分辨率參數(shù)。
本設(shè)計(jì)以640x480且刷新頻率為60Hz為例,其顯示器每秒掃描60場(chǎng),VGA在實(shí)際工作時(shí)并不是每行掃描640個(gè)點(diǎn),每場(chǎng)掃480行,由圖及表1可知,由于行消隱和場(chǎng)消隱的存在,實(shí)際是每行800個(gè)像素,每場(chǎng)525行。每行800個(gè)像素中包括行消隱前肩d(16個(gè)點(diǎn))、行同步信號(hào)a(96個(gè)點(diǎn))、行消隱后肩b(48個(gè)點(diǎn))和有效點(diǎn)數(shù)c(640個(gè))。每場(chǎng)525行中包括場(chǎng)消隱前肩k(10行)、場(chǎng)同步信號(hào)h(2行)、場(chǎng)消隱后肩i(33行)和有效行數(shù)j(480行)。所以,點(diǎn)像素的時(shí)鐘頻率為800x525x60=25.175MHz。
1.2 VGA時(shí)序控制信號(hào)的產(chǎn)生
VGA時(shí)序控制信號(hào)的產(chǎn)生包括行點(diǎn)計(jì)數(shù)器h_cnter、場(chǎng)行計(jì)數(shù)器v_enter、行同步狀態(tài)機(jī)和場(chǎng)同步狀態(tài)機(jī)。h_enter是800進(jìn)制計(jì)數(shù)器,v_ cnter是525進(jìn)制計(jì)數(shù)器。行同步狀態(tài)機(jī)有a(行同步)狀態(tài)、b(行消隱后肩)狀態(tài)、c(數(shù)據(jù)有效)狀態(tài)和d(行消隱前肩)狀態(tài),4種狀態(tài)可根據(jù)h_ enter的值進(jìn)行狀態(tài)翻轉(zhuǎn)。場(chǎng)同步狀態(tài)包括h(場(chǎng)同步)狀態(tài)、i(場(chǎng)消隱后肩)狀態(tài)、j(數(shù)據(jù)有效)狀態(tài)和k(場(chǎng)消隱前肩)狀態(tài),4種狀態(tài)也可根據(jù)v_enter的值進(jìn)行狀態(tài)轉(zhuǎn)換。其狀態(tài)轉(zhuǎn)移圖如圖2所示。
當(dāng)狀態(tài)機(jī)上電復(fù)位后,行狀態(tài)機(jī)進(jìn)入a狀態(tài),此時(shí)HSYNC輸出為低,行計(jì)數(shù)器h_enter開(kāi)始對(duì)25MHz的點(diǎn)時(shí)鐘計(jì)數(shù),當(dāng)計(jì)數(shù)到95時(shí),轉(zhuǎn)移到b狀態(tài),而當(dāng)計(jì)數(shù)到143時(shí),從b狀態(tài)轉(zhuǎn)移到c狀態(tài),當(dāng)計(jì)數(shù)到783時(shí),從c狀態(tài)轉(zhuǎn)移到d狀態(tài)。在b、c、d三狀態(tài)時(shí),HYNC輸出為高。當(dāng)狀態(tài)機(jī)上電復(fù)位后,場(chǎng)同步狀態(tài)機(jī)進(jìn)入h狀態(tài),每當(dāng)行計(jì)數(shù)器h_cater=7991時(shí)場(chǎng)行計(jì)數(shù)器v_enter加1,當(dāng)v_enter=1時(shí),狀態(tài)機(jī)從h狀態(tài)轉(zhuǎn)移到i狀態(tài),當(dāng)v_enter=34時(shí),狀態(tài)機(jī)轉(zhuǎn)移到j(luò)狀態(tài),當(dāng)v_enter=514時(shí),狀態(tài)機(jī)轉(zhuǎn)移到h狀態(tài),此時(shí)場(chǎng)同步信號(hào)VSYNCS輸出為低,其他狀態(tài)輸出為高。只有當(dāng)行同步狀態(tài)機(jī)在c狀態(tài)且場(chǎng)同步狀態(tài)機(jī)在j狀態(tài)時(shí),才能向RGB輸入數(shù)據(jù)。
2 彩色條紋的實(shí)現(xiàn)
本部分包括彩色條紋模式顯示控制、橫彩條的實(shí)現(xiàn)、豎彩條的實(shí)現(xiàn)和棋盤格實(shí)現(xiàn)等。豎彩條可根據(jù)行計(jì)數(shù)器產(chǎn)生,在640個(gè)有效數(shù)據(jù)區(qū)內(nèi),每80個(gè)產(chǎn)生一個(gè)彩條,即對(duì)其進(jìn)行8等分。橫彩條則可根據(jù)場(chǎng)計(jì)數(shù)器產(chǎn)生,在480個(gè)有效區(qū)內(nèi),每六十個(gè)產(chǎn)生一個(gè)彩條,也是8等分。棋盤格可由橫彩條數(shù)據(jù)和豎彩條數(shù)據(jù)異或而得到??赏ㄟ^(guò)撥碼開(kāi)關(guān)sw1、sw2來(lái)控制彩色條紋類型的輸出。其部分Verilog HDL代碼如下:
3 結(jié)束語(yǔ)
本設(shè)計(jì)主要通過(guò)FPGA來(lái)完成對(duì)VGA的控制。此方案簡(jiǎn)單靈活且修改方便,可以充分發(fā)揮FPGA的靈活性。另外,此設(shè)計(jì)采用參數(shù)化設(shè)計(jì),可方便的通過(guò)修改參數(shù)來(lái)滿足不同分辨率的實(shí)現(xiàn),同時(shí)在此基礎(chǔ)上,通過(guò)外加存儲(chǔ)器模塊可以完成圖像的實(shí)時(shí)處理和顯示,因而可在嵌入式方面得到廣泛的應(yīng)用。