一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

FPGA基礎(chǔ)設(shè)計之VGA顯示方法(文字、圖形、波形)

Hx ? 來源:網(wǎng)絡(luò)整理 ? 作者:工程師陳翠 ? 2018-06-26 07:03 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

概述

VGA是一種學(xué)習(xí)FPGA最常見的基礎(chǔ)實驗。雖然現(xiàn)在的顯示屏大多已經(jīng)采用DVIHDMI方案,但其實VGA在另一個地方還有應(yīng)用,那就是大屏的LCD。目前4.3寸以上的TFT基本都是VGA接口,這樣在完成一個FPGA系統(tǒng)設(shè)計時,選擇一個VGA接口的TFT用來顯示便是最簡單方便的方案。

現(xiàn)在2017年全國大學(xué)生電子設(shè)計大賽還有不到一個月,熟練的使用VGA顯示各種圖形、文字、波形還是很重要的,而不是停留在只能顯示彩條的入門實驗上。這篇博文便致力于解決這個問題。

VGA顯示驅(qū)動

目前常見的電路板上的VGA接口是這樣的,單獨使用R、G、B三條線控制顏色:

FPGA基礎(chǔ)設(shè)計之VGA顯示方法(文字、圖形、波形)

或者是這樣的,增加一個電阻網(wǎng)絡(luò)來使可以控制的顏色更加豐富:

FPGA基礎(chǔ)設(shè)計之VGA顯示方法(文字、圖形、波形)

現(xiàn)在應(yīng)該很少會看到專門使用VGA驅(qū)動芯片的了。使用電阻網(wǎng)絡(luò)已經(jīng)能獲得不錯的顯示效果。FPGA需要處理的信號有行同步信號HSYNC和場同步信號VSYNC,以及R、G、B三組顏色控制信號。在驅(qū)動VGA之前,我們首先要確定自己的顯示參數(shù),分辨率及刷新率,比如800*600@60Hz的顯示方式其時序參數(shù)如下所示:

FPGA基礎(chǔ)設(shè)計之VGA顯示方法(文字、圖形、波形)

不同的分辨率和刷新率有不同的參數(shù),這個數(shù)據(jù)可以在這個網(wǎng)頁中查到。進(jìn)下來就進(jìn)行VGA的時序驅(qū)動,我的習(xí)慣是先將關(guān)鍵性數(shù)據(jù)用parameter定義出來:

//-------------------------------------------------//

// 掃描參數(shù)的設(shè)定 640*480 60Hz VGA

//-------------------------------------------------//

parameter H_SYNC_END = 96; //行同步脈沖結(jié)束時間

parameter V_SYNC_END = 2; //列同步脈沖結(jié)束時間

parameter H_SYNC_TOTAL = 800; //行掃描總像素單位

parameter V_SYNC_TOTAL = 525; //列掃描總像素單位

parameter H_SHOW_START = 144; //顯示區(qū)行開始像素點

parameter V_SHOW_START = 35; //顯示區(qū)列開始像素點

VGA的時序驅(qū)動部分是相當(dāng)固定的,只要我們使用VGA,肯定會加入下面這段代碼。主要方法是定義兩個計數(shù)器,一個管理行掃描,一個管理列掃描;當(dāng)行掃描計數(shù)器掃描完行同步脈沖后置高HSYNC信號;同理,當(dāng)列掃描計數(shù)器掃描完列同步脈沖后置高VSYNC信號。

//水平掃描

always@(posedge clk_25M or negedge RSTn)

if(!RSTn) x_cnt 《= ‘d0;

else if (x_cnt == H_SYNC_TOTAL) x_cnt 《= ’d0;

else x_cnt 《= x_cnt + 1‘b1;

//垂直掃描

always@(posedge clk_25M or negedge RSTn)

if(!RSTn) y_cnt 《= ’d0;

else if (y_cnt == V_SYNC_TOTAL) y_cnt 《= ‘d0;

else if (x_cnt == H_SYNC_TOTAL) y_cnt 《= y_cnt + 1’b1;

else y_cnt 《= y_cnt;

//H_SYNC信號

always@(posedge clk_25M or negedge RSTn)

if(!RSTn) hsync 《= ‘d0;

