基于FPGA的VGA顯示詳解(附VHDL代碼)_第1頁
基于FPGA的VGA顯示詳解(附VHDL代碼)_第2頁
基于FPGA的VGA顯示詳解(附VHDL代碼)_第3頁
基于FPGA的VGA顯示詳解(附VHDL代碼)_第4頁
基于FPGA的VGA顯示詳解(附VHDL代碼)_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、基于fpga的vga顯示(后附vhdl代碼)整個(gè)vga的時(shí)序操作很簡單,就是 形成一個(gè)具有一定占空比的電平周期。只是整個(gè)vga的操作涉及到一些專有名詞,理解上比較困難,一旦明白了這些是什么意思后,操作 即將變得很簡單。vga工作流程:常見的彩色顯示器,一般由 crt(陰極射線管)構(gòu)成,彩色是由 r、g、b (紅、綠、藍(lán)) 三基色組成,crt用逐行掃描或隔行掃描的方式實(shí)現(xiàn)圖像顯示,由vga控制模塊產(chǎn)生的水平同步信號和垂直同步信號控制陰極射線槍產(chǎn)生的電子束,打在涂有熒光粉的熒光屏上,產(chǎn)生r、g、b三基色,合成一個(gè)彩色像素。掃描從屏幕的左上方開始,由左至右,由上到下, 逐行進(jìn)行掃描,每掃完一行,電子

2、束回到屏幕下一行的起始位置,在回掃期間,crt對電子束進(jìn)行消隱,每行結(jié)束是用行同步信號hs進(jìn)行行同步;掃描完所有行,再由場同步信號vs進(jìn)行場同步,并使掃描回到屏幕的左上方,同時(shí)進(jìn)行場消隱,預(yù)備下一場的掃描。行同步信號hs和場同步信號vs是兩個(gè)重要的信號。注意點(diǎn):什么時(shí)候消隱?為什么要消隱?當(dāng)一行掃描完畢后然后電子槍又轉(zhuǎn)到下一行的這段時(shí) 間或是掃描完所有的行后電子槍回到第一行的這段時(shí)間,這兩段時(shí)間都要消隱。在消隱的時(shí)間內(nèi),數(shù)據(jù)是無效的。這樣就保證電子槍的回掃的個(gè)動作不干擾顯示,因?yàn)榛貟哌@個(gè)動作是很頻繁的,若在這個(gè)時(shí)間段內(nèi)數(shù)據(jù)有效,那么就回在顯示屏上出現(xiàn)電子槍回掃的軌跡。消隱的時(shí)候我們干什么?消隱

3、這個(gè)動作是顯示屏(crt)執(zhí)行的,我們在編程時(shí)只要注意有這么個(gè)東西就行。同步信號(包括 hs和vs)是什么?這個(gè)就相當(dāng)于一個(gè)數(shù)據(jù)起始信號,表明數(shù)據(jù)馬上 就要開始了。如果撇開具體的設(shè)備,那么這個(gè)信號和ad、da中常用的sync(同步)、cs(片選)信號相當(dāng)。該信號一般為負(fù)電平,但對于有的顯示器可不關(guān)心該信號的極性,因?yàn)樗鼉?nèi) 部可自動轉(zhuǎn)換正負(fù)邏輯。對于普通的vga顯示器,需要引出 5個(gè)信號:r,g,b:三原色;hs:行同步信號;vs:場同 步信。對于 vga顯示器的上述五個(gè)信號的時(shí)序驅(qū)動要嚴(yán)格遵循“vga工業(yè)標(biāo)準(zhǔn)",即 640x 480x 60hz模式,否則無法顯示正確地圖象。vga工業(yè)

4、標(biāo)準(zhǔn)要求的頻率:時(shí)鐘頻率:25.175mhz(像素輸出的頻率)行頻:31469hz(即行信號hs的頻率)場頻:59.94hz (即場信號 vs的頻率)(每秒圖像刷新頻率)ta:水平同步脈沖,這里為負(fù)電平,96個(gè)時(shí)鐘周期tb+tc:行消隱后沿時(shí)間,高電平,48個(gè)時(shí)鐘周期td:視頻數(shù)據(jù)有效時(shí)間,高電平,646個(gè)時(shí)鐘周期tg ;行周期時(shí)間。tg二ta+tb+tc+td+te+tf二800個(gè)時(shí)鐘周期。場掃描時(shí)序圖:grb場消隗vstd下一場圖像各個(gè)參數(shù)意義和時(shí)間長度(單位是行周期)ta :垂直同步脈沖,這里為負(fù)電平,:列消隱后沿時(shí)間,高電平,:視頻數(shù)據(jù)有效時(shí)間,高電平,+tf:列消隱前沿時(shí)間,高電平,

