在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

基于FPGA的VGA驅動設計(附源工程)

FPGA技術江湖 ? 來源:FPGA技術江湖 ? 2025-01-14 11:31 ? 次閱讀

設計背景

VGA (Video Graphics Array) 即視頻圖形陣列,是IBM于1987年隨PS/2機(PersonalSystem 2)一起推出的使用模擬信號的一種視頻傳輸標準。這個標準對于現今的個人電腦市場已經十分過時。但在當時具有分辨率高、顯示速率快、顏色豐富等優點,在彩色顯示器領域取得了廣泛的應用,是眾多制造商所共同支持的一個低標準。

設計原理

VGA的實體圖與接口示意圖,如下圖所示,它有15個針孔:

380c9a24-d144-11ef-9310-92fbcf53809c.png

3822736c-d144-11ef-9310-92fbcf53809c.png

在本次設計使用的開發板中,VGA的電路原理圖如下圖所示:

3839ca4e-d144-11ef-9310-92fbcf53809c.png

通過原理圖,我們不難發現,VGA需要我們控制的接口只有5個:

384b9ae4-d144-11ef-9310-92fbcf53809c.png

顯示器的掃描規律是什么?本設計采用逐行掃描,逐行掃描是掃描從屏幕左上角一點開始,從左向右逐點掃描,每掃描完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對電子束進行消隱,每行結束時,用行同步信號進行行同步;當掃描完所有的行,形成一幀,用場同步信號進行場同步,并使掃描回到屏幕左上方,同時進行場消隱,開始下一幀。通過這種掃描規律,很容易看出,在設計兩個有效范圍計數器時,場同步信號計數器是以行同步信號計數器為周期的。

VGA的顯示標準如下表所示:

38578e62-d144-11ef-9310-92fbcf53809c.png

對于普通的VGA顯示器都要嚴格遵循“VGA工業標準”,否則可能會損害VGA顯示器,因此我們在設計時VGA控制器時,都需要參考顯示器的顯示標準,下面是VGA的行掃描時序與場掃描時序:

行掃描時序:

38690b60-d144-11ef-9310-92fbcf53809c.png

場掃描時序:

3878a5b6-d144-11ef-9310-92fbcf53809c.png

根據上述顯示器的掃描參數以及掃描時序,例如800*600@60的顯示模式,60指得是顯示器圖像的刷新頻率,時鐘40MHz指得是一個像素輸出的頻率。800*600為VGA的分辨率,指有效顯示區域為時序中的c段只有800*600,也就是行計數在[216,1016],列計數在[27,627],在這個范圍內,給RGB色值才會有效。

在VGA 工業標準顯示模式要求:行同步、場同步都為負極性,即同步脈沖要求是負脈沖。行同步信號上電拉高,在行同步計數為0時拉低a個時鐘周期,即128,之后拉高,在行同步計數到1055時,行同步計數器清零,場同步計數器加1。在行掃描時序中,掃描計數時,周期就是一個像素點的時間。

場同步信號上電拉高,在場同步計數為0時拉低場同步a個時鐘周期,即4,之后拉高,在場同步計數到627時,場同步計數器清零。

在VGA控制器中,還需要控制三個接口,即三種基色(R、G、B),它們共專用8位,分別是Red為3位,Green為3位,Blue為3位,所以可以顯示256種顏色,RGB數據的格式如下表所示:

388275a0-d144-11ef-9310-92fbcf53809c.png

設計框架

本設計選擇的VGA顯示標準為800*600@60,實現點亮整個屏幕,并顯示為全紅。通過分析設計的功能,可以得到如下的頂層架構:

38a32796-d144-11ef-9310-92fbcf53809c.png

頂層模塊端口列表如下:

38bc011c-d144-11ef-9310-92fbcf53809c.png

vga_pll模塊是為了滿足分辨率800*600@60的時鐘為40MHz,而ZX_1開發板的系統時鐘為50MHz,通過鎖相環,將50MHz轉化為40MHz。vga_control模塊是為了設定行場同步信號,并標定出有效顯示區域,并輸出控制顏色的po_rgb信號。為了便于移植,根據800*600@60分辨率下的參數,對其進行參數化定義。

