零基礎學(xué)FPGA(十三)先來(lái)說(shuō)說(shuō)VGA
這個(gè)實(shí)驗其實(shí)已經(jīng)做好久了,但是一直沒(méi)有做筆記,今天就把這部分的內容補一下,有興趣的朋友可以看一下,或許對你有什么幫助,對初學(xué)者來(lái)說(shuō)還是一個(gè)不錯的實(shí)驗。
本文引用地址:http://dyxdggzs.com/article/269613.htm先來(lái)了解一下VGA吧
我們家里用的臺式電腦就是一個(gè)VGA顯示器,小墨同學(xué)為做這方面的實(shí)驗還特意買(mǎi)了一塊7寸的VGA液晶顯示器

記得當初自己也是傻得不得了,把寫(xiě)好的代碼,燒到板子里就直接連到筆記本電腦上的VGA接口上,結果什么反應也沒(méi)有,還調了一下午的程序...結果還是沒(méi)反應,到群里一問(wèn)才知道,原來(lái)筆記本電腦上的VGA接口只能做輸出而不能輸入的這跟臺式機還是不同的,后來(lái)才買(mǎi)的這塊液晶顯示器。
標準的VGA接口有15個(gè)接口,但是真正用到的只有5個(gè)接口,分別是三個(gè)色彩信號,R,G,B,場(chǎng)同步信號VSYNC,行同步信號HSYNC,時(shí)序部分要通過(guò)控制行同步信號和場(chǎng)同步信號,色彩部分要控制RGB,先來(lái)看時(shí)序部分。

對于一個(gè)分辨率為800*600的顯示器,簡(jiǎn)單的說(shuō)像素的刷新是從左到右,從上到下一行一行的刷新的,每一行要刷新的點(diǎn)成為行同步信號的幀長(cháng),有多少行稱(chēng)為場(chǎng)同步信號的幀長(cháng),從上到下刷新完一遍稱(chēng)為一幀,我們電腦上說(shuō)的屏幕刷新頻率就是說(shuō)屏幕一秒鐘能夠刷新多少幀,當達到一定的幀數,我們的肉眼也就分辨不出來(lái)了,這樣我們就看到我們的電腦屏幕,我們在操作的時(shí)候是連續的了。下面是時(shí)序表:

先來(lái)解釋一下這個(gè)表
第一行表示行同步信號的時(shí)序表,前187個(gè)計數點(diǎn)表示的在消影區,即還沒(méi)開(kāi)始進(jìn)入顯示區,從188開(kāi)始進(jìn)入顯示區,到987結束,后面的52個(gè)計數點(diǎn)又在消影區
第二行表示場(chǎng)同步信號。同理。前31個(gè)計數點(diǎn)和后56個(gè)計數點(diǎn)表示在消影區,是不顯示的,下面是我畫(huà)的一個(gè)圖幫大家理解

知道了這一點(diǎn)我們就可以開(kāi)始寫(xiě)時(shí)序部分的程序了

當行計數器計滿(mǎn)一行1039個(gè)點(diǎn)時(shí)清零,場(chǎng)計數器加1,當場(chǎng)計數器計滿(mǎn)687行時(shí),一幀結束,場(chǎng)計數器清零

當計滿(mǎn)一行時(shí),行同步信號會(huì )拉低一個(gè)120個(gè)時(shí)鐘周期的低脈沖,通俗的理解就是計滿(mǎn)一行有一個(gè)低脈沖出現,這個(gè)脈沖的長(cháng)度是120個(gè)時(shí)鐘周期,同理,計滿(mǎn)一個(gè)場(chǎng)之后會(huì )有6個(gè)場(chǎng)周期的低脈沖出現,這個(gè)低脈沖就不是時(shí)鐘周期了,是相當于場(chǎng)計數器計6行的時(shí)間
時(shí)序寫(xiě)好了之后就要確定顯示區域,根據上面那個(gè)我畫(huà)的圖,即只有在行計數器計到187到987,場(chǎng)計數器計到31到631時(shí)才是有效區域

為了好確定坐標,我們可以將坐標轉換一下,換成我們習慣的樣子,避免消影區坐標的干擾

這樣一切準備工作就做好了,剩下的就是我們自己設計想要顯示的畫(huà)面了,例如,我要在屏幕中間顯示一個(gè)矩形框,在這個(gè)矩形里面顯示一個(gè)小矩形

這個(gè)地方我剛開(kāi)始看的時(shí)候沒(méi)看懂,我再畫(huà)一個(gè)圖幫大家理解

下面顯示小矩形

畫(huà)完圖形最后顯示顏色

最后按照硬件原理圖分配好管腳,下載就可以了

下面來(lái)說(shuō)說(shuō)顯示字符
時(shí)序部分是一樣的就不多說(shuō),直接說(shuō)字符顯示部分
顯示字符當然要用到取模軟件,相信大家都用過(guò)

然后將字模進(jìn)行拼接,因為我們刷新是從左向右,從上到下刷新的,所以要把每一個(gè)字模的同一行拼接在一起,這樣每刷新一行,同時(shí)刷新三個(gè)字模的一行,從上到下刷新一邊,三個(gè)字模也就刷新出來(lái)了

這里要定義一個(gè)減法計數器,當像素點(diǎn)從某個(gè)位置從左到右開(kāi)始刷新時(shí)開(kāi)始計數,知道計數到要顯示的字模結束為止。這里我用到了32個(gè)像素點(diǎn)表示一個(gè)字模的一行,4個(gè)字模就需要128個(gè)像素點(diǎn)來(lái)表示一行,共有32列

下面是當計數到需要顯示的字模時(shí),給字加上顏色,x_dis,y_dis用來(lái)確定在哪顯示字符

下面是演示結果

fpga相關(guān)文章:fpga是什么
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理
評論