色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    文章

    21769

    瀏覽量

    604628
  • VGA
    VGA
    +關注

    關注

    5

    文章

    536

    瀏覽量

    63052

原文標題:源碼系列:基于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 ?2831次閱讀
    基于叁芯智能科技的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次下載
    主站蜘蛛池模板: 亚洲综合日韩中文字幕v在线| 中文字幕亚洲无限码| 伊人久久影院大香线蕉| 国产乱码精品一区二区三区四川| 日本高清二区| 超碰在线视频caoporn| qvod 在线电影| 在线高清视频不卡无码| 国产午夜在线观看视频| 午夜4k最新福利| 国产毛片视频网站| 无人影院在线播放| 国产精品福利电影| 小夫妻天天恶战| 韩国成人理伦片免费播放| 夜蒲团之5阳性之教| 久久精品国产亚洲AV未满十八| 亚洲无吗在线视频| 久久热在线视频精品1| 最近免费中文MV在线字幕| 伦理片qvod| QVOD在线播放| 熟妇久久无码人妻AV蜜桃| 国产人妻精品无码AV在线五十路| 亚洲黄色在线| 久久午夜夜伦鲁鲁片无码免费| 99久久爱re热6在线播放| 日日夜夜影院在线播放| 国产精品久久人妻无码网站一区L| 亚洲精品不卡视频| 麻豆AV无码精品一区二区| YIN荡的老师系列第6部分视频| 色吧.com| 花蝴蝶高清影视视频在线播放| 一个人HD在线观看免费高清视频 | 精品免费久久久久久影院| 樱花草动漫www| 日本不卡免免费观看| 国产色偷偷男人的天堂| 2022精品福利在线小视频| 日本69xxxxx|