else if (x_cnt == ’d0) hsync 《= 1‘b0;

else if (x_cnt == H_SYNC_END) hsync 《= 1’b1;

else hsync 《= hsync;

//_SYNC信號

always@(posedge clk_25M or negedge RSTn)

if(!RSTn) vsync 《= ‘d0;

else if (y_cnt == ’d0) vsync 《= 1‘b0;

else if (y_cnt == V_SYNC_END) vsync 《= 1’b1;

else vsync 《= vsync;

由于VGA需要一個時鐘來管理掃描的速度,因此這個時鐘大小就應(yīng)當(dāng)為掃面面積*刷新率,如上例中的640*480@60Hz的顯示方式需要的VGA時鐘大小為800*525*60=25.2MHz(掃描時不僅包括顯示區(qū)域,還有同步脈沖、顯示前沿和顯示后沿,因此整個區(qū)域要大于分辨率)。VGA時鐘可以用PLL或分頻等方法產(chǎn)生,通常要求不會太嚴(yán)苛,上例取整為25MHz即可。

為了后面的顯示方便,一種實用的方法是再定義兩個寄存器,專門存儲顯示區(qū)域的坐標(biāo),即以可以顯示的第一個像素點為坐標(biāo)(0,0)。

assign x_pos = x_cnt - H_SHOW_START;

assign y_pos = y_cnt - V_SHOW_START;

這樣上例中行掃描計數(shù)器和列掃描計數(shù)器的范圍分別為800和525,而顯示區(qū)域的坐標(biāo)x_pos和y_pos范圍只有640和480。

VGA顯示圖形、波形、文字

其實在得到了顯示區(qū)域的坐標(biāo)后,我們控制顯示圖像的方法就是當(dāng)計數(shù)器掃描到指定位置后,為R、G、B三組信號賦值得到對應(yīng)的圖形。以前面寫的“FPGA綜合系統(tǒng)設(shè)計(一):貪吃蛇游戲(VGA+鍵盤)”這個工程中的顯示部分代碼為例:

always@(posedge clk_25M)

if (area) //坐標(biāo)處于顯示分?jǐn)?shù)的區(qū)域內(nèi),80*80

begin

case(pop)

0: color_out 《= data0 ? 3‘b111 : 3’b000;

1: color_out 《= data1 ? 3‘b111 : 3’b000;

2: color_out 《= data2 ? 3‘b111 : 3’b000;

3: color_out 《= data3 ? 3‘b111 : 3’b000;

4: color_out 《= data4 ? 3‘b111 : 3’b000;

5: color_out 《= data5 ? 3‘b111 : 3’b000;

6: color_out 《= data6 ? 3‘b111 : 3’b000;

7: color_out 《= data7 ? 3‘b111 : 3’b000;

8: color_out 《= data8 ? 3‘b111 : 3’b000;

9: color_out 《= data9 ? 3‘b111 : 3’b000;

10: color_out 《= data10 ? 3‘b111 : 3’b000;

11: color_out 《= data11 ? 3‘b111 : 3’b000;

12: color_out 《= data12 ? 3‘b111 : 3’b000;

default : color_out 《= 3‘b000;

endcase

end

else //坐標(biāo)處于游戲界面的區(qū)域內(nèi)

begin

lox=x_pos[3:0]; //取偏移坐標(biāo)

loy=y_pos[3:0];

/* 根據(jù)當(dāng)前掃描到的點是哪一部分輸出相應(yīng)顏色 */

/*蘋果*/

if(x_pos[9:4]==apple_x&&y_pos[9:4]==apple_y)

case({loy,lox})

8’b0000_0000:color_out=3‘b000;

default:color_out=3’b001;

endcase

/*背景*/

else if(snake==NONE)

color_out=3‘b000;

/*墻壁*/

else if(snake==WALL)

color_out=3’b101;

/*蛇頭與蛇身*/

else if(snake==HEAD|snake==BODY)

case({lox,loy})

8‘b0000_0000:color_out=3’b000;

default:color_out=(snake==HEAD)?HEAD_COLOR:BODY_COLOR;

endcase

end