5、tb+tctdte2個(gè)行周期32個(gè)行周期480個(gè)行周期11個(gè)行周期tg;場視頻周期。tg二ta+tb+tc+td+te+tf二524個(gè)行周期。觀察電平情況,可以發(fā)現(xiàn)這個(gè)兩個(gè)吋序本質(zhì)上就是由一個(gè)低電平(同步信號)加一個(gè)高電平(前沿+后沿+數(shù)據(jù)有效時(shí)間)構(gòu)成。所以,編寫這個(gè)時(shí)序的時(shí)候,只要按照上述的時(shí)間 要求構(gòu)成這么一個(gè)占空比的周期就可以。當(dāng)時(shí)鐘頻率不是 25mhz時(shí),我們只要把以上的參數(shù)按比例適當(dāng)調(diào)整即可。我們給出不 同時(shí)鐘頻率下的時(shí)間參數(shù)。表1水平時(shí)序分1許速像 a步?jīng)_沿<1 效 時(shí) 間ih 沿檢k640/4806025964864016800640/480723140128640248

6、32800/60056367212880024102480(¥600604012888800401056800/6007250120614800561040表2垂頁時(shí)序分辨豐 a行h 步?jīng)_沿效時(shí)間沿恤 長644)/4*060312324801152564o/4m07226284809520別卅/6005628122600162580()/60060264236001628800/600722062360037666一vg&顯示1$制信號(hmynu. vsynu)產(chǎn)生模塊格式是800»600*60#用40n像丟期率 library ieee;use ieee scd

