【從零開(kāi)始走進(jìn)FPGA】 玩轉VGA
一、VGA的誘惑
本文引用地址:http://dyxdggzs.com/article/275552.htm首先,VGA的驅動(dòng),這事,一般的單片機是辦不到的;由于FPGA的速度,以及并行的優(yōu)勢,加上可現場(chǎng)配置的優(yōu)勢,VGA的配置,只有俺們FPGA可以勝任,也只有FPGA可以隨心所欲地配置(當然ARM也可以,應用比較高吧)。
初學(xué)者就是喜歡看炫的效果,往往會(huì )忍不住想玩。尤其玩FPGA的,沒(méi)玩VGA就感到跟單片機沒(méi)啥提升,因此VGA的驅動(dòng)也不得不講。Bingo當年也是如此。擋不住VGA的誘惑,初學(xué)者問(wèn)Bingo VGA問(wèn)題的人也是灰常的多,也許一般教科書(shū)理論太強,實(shí)際應用不是很身后,在此Bingo用淺顯易懂的語(yǔ)言來(lái)講述VGA的驅動(dòng)原理,以及通過(guò)設計一個(gè)可移植模塊的應用來(lái)講述。
二、VGA驅動(dòng)原理
此處Bingo不參考任何資料,用當年已學(xué)的知識,用淺顯易懂的語(yǔ)言講述。
1、VGA接口

最主要的幾根線(xiàn):

更詳細的資料,請看 http://baike.baidu.com/view/10346.htm
2、VGA時(shí)序
VGA其實(shí)就是相當于一塊芯片,跟單片機驅動(dòng)IC一樣,滿(mǎn)足一定的時(shí)序,便能驅動(dòng)起來(lái)。
(1)掃描軌跡
VGA的掃描其實(shí)很簡(jiǎn)單,大致軌跡如下所示:

沒(méi)掃描完一行,從新開(kāi)始下一行;每掃完一場(chǎng),重新開(kāi)始下一場(chǎng)。相信你應該看的懂。
(2)行場(chǎng)掃描
以下是行掃描,場(chǎng)掃描HS,VS時(shí)序圖

如上如所示:VGA一直在掃描,沒(méi)一場(chǎng)的掃描包括了若干行掃描,如此循環(huán)。
(3)VS時(shí)序深入分析
VS時(shí)序如下所示:

可見(jiàn)時(shí)序的循環(huán),可被劃分為a,b,c,d4個(gè)時(shí)期。這四個(gè)時(shí)期定義如下:
A~B:場(chǎng)消隱期 即同步,相當于還原掃描坐標吧
B~C:場(chǎng)消隱后肩 相當于準備開(kāi)始掃描吧
C~D:場(chǎng)顯示期 掃描中,數據有效區域
D~E:場(chǎng)消隱前肩 完成掃描,相當于準備同步
(4)HS時(shí)序深入分析
可見(jiàn)時(shí)序的循環(huán),可被劃分為a,b,c,d4個(gè)時(shí)期。這四個(gè)時(shí)期定義如下:
A~B:行消隱期 即同步,相當于還原掃描坐標吧
B~C:行消隱后肩 相當于準備開(kāi)始掃描吧
C~D:行顯示期 掃描中,數據有效區域
D~E:行消隱前肩 完成掃描,相當于準備同步

綜上描述,我們只要知道每個(gè)時(shí)期的時(shí)間,便可以表示出VGA的時(shí)序。而FPGA的工作是由固定頻率的時(shí)鐘觸發(fā)的,因此某固定時(shí)間可以用n次觸發(fā)來(lái)表示。因此我們很容易就想到了FPGA常用的計數方法:比如說(shuō)行掃描,我們計數0~H_total-1。用另一個(gè)進(jìn)程將其劃分為4個(gè)時(shí)期,安標注分配。其實(shí)這相當于狀態(tài)機。
以下是固定分辨率1024*768 60fps下HS,VS的標準:

用代碼表示4個(gè)時(shí)期,如下:
// VGA_1024_768_60fps_65MHz
// Horizontal Parameter( Pixel )
parameter H_DISP = 11'd1024,
parameter H_FRONT = 11'd24,
parameter H_SYNC = 11'd136,
parameter H_BACK = 11'd160,
parameter H_TOTAL = 11'd1344,
// Virtical Parameter( Line )
parameter V_DISP = 10'd768,
parameter V_FRONT = 10'd3,
parameter V_SYNC = 10'd6,
parameter V_BACK = 10'd29,
parameter V_TOTAL = 10'd806
3、VGA電路
(1)三原色
VGA接口:R,G,B三通道,直接賦給數字信號,RGB,最多產(chǎn)生8種色彩。這是最基本的。電路如下所示:

(2)真彩顯示
a) 電阻網(wǎng)絡(luò )
考慮到成本意識實(shí)現的簡(jiǎn)易方案,用R-2R電阻網(wǎng)絡(luò )分流模擬DAC替換ADV7123視頻轉換芯片。見(jiàn)以下幾個(gè)方案:

DE1 VGA模擬電路

小馬哥電路圖
具體設計參考Bingo當年總結:
http://www.cnblogs.com/crazybingo/archive/2010/07/31/1789323.html
或者參考小馬哥設計:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=3582675&bbs_page_no=1&search_mode=2&search_text=VGA&bbs_id=9999
b) 專(zhuān)用視頻轉換芯片
利用專(zhuān)用視頻轉換芯片,ADV7120等,將數字信號轉換為VGA RGB的模擬信號。ADV7120為高速D/A芯片,將數字信號轉換為模擬信號輸給VGA,電路如下:

三、可移植VGA模塊設計
Bingo玩VGA也算是比較早了,當年也是視覺(jué)的誘惑,以及唯FPGA獨尊的優(yōu)勢。于是之后一發(fā)而不可收拾。本章Bingo將自己這些年最終優(yōu)化的VGA驅動(dòng)模塊,發(fā)布至此。本模塊所有代碼均Bingo獨家創(chuàng )造,請尊重版權哈。
本設計已經(jīng)封裝成模塊,只要修改時(shí)序參數、掃描時(shí)鐘參數以及在vga_display.v中添加顯示電路,即可。方便移植,希望對大家有用。
1、模塊劃分

(1)vga_design.v
工程頂層文件,例化各個(gè)模塊。
(2)sys_ctrl.v
PLL時(shí)鐘分配電路。
(3)vga_display.v
顯示電路,根據時(shí)序,用于描述VGA的顯示電路。
(4)vga_driver.v
VGA驅動(dòng)電路,對時(shí)序,狀態(tài)的約束。
RTL圖如下所示:

fpga相關(guān)文章:fpga是什么
評論