看這個的設(shè)計思路,always里我把整個顯示區(qū)域劃分為if(area)和else兩個區(qū)域,area是用邏輯判斷定義好的一個80*80大小的區(qū)域,用來顯示分?jǐn)?shù);else則是顯示屏的剩下區(qū)域, 用來顯示游戲。

先看if(area)區(qū)域,我事先將各個分?jǐn)?shù)以圖片的形式存到了ROM中,所有的ROM接的是一組地址線,每個ROM又有不同的數(shù)據(jù)線。根據(jù)當(dāng)前的游戲分?jǐn)?shù),我使用case來決定選擇哪個ROM中的圖形作為當(dāng)前區(qū)域的輸出。這個設(shè)計思路用處就大了,比如顯示電壓、電流、頻率等如何讓其動態(tài)變化,這就是一種好的方法。

再來看else區(qū)域,我使用計數(shù)器位數(shù)之間的關(guān)系,來將整個屏幕劃分為幾個小格子,然后根據(jù)格子應(yīng)當(dāng)屬于哪種游戲元素來決定顯示什么顏色,這樣整個顯示區(qū)域就劃分為蘋果、墻壁、蛇頭、蛇身等各個游戲元素。

其實顯示波形的方法和else區(qū)域顯示的方法基本是一樣的。假設(shè)我要畫一段512個點長的頻譜,我就可以選擇出行計數(shù)器掃描中的512個像素點,每一個像素點作為一個頻譜點;用同樣的方法,我們把列計數(shù)器掃描的像素點按一定比例分配給不同的峰值,這樣掃描到指定點時輸出顏色,看起來就是一個完整的頻譜圖了。當(dāng)然如果覺得圖形不夠連貫,可以用更多像素點來顯示,對中間的像素點插值即可。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1645

    文章

    22049

    瀏覽量

    618379
  • VGA
    VGA
    +關(guān)注

    關(guān)注

    5

    文章

    572

    瀏覽量

    64607
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    基于FPGA實現(xiàn)VGA的彩色圖片顯示

    VGA作為一種標(biāo)準(zhǔn)顯示接口,廣泛應(yīng)用于各種智能控制的顯示終端。伴隨著電子產(chǎn)業(yè)的不斷發(fā)展,尤其是高速圖像處理的發(fā)展對可以將實時圖像進(jìn)行高速處理有了更高的要求。這里根據(jù)VGA接口的原理,通
    發(fā)表于 03-24 11:54 ?4602次閱讀
    基于<b class='flag-5'>FPGA</b>實現(xiàn)<b class='flag-5'>VGA</b>的彩色圖片<b class='flag-5'>顯示</b>

    利用可編程器件CPLD/FPGA實現(xiàn)VGA圖像控制器的設(shè)計方案

    利用可編程器件CPLD/FPGA實現(xiàn)VGA彩色顯示控制器在工業(yè)現(xiàn)場中有許多實際應(yīng)用。以硬件描述語言VHDL對可編程器件進(jìn)行功能模塊設(shè)計、仿真綜合,可實現(xiàn)VGA
    發(fā)表于 08-30 12:03 ?1332次閱讀
    利用可編程器件CPLD/<b class='flag-5'>FPGA</b>實現(xiàn)<b class='flag-5'>VGA</b>圖像控制器的設(shè)計方案

    基于FPGA、CPLD的嵌入式VGA顯示系統(tǒng).pdf

    本文介紹了基于FPGA/CPLD的嵌入式VGA顯示系統(tǒng)的設(shè)計,詳細(xì)討論了用VHDL設(shè)計行場掃描時序的方法,這種設(shè)計方法稍作改動便可產(chǎn)生任意行
    發(fā)表于 07-28 17:13 ?49次下載

    基于FPGAVGA控制器設(shè)計與實現(xiàn)

    利用FPGA 設(shè)計一個類似點陣LCD 顯示VGA 顯示控制器,可實現(xiàn)文字及簡單的圖表顯示。工作
    發(fā)表于 09-22 10:17 ?138次下載

    基于Actel FPGAVGA顯示控制方案

    VGA 是視頻圖形陣列(Video Graphics Array)的簡稱,是IBM 于1987 年提出的一個使用模擬信號的圖形顯示標(biāo)準(zhǔn)。最初的VGA
    發(fā)表于 11-15 17:40 ?79次下載

    VGA圖形控制器的FPGA實現(xiàn)

    經(jīng)過硬件平臺的驗證,基于FPGAVGA 圖形顯示器已達(dá)到設(shè)計要求,可實現(xiàn)彩條、漢字、小圖像和大圖像的顯示,并可實現(xiàn)
    發(fā)表于 06-08 09:55 ?2344次閱讀
    <b class='flag-5'>VGA</b><b class='flag-5'>圖形</b>控制器的<b class='flag-5'>FPGA</b>實現(xiàn)

    基于FPGAVGA圖形控制器設(shè)計

    VGA(視頻圖形陣列)作為一種標(biāo)準(zhǔn)的顯示接口得到廣泛的應(yīng)用。利用FPGA 芯片和EDA 設(shè)計方法,可以因地制宜,根據(jù)用戶的特定需要,設(shè)計出針
    發(fā)表于 09-23 16:31 ?4498次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>VGA</b><b class='flag-5'>圖形</b>控制器設(shè)計

    基于FPGA圖形式AMLCD控制器的設(shè)計

    本文詳細(xì)介紹了已在實際項目中應(yīng)用的基于FPGA圖形式AMLCD控制器設(shè)計,這種設(shè)計方法稍作修改即可應(yīng)用于常見VGA視頻接口電路的設(shè)計。
    發(fā)表于 12-21 10:38 ?1627次閱讀
    基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>圖形</b>式AMLCD控制器的設(shè)計

    基于FPGAVGA接口實現(xiàn)和字符顯示

    基于FPGAVGA接口實現(xiàn)和字符顯示論文
    發(fā)表于 10-29 17:18 ?8次下載

    fpga_vga顯示程序

    fpga vga 顯示,介紹了如何實現(xiàn)vga的操作以及如何配置
    發(fā)表于 03-15 18:29 ?8次下載

    VGA顯示與基于FPGAVGA彩色圖片顯示設(shè)計

    FPGAVGA 進(jìn)行控制,實現(xiàn) 任一彩色圖像的顯示。通過采用 FPGA 設(shè)計 VGA 接口可以將要
    發(fā)表于 11-30 14:57 ?64次下載
    <b class='flag-5'>VGA</b><b class='flag-5'>顯示</b>與基于<b class='flag-5'>FPGA</b>的<b class='flag-5'>VGA</b>彩色圖片<b class='flag-5'>顯示</b>設(shè)計

    vga圖像顯示_fpga控制vga顯示圖片

    本文為大家分享fpga控制vga顯示圖片的方法
    發(fā)表于 01-15 15:56 ?8130次閱讀

    采用FPGAVGA圖形控制器的Verilog設(shè)計方法

    VGA(視頻圖形陣列)作為一種標(biāo)準(zhǔn)的顯示接口得到廣泛的應(yīng)用。依據(jù)VGA顯示原理,介紹了利用FPGA
    的頭像 發(fā)表于 06-29 10:05 ?5492次閱讀
    采用<b class='flag-5'>FPGA</b>對<b class='flag-5'>VGA</b><b class='flag-5'>圖形</b>控制器的Verilog設(shè)計<b class='flag-5'>方法</b>

    使用FPGA實現(xiàn)VGA顯示的資料詳細(xì)說明

    本文介紹了一種用FPGA結(jié)合DDR SDRAM和單片機,在VGA顯示器上顯示字符、圖形信息的方法
    發(fā)表于 06-17 17:48 ?14次下載
    使用<b class='flag-5'>FPGA</b>實現(xiàn)<b class='flag-5'>VGA</b><b class='flag-5'>顯示</b>的資料詳細(xì)說明

    使用FPGA芯片和EDA設(shè)計VGA顯示器控制電路的論文說明

    VGA( 視頻圖形陣列)作為一種標(biāo)準(zhǔn)的顯示接口得到廣泛的應(yīng)用。利用FPGA芯片和EDA 設(shè)計方法,可以因地制宜,根據(jù)用戶的特定需要,設(shè)計出針
    發(fā)表于 09-01 16:02 ?20次下載
    使用<b class='flag-5'>FPGA</b>芯片和EDA設(shè)計<b class='flag-5'>VGA</b><b class='flag-5'>顯示</b>器控制電路的論文說明