設計代碼

頂層模塊vga_display_pure代碼:

module vga_display_pure (pi_clk, pi_rst_n, po_hs, po_vs, po_rgb);
  
  input pi_clk, pi_rst_n; //系統時鐘復位
  output po_vs;  //VGA場同步信號
  output po_hs;  //VGA行同步信號
  output [7:0] po_rgb;  //VGA場紅綠藍三基色
  
  //----------------VGA時序-----------------------------------
  //    顯示模式      時鐘     
  //    800*600@60  40MHz  
  //行/場  同步(a)  消隱后沿(b)  有效顯示(c)  消隱前沿(d)  掃描時間(e)
  //hs    128    88        800      40        1056
  //vs    4      23        600      1        628  
  
  wire vga_clk;
  
  vga_pll vga_pll_dut(
    .areset(~pi_rst_n),
    .inclk0(pi_clk),
    .c0(vga_clk)
  );
  
  vga_control vga_control_dut(
    .pi_clk(vga_clk), 
    .pi_rst_n(pi_rst_n), 
    .po_hs(po_hs),
    .po_vs(po_vs),
    .po_rgb(po_rgb)
  );
  
endmodule

VGA控制器vga_control 模塊代碼:

module vga_control (pi_clk, pi_rst_n, po_hs, po_vs, po_rgb);
  
  input pi_clk, pi_rst_n; //系統時鐘復位
  output reg po_vs;  //VGA場同步信號
  output reg po_hs;  //VGA行同步信號
  output [7:0] po_rgb;  //VGA場紅綠藍三基色
  
  //----------------VGA時序-----------------------------------
  //    顯示模式      時鐘     
  //    800*600@60  40MHz  
  //行/場  同步(a)  消隱后沿(b)  有效顯示(c)  消隱前沿(d)  掃描時間(e)
  //hs    128    88        800      40        1056
  //vs    4      23        600      1        628  
  
  //  行(Horizontal)掃描  Parameter (像素)
  parameter  H_A  =  128;
  parameter  H_B  =  80;
  parameter  H_C  =  800;
  parameter  H_D  =  40;
  parameter  H_E   =  1056;
  
  
  //  場(Vertical)掃描  Parameter (行數)
  parameter  V_A  =  4;
  parameter  V_B  =  23;
  parameter  V_C  =  600;
  parameter  V_D  =  1;
  parameter  V_E  =  628;
  
  //行掃描計數器, 
  reg [10:0] hcnt;
  
  always @ (posedge pi_clk or negedge pi_rst_n)
  begin
    if (!pi_rst_n)
      hcnt <= 11'd0;
    else
      begin
        if (hcnt == (H_E - 1'b1)) //掃描完一行像素
          hcnt <= 11'd0;
        else
          hcnt <= hcnt + 1'b1;
      end 
  end 
  
  //場掃描計數器
  reg [10:0] vcnt;  
  
  always @ (posedge pi_clk or negedge pi_rst_n)
  begin
    if (!pi_rst_n)
      vcnt <= 11'd0;
    else if (vcnt == (V_E - 1'b1)) 
      vcnt <= 11'd0;
    else if (hcnt == (H_E - 1'b1))
      vcnt <= vcnt + 1;
  end   


  //行同步輸出
  always @ (posedge pi_clk or negedge pi_rst_n)
  begin
    if (!pi_rst_n)
      po_hs <= 1'b1;
    else if (hcnt < H_A)
      po_hs <= 1'b0;
    else
      po_hs <= 1'b1;
  end 
  
  //assign po_hs = (hcnt <= H_A - 1'b1) ? 1'b0 : 1'b1;
  
  //場同步輸出
  always @ (posedge pi_clk or negedge pi_rst_n)
  begin
    if (!pi_rst_n)
      po_vs <= 1'b1;
    else if (vcnt < V_A)
      po_vs <= 1'b0;
    else
      po_vs <= 1'b1;
  end 
  
  //assign po_vs = (vcnt <= V_A - 1'b1) ? 1'b0 : 1'b1;
  
  wire rgb_en;
  
  assign rgb_en = (hcnt >= H_A + H_B  && hcnt < H_A + H_B + H_C) && 
            (vcnt >= V_A + V_B  && vcnt < V_A + V_B + V_C) ? 1'b1 : 1'b0;
  
  assign po_rgb = rgb_en ? 8'b111_000_00 : 8'b0000_0000;
  
endmodule 

通過編譯后生成的RTL視圖如下:

38d27730-d144-11ef-9310-92fbcf53809c.png

仿真測試

為了驗證本設計的邏輯正確性,我們先對其進行了仿真,在仿真時,為了減少仿真的時間,先將行、場掃描的對應參數,進行了縮放,這樣不僅節約了仿真時間,同時由于掃描數據量變少,更加便于分析觀察。其仿真代碼所示:

`timescale 1ns/1ps  //仿真時間精度時間單位


module vga_display_pure_tb;
  
  reg pi_clk, pi_rst_n; //系統時鐘復位
  wire  po_vs;  //VGA場同步信號
  wire  po_hs;  //VGA行同步信號
  wire  [7:0] po_rgb;  //VGA場紅綠藍三基色
  
  //初始化數據,并附相應初值
  initial begin
    pi_clk = 0;
    pi_rst_n = 0;  
    #200.1 pi_rst_n = 1;  
  end 


  vga_display_pure vga_display_pure_inst (
    .pi_clk(pi_clk), 
    .pi_rst_n(pi_rst_n), 
    .po_hs(po_hs), 
    .po_vs(po_vs),
    .po_rgb(po_rgb)
  );
  
  always #10 pi_clk = ~pi_clk;  //50MHz時鐘描述


endmodule

仿真圖:

38f5382e-d144-11ef-9310-92fbcf53809c.png

rgb_en信號,只有當po_vs和po_hs同時為高電平時,才有效,并且有po_rgb Red基色信號輸出,時序仿真細節圖如下所示:

3911e226-d144-11ef-9310-92fbcf53809c.png

通過觀察和分析時序圖,可以發現與設計吻合,接下來則可進行管腳分配,并下板驗證,驗證結果如下:

3922c258-d144-11ef-9310-92fbcf53809c.png

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

    關注

    1630

    文章

    21766

    瀏覽量

    604598
  • VGA
    VGA
    +關注

    關注

    5

    文章

    536

    瀏覽量

    63051

原文標題:源碼系列:基于FPGA的VGA驅動設計(附源工程)

文章出處:【微信號:HXSLH1010101010,微信公眾號:FPGA技術江湖】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA實戰演練邏輯篇55:VGA驅動接口時序設計之2同步接口

    VGA驅動接口時序設計之2同步接口本文節選自特權同學的圖書《FPGA設計實戰演練(邏輯篇)》配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 好,有了
    發表于 07-29 11:19

    Xilinx FPGA入門連載68:VGA驅動ColorBar顯示

    `Xilinx FPGA入門連載68:VGA驅動ColorBar顯示特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAhEm 1 功能簡介如圖所示
    發表于 04-11 09:51

    例說FPGA連載28:VGA顯示驅動子板設計

    ``例說FPGA連載28:VGA顯示驅動子板設計特權同學,版權所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1c0nf6Qc SF-VGA板載用于
    發表于 09-05 18:46

    FPGA驅動VGA顯示不正常

    小生最近在嘗試著做VGA驅動,遇到了一個小問題請教下大家。我在工程中用assign把VGA的行列掃描信號復制了一份,連接到自定義的IO口,然后用IO口的HS/VS取代原來
    發表于 12-19 10:34

    FPGA零基礎學習:VGA協議驅動設計

    不多說,上貨。VGA協議驅動設計本篇實現基于叁芯智能科技的SANXIN -B01 FPGA開發板,以下為配套的教程,如有入手開發板,可以登錄官方淘寶店購買,還有配套的學習視頻。叁芯智能科技 F
    發表于 03-22 16:51

    基于 FPGA Vivado 信號發生器設計(工程

    、書籍、源碼、技術文檔…(2023.07.09更新) 本篇掌握基于 FPGA Vivado 信號發生器設計(工程),掌握基于添加文件和IP的Vivado
    發表于 08-15 19:57

    基于 FPGA Vivado 示波器設計(工程

    今天給大俠帶來基于 FPGA Vivado 示波器設計,開發板實現使用的是Digilent basys 3,話不多說,上貨。 需要工程可以在以下資料獲取里獲取。 資料匯總|FPGA
    發表于 08-17 19:31

    基于 FPGA Vivado 的數字鐘設計(工程

    今天給大俠帶來基于 FPGA Vivado 的數字鐘設計,開發板實現使用的是Digilent basys 3。話不多說,上貨。 需要工程可以在以下資料獲取里獲取。 資料匯總|FPGA
    發表于 08-18 21:18

    fpga_vga顯示程序

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

    VGA顯示IP核(包括驅動

    Xilinx FPGA工程例子源碼:VGA顯示IP核(包括驅動
    發表于 06-07 14:54 ?18次下載

    基于XILINX的XC3系列FPGAVGA控制器的VHDL

    Xilinx FPGA工程例子源碼:基于XILINX的XC3系列FPGAVGA控制器的VHDL源程序
    發表于 06-07 15:07 ?12次下載

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

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

    基于叁芯智能科技的SANXIN -B01 FPGA開發板的VGA協議驅動設計

    VGA協議驅動設計 作者:郝旭帥校對:陸輝 本篇實現基于叁芯智能科技的SANXIN -B01 FPGA開發板,以下為配套的教程,如有入手開發板,可以登錄官方淘寶店購買,還有配套的學習視頻
    的頭像 發表于 09-28 11:49 ?2830次閱讀
    基于叁芯智能科技的SANXIN -B01 <b class='flag-5'>FPGA</b>開發板的<b class='flag-5'>VGA</b>協議<b class='flag-5'>驅動</b>設計

    使用FPGA CPLD的VGA顯示8種顏色的程序和工程文件

    本文檔的主要內容詳細介紹的是使用FPGA CPLD的VGA顯示8種顏色的程序和工程文件免費下載。
    發表于 10-30 17:02 ?8次下載
    使用<b class='flag-5'>FPGA</b> CPLD的<b class='flag-5'>VGA</b>顯示8種顏色的程序和<b class='flag-5'>工程</b>文件

    使用FPGA的的Uart發送圖像數據到VGA顯示的工程文件免費下載

    本文檔的主要內容詳細介紹的是使用FPGA的的Uart發送圖像數據到VGA顯示的工程文件免費下載。
    發表于 01-19 15:53 ?7次下載
    主站蜘蛛池模板: 深夜动态福利gif进出粗暴| 免费网站啪啪大全| 亚洲午夜精品久久久久久人妖| 成人在线免费网站| 艹逼视频免费| 新版天堂8在线天堂| 五月天毛片| 欧美午夜网| 亚洲小便| 亚欧毛片基地国产毛片基地| 亚洲免费二区三区| 国产免费高清在线精品一区| 亚洲免费色| 色一区二区| 久久精品乱子伦观看| www.激情五月.com| 天天爽夜夜爽人人爽| 狠狠干在线观看| xxxxx日本69| 国产精品爱久久久久久久三级| 亚洲淫视频| 日本黄色一级大片| 国产一区二区三区在线观看视频 | 国产热视频| 完整日本特级毛片| 日本黄色片在线观看| 黄色日本网站| 亚洲 欧美 自拍 另类 欧美| 国产亚洲网站| 日本免费视频| 四虎精品永久在线| 久青草国产在线视频_久青草免 | 色猫av| 久久精品久噜噜噜久久| 亚洲午夜网| 波多野结衣三个女人蕾丝边| 欧美性色黄大片四虎影视| 天天看影院| 国模在线观看| 日日天天干| 午夜视频在线网站|