7、 logic 1164.all:use leeestd_logic_ar1th.all; use leeestd logic unsigned.all;entity vga isgeneric(frawlen:integer:-8);-數(shù) 為fraw丄en-1 port(clkin, reset m: in stdlogic;一時(shí)卡中'更位信號輸入 hsync9vsync:out scdlogic;vga控常信 昌 扳 中 r#g#b:out std_logic;一色彩輸出key_b: m std_logic_vector (2 dovnto 0) -後網(wǎng)幵關(guān)摘入,決定圖像的並示形式e

8、nd vga;architecture constant constant constant conacant constantbehave of vga ish_valid: integer:-800; -800; 彳亍有效時(shí)間hfpont: integer:-40; 40;行刖沿hsync: integer 廠 128; 128;行同步hoback: integer:88: 88; 1 亍后沿匸prd:integer:h_validh_fr0nt*h_sync4h_back;constant v_valid: integer : w600; 一600; 一場有 藥 時(shí)間 constant

9、v_front: integer :»1; -1;場旳沿constant v_sync: integer:-4;場同步constant v_back: integer:-23;23;-場后沿constant vprd:integer:-v frontw sync+v back+v valid;type hastate is type v state is(hs valid/hs back,hs front/hs sync):mb(vs valid/vs back,vs front,vs sync);signal haync_lner:std_loglc; signal hs stat

10、e:h stat己:h£ back; signal vs state:v state:=vs back;signal h_cnt_iner:integer range 0 to h_prd; signal v ent iner:integer range 0 to v prd;begin hsync<wh3ync mer;genhsync:process(clkin,resetin)variable t:integer range 0 to h_prd; begin if resetin-'o' then hs_state<sshs_f ront;臭位時(shí)進(jìn)

11、入耐沿 h_cnt:w0;hsync_iner<m,1'elsif risingedge(clkin) thenh_cnt:sh_cnt+l;case hs_stdtu is when hs_front=> 前沿 if 云 -cnt<(h_front) then hs_state<shs_front; hsync_iner<«1l1;elsehs_state<»hs_sync; hsync_mer<« '01開始產(chǎn)生彳亍同步低電平 end if;when hs_sync=> 行同步if cntx(h_

12、front+h-sync) then hs_state<hs_sync; hsync_iner<=:, 01;elsehs_state<shs_back; hsync_iner<s,l1; end if;when hs_back«> 后沿if c:ntx(h_front+h_sync+h-back) then hs_state<»h3_back; hsync_iner<b,l1;elsehs_state<«hs_valid; hsync_iner<=,l1;end if; *when hs_valids>

13、有效時(shí)間if e_cnt<(h_front+h_sync+h-back+hj/alid) then hs_state<«hs_valid; hsync_iner<sli1;elsehs_state<«hs_front; hsync_iner<=l1*;ent: »0; ?位計(jì)數(shù)器end if;when others=>hs_stace<«hs_front;h_cnt:-o; hsync_iner<=, i1;end case;end if;-h_cnt_tstv=h_cnt;h_cnt_iner<&#

14、187;h_cnt;end process;gen_vsync:process(resetin,hsynciner) variable v ent:integer range 0 to v prd;mb beginif resetinb*0* thenvs_s tate<-vs_f ront;-j 位時(shí)進(jìn)入前沿 v-cnt:0;vsync<s,l1;eisif fallmgedge(hsyncmer) then在下降沿去同步 v_cnt:v_cnt+l; cas皂 vs-stat色 is when vs_front3> -沿 if v_cnt<(v_front) the

15、n vssta tx=vs-front; vsync<s,l1;elsevstate< svs_sync; vsync<s,0'開始二生切同歩低電平 end if;when vs.sync” -彳同步if v_cnt<(vfr0nt+v_sync) then vs_state<»vs_sync; vsync<b,o'else vs_3tate<»vs_back; vsync<b,1'end if;when vs-back> -后沿if vcnt<(vfront+v_sync+v_back)

16、then vs_state<-vs_back;vsync<w,1*;elsevs state<=vs valid;ohb vsync<b1l1; end if;when vs_valid=>一有效時(shí)間if v_cnt<(v_front+v_sync+v_back+v_valid) then vs_state<«vs_valid;vsync<«111;elsevs_statevvs_front; vsync<=*l1; v_cnt:-0;復(fù)位計(jì)數(shù)器 end if;when others=>vs_state<&#

17、187;vs_front; v_cnt:«0; vsync<sl1*;end case;end if;一 v-cnys t"v-cnt: v_cnt_inerv_cnt;end process;lgenvideodata:process ivjntinerrhcncjnerj.keyb;158 beginiif teyrt030w then-g-or (就呈把斤鋤柿平分成幾氐 佛溯虞充不同朋包這里分3股)itcniner<kjp0ntfbjykc9xck+100 血韭社府崔也步把斛廿間eoo分嘏r 18100 1:1k81; g<s,0,;b<s,0

18、,;elsif lcm/mwrckt現(xiàn)sync%瞅k+200 thenit:ro ;g<'(t;beiyelsif h ent mer<h frckt>h sync+h back+300 then lisix,l?;y pelsif h ent imr<h frckt竊 sync+h bjlcr+490 then»miirr<a,ol:g<sir;b<-,r;elsif hcntimhfrcktsync+hjacr+soo thenlt9;g<'(t;b<do'elsif h5nt-ider<h-fr

19、ckt>hjtnc+bjack+600 then171r<b,r;g<,o,;b<°,l,;elaif h5nt-lmr<b-frckt>bjtnc+hjacr+700 then173 r< 和 l?;gd"b<='(t;174 elserr<a,r;g<«,r;b<a,l,;end if elsifthen濟(jì)(就觥菇嫻何平分成兒慶 佛段側(cè)充不同呦色這里分抵)if t.imixlfroin也削nc+b.bkk+75 then跳jt船肩步+后軌把審釧習(xí)6c0分e段)輾7517920;ged;b

20、<q;ehif vcntimhfrcktsyric+hjacr+lso then181r 一elsif vcn: imr<h frckt+e symc+b back+225 then16:r<-,0,;g<b'll;b<«,0,;elsif v-cnt-im!:<h_frckt>h-sync+hjlck+300 then185r<»»o,;g<«,ll;b<»,l,;elaif y.cmmixlfrckt%5ync+leack+375 then167r<s,l,;g<

21、;s,ol;b<s,ol;elsif v5nt-iner<h-frcktsync+hjicr+450 thenie?r<«,l,;g<«,ol;b<b,r;elsif v ent i&er<b front我 stnc+h b1cr+525 thenmobob191 r<b,r:g<,'ll;b<b,ol;192 else194end if;end if;end process;j " end behave:逐行解釋:12: 40m時(shí)鐘輸入,復(fù)位信號輸入(低電平復(fù)位)13:行同步信號和場同步信號輸

22、出14:紅、綠、藍(lán)信號輸出15:撥碼開關(guān)輸入。根據(jù)撥碼開關(guān)的狀態(tài)選擇是橫彩條還是豎彩條顯示21-25:定義一些常量,表示行同步信號的相關(guān)參數(shù),具體值可見上表27-31:定義一些常量,表示場同步信號的相關(guān)參數(shù),具體值可見上表33:自定義一種枚舉類型h.state,表示整個(gè)掃描過程中行同步信號的狀態(tài)34:自定義一種枚舉類型v_state,表示整個(gè)掃描過程中場同步信號的狀態(tài)36:定義一個(gè)行同步信號的內(nèi)部信號量37-38:分別用上述的自定義枚舉類型定義兩個(gè)信號。在程序中需要用這兩個(gè)信號分別實(shí)現(xiàn) 行同步信號和場同步信號的狀態(tài)改變。40-41:定義兩個(gè)計(jì)數(shù)器,它們分別從兩個(gè)進(jìn)程中把變量的值傳出來。46:將內(nèi)部行同步信號并行輸出到端口48-100:產(chǎn)生行同步信號。用狀態(tài)機(jī)實(shí)現(xiàn)。50:定義一個(gè)計(jì)數(shù)器52-55:系統(tǒng)復(fù)位。狀態(tài)機(jī)置為 hs_front,即下一步進(jìn)入消隱前沿;清零計(jì)數(shù)器;把行同 步信號拉高56-99:系統(tǒng)正常工作,通過狀態(tài)機(jī)產(chǎn)生行同步信號。整個(gè)狀態(tài)的流程是:行消隱前沿亠行同步脈沖-行消隱后沿-行有效數(shù)據(jù)時(shí)間-行消隱前沿,如此循環(huán)。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論