精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

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

Hx ? 來源:網絡整理 ? 作者:工程師陳翠 ? 2018-06-26 07:03 ? 次閱讀

概述

VGA是一種學習FPGA最常見的基礎實驗。雖然現在的顯示屏大多已經采用DVIHDMI方案,但其實VGA在另一個地方還有應用,那就是大屏的LCD。目前4.3寸以上的TFT基本都是VGA接口,這樣在完成一個FPGA系統設計時,選擇一個VGA接口的TFT用來顯示便是最簡單方便的方案。

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

VGA顯示驅動

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

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

或者是這樣的,增加一個電阻網絡來使可以控制的顏色更加豐富:

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

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

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

不同的分辨率和刷新率有不同的參數,這個數據可以在這個網頁中查到。進下來就進行VGA的時序驅動,我的習慣是先將關鍵性數據用parameter定義出來:

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

// 掃描參數的設定 640*480 60Hz VGA

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

parameter H_SYNC_END = 96; //行同步脈沖結束時間

parameter V_SYNC_END = 2; //列同步脈沖結束時間

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

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

parameter H_SHOW_START = 144; //顯示區行開始像素點

parameter V_SHOW_START = 35; //顯示區列開始像素點

VGA的時序驅動部分是相當固定的,只要我們使用VGA,肯定會加入下面這段代碼。主要方法是定義兩個計數器,一個管理行掃描,一個管理列掃描;當行掃描計數器掃描完行同步脈沖后置高HSYNC信號;同理,當列掃描計數器掃描完列同步脈沖后置高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需要一個時鐘來管理掃描的速度,因此這個時鐘大小就應當為掃面面積*刷新率,如上例中的640*480@60Hz的顯示方式需要的VGA時鐘大小為800*525*60=25.2MHz(掃描時不僅包括顯示區域,還有同步脈沖、顯示前沿和顯示后沿,因此整個區域要大于分辨率)。VGA時鐘可以用PLL或分頻等方法產生,通常要求不會太嚴苛,上例取整為25MHz即可。

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

assign x_pos = x_cnt - H_SHOW_START;

assign y_pos = y_cnt - V_SHOW_START;

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

VGA顯示圖形、波形、文字

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

always@(posedge clk_25M)

if (area) //坐標處于顯示分數的區域內,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 //坐標處于游戲界面的區域內

begin

lox=x_pos[3:0]; //取偏移坐標

loy=y_pos[3:0];

/* 根據當前掃描到的點是哪一部分輸出相應顏色 */

/*蘋果*/

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

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

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

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

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

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • FPGA
    +關注

    關注

    1626

    文章

    21665

    瀏覽量

    601807
  • VGA
    VGA
    +關注

    關注

    5

    文章

    532

    瀏覽量

    62825
收藏 人收藏

    評論

    相關推薦

    基于FPGA實現VGA的彩色圖片顯示

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

    利用可編程器件CPLD/FPGA實現VGA圖像控制器的設計方案

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

    基于FPGA、CPLD的嵌入式VGA顯示系統.pdf

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

    基于FPGAVGA控制器設計與實現

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

    基于Actel FPGAVGA顯示控制方案

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

    VGA圖形控制器的FPGA實現

    經過硬件平臺的驗證,基于FPGAVGA 圖形顯示器已達到設計要求,可實現彩條、漢字、小圖像和大圖像的顯示,并可實現
    發表于 06-08 09:55 ?2138次閱讀
    <b class='flag-5'>VGA</b><b class='flag-5'>圖形</b>控制器的<b class='flag-5'>FPGA</b>實現

    基于FPGAVGA圖形控制器設計

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

    基于FPGA圖形式AMLCD控制器的設計

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

    基于FPGAVGA接口實現和字符顯示

    基于FPGAVGA接口實現和字符顯示論文
    發表于 10-29 17:18 ?8次下載

    fpga_vga顯示程序

    fpga vga 顯示,介紹了如何實現vga的操作以及如何配置
    發表于 03-15 18:29 ?7次下載

    VGA顯示與基于FPGAVGA彩色圖片顯示設計

    FPGAVGA 進行控制,實現 任一彩色圖像的顯示。通過采用 FPGA 設計 VGA 接口可以將要
    發表于 11-30 14:57 ?63次下載
    <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>設計

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

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

    采用FPGAVGA圖形控制器的Verilog設計方法

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

    使用FPGA實現VGA顯示的資料詳細說明

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

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

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