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

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

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

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

基于FPGA的VGA驅(qū)動(dòng)設(shè)計(jì)(附源工程)

FPGA技術(shù)江湖 ? 來(lái)源:FPGA技術(shù)江湖 ? 2025-01-14 11:31 ? 次閱讀

設(shè)計(jì)背景

VGA (Video Graphics Array) 即視頻圖形陣列,是IBM于1987年隨PS/2機(jī)(PersonalSystem 2)一起推出的使用模擬信號(hào)的一種視頻傳輸標(biāo)準(zhǔn)。這個(gè)標(biāo)準(zhǔn)對(duì)于現(xiàn)今的個(gè)人電腦市場(chǎng)已經(jīng)十分過(guò)時(shí)。但在當(dāng)時(shí)具有分辨率高、顯示速率快、顏色豐富等優(yōu)點(diǎn),在彩色顯示器領(lǐng)域取得了廣泛的應(yīng)用,是眾多制造商所共同支持的一個(gè)低標(biāo)準(zhǔn)。

設(shè)計(jì)原理

VGA的實(shí)體圖與接口示意圖,如下圖所示,它有15個(gè)針孔:

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

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

在本次設(shè)計(jì)使用的開(kāi)發(fā)板中,VGA的電路原理圖如下圖所示:

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

通過(guò)原理圖,我們不難發(fā)現(xiàn),VGA需要我們控制的接口只有5個(gè):

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

顯示器的掃描規(guī)律是什么?本設(shè)計(jì)采用逐行掃描,逐行掃描是掃描從屏幕左上角一點(diǎn)開(kāi)始,從左向右逐點(diǎn)掃描,每掃描完一行,電子束回到屏幕的左邊下一行的起始位置,在這期間,CRT對(duì)電子束進(jìn)行消隱,每行結(jié)束時(shí),用行同步信號(hào)進(jìn)行行同步;當(dāng)掃描完所有的行,形成一幀,用場(chǎng)同步信號(hào)進(jìn)行場(chǎng)同步,并使掃描回到屏幕左上方,同時(shí)進(jìn)行場(chǎng)消隱,開(kāi)始下一幀。通過(guò)這種掃描規(guī)律,很容易看出,在設(shè)計(jì)兩個(gè)有效范圍計(jì)數(shù)器時(shí),場(chǎng)同步信號(hào)計(jì)數(shù)器是以行同步信號(hào)計(jì)數(shù)器為周期的。

VGA的顯示標(biāo)準(zhǔn)如下表所示:

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

對(duì)于普通的VGA顯示器都要嚴(yán)格遵循“VGA工業(yè)標(biāo)準(zhǔn)”,否則可能會(huì)損害VGA顯示器,因此我們?cè)谠O(shè)計(jì)時(shí)VGA控制器時(shí),都需要參考顯示器的顯示標(biāo)準(zhǔn),下面是VGA的行掃描時(shí)序與場(chǎng)掃描時(shí)序:

行掃描時(shí)序:

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

場(chǎng)掃描時(shí)序:

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

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

在VGA 工業(yè)標(biāo)準(zhǔn)顯示模式要求:行同步、場(chǎng)同步都為負(fù)極性,即同步脈沖要求是負(fù)脈沖。行同步信號(hào)上電拉高,在行同步計(jì)數(shù)為0時(shí)拉低a個(gè)時(shí)鐘周期,即128,之后拉高,在行同步計(jì)數(shù)到1055時(shí),行同步計(jì)數(shù)器清零,場(chǎng)同步計(jì)數(shù)器加1。在行掃描時(shí)序中,掃描計(jì)數(shù)時(shí),周期就是一個(gè)像素點(diǎn)的時(shí)間。

場(chǎng)同步信號(hào)上電拉高,在場(chǎng)同步計(jì)數(shù)為0時(shí)拉低場(chǎng)同步a個(gè)時(shí)鐘周期,即4,之后拉高,在場(chǎng)同步計(jì)數(shù)到627時(shí),場(chǎng)同步計(jì)數(shù)器清零。

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

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

設(shè)計(jì)框架

本設(shè)計(jì)選擇的VGA顯示標(biāo)準(zhǔn)為800*600@60,實(shí)現(xiàn)點(diǎn)亮整個(gè)屏幕,并顯示為全紅。通過(guò)分析設(shè)計(jì)的功能,可以得到如下的頂層架構(gòu):

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

頂層模塊端口列表如下:

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

vga_pll模塊是為了滿足分辨率800*600@60的時(shí)鐘為40MHz,而ZX_1開(kāi)發(fā)板的系統(tǒng)時(shí)鐘為50MHz,通過(guò)鎖相環(huán),將50MHz轉(zhuǎn)化為40MHz。vga_control模塊是為了設(shè)定行場(chǎng)同步信號(hào),并標(biāo)定出有效顯示區(qū)域,并輸出控制顏色的po_rgb信號(hào)。為了便于移植,根據(jù)800*600@60分辨率下的參數(shù),對(duì)其進(jìn)行參數(shù)化定義。

設(shè)計(jì)代碼

頂層模塊vga_display_pure代碼:

module vga_display_pure (pi_clk, pi_rst_n, po_hs, po_vs, po_rgb);
  
  input pi_clk, pi_rst_n; //系統(tǒng)時(shí)鐘復(fù)位
  output po_vs;  //VGA場(chǎng)同步信號(hào)
  output po_hs;  //VGA行同步信號(hào)
  output [7:0] po_rgb;  //VGA場(chǎng)紅綠藍(lán)三基色
  
  //----------------VGA時(shí)序-----------------------------------
  //    顯示模式      時(shí)鐘     
  //    800*600@60  40MHz  
  //行/場(chǎng)  同步(a)  消隱后沿(b)  有效顯示(c)  消隱前沿(d)  掃描時(shí)間(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; //系統(tǒng)時(shí)鐘復(fù)位
  output reg po_vs;  //VGA場(chǎng)同步信號(hào)
  output reg po_hs;  //VGA行同步信號(hào)
  output [7:0] po_rgb;  //VGA場(chǎng)紅綠藍(lán)三基色
  
  //----------------VGA時(shí)序-----------------------------------
  //    顯示模式      時(shí)鐘     
  //    800*600@60  40MHz  
  //行/場(chǎng)  同步(a)  消隱后沿(b)  有效顯示(c)  消隱前沿(d)  掃描時(shí)間(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;
  
  
  //  場(chǎng)(Vertical)掃描  Parameter (行數(shù))
  parameter  V_A  =  4;
  parameter  V_B  =  23;
  parameter  V_C  =  600;
  parameter  V_D  =  1;
  parameter  V_E  =  628;
  
  //行掃描計(jì)數(shù)器, 
  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 
  
  //場(chǎng)掃描計(jì)數(shù)器
  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;
  
  //場(chǎng)同步輸出
  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 

通過(guò)編譯后生成的RTL視圖如下:

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

仿真測(cè)試

為了驗(yàn)證本設(shè)計(jì)的邏輯正確性,我們先對(duì)其進(jìn)行了仿真,在仿真時(shí),為了減少仿真的時(shí)間,先將行、場(chǎng)掃描的對(duì)應(yīng)參數(shù),進(jìn)行了縮放,這樣不僅節(jié)約了仿真時(shí)間,同時(shí)由于掃描數(shù)據(jù)量變少,更加便于分析觀察。其仿真代碼所示:

`timescale 1ns/1ps  //仿真時(shí)間精度時(shí)間單位


module vga_display_pure_tb;
  
  reg pi_clk, pi_rst_n; //系統(tǒng)時(shí)鐘復(fù)位
  wire  po_vs;  //VGA場(chǎng)同步信號(hào)
  wire  po_hs;  //VGA行同步信號(hào)
  wire  [7:0] po_rgb;  //VGA場(chǎng)紅綠藍(lán)三基色
  
  //初始化數(shù)據(jù),并附相應(yīng)初值
  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時(shí)鐘描述


endmodule

仿真圖:

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

rgb_en信號(hào),只有當(dāng)po_vs和po_hs同時(shí)為高電平時(shí),才有效,并且有po_rgb Red基色信號(hào)輸出,時(shí)序仿真細(xì)節(jié)圖如下所示:

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

通過(guò)觀察和分析時(shí)序圖,可以發(fā)現(xiàn)與設(shè)計(jì)吻合,接下來(lái)則可進(jìn)行管腳分配,并下板驗(yàn)證,驗(yàn)證結(jié)果如下:

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

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

    關(guān)注

    1642

    文章

    21918

    瀏覽量

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

    關(guān)注

    5

    文章

    569

    瀏覽量

    64004

原文標(biāo)題:源碼系列:基于FPGA的VGA驅(qū)動(dòng)設(shè)計(jì)(附源工程)

文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    FPGA實(shí)戰(zhàn)演練邏輯篇55:VGA驅(qū)動(dòng)接口時(shí)序設(shè)計(jì)之2同步接口

    VGA驅(qū)動(dòng)接口時(shí)序設(shè)計(jì)之2同步接口本文節(jié)選自特權(quán)同學(xué)的圖書(shū)《FPGA設(shè)計(jì)實(shí)戰(zhàn)演練(邏輯篇)》配套例程下載鏈接:http://pan.baidu.com/s/1pJ5bCtt 好,有了
    發(fā)表于 07-29 11:19

    Xilinx FPGA入門(mén)連載68:VGA驅(qū)動(dòng)ColorBar顯示

    `Xilinx FPGA入門(mén)連載68:VGA驅(qū)動(dòng)ColorBar顯示特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1jGjAhEm 1 功能簡(jiǎn)介如圖所示
    發(fā)表于 04-11 09:51

    例說(shuō)FPGA連載28:VGA顯示驅(qū)動(dòng)子板設(shè)計(jì)

    ``例說(shuō)FPGA連載28:VGA顯示驅(qū)動(dòng)子板設(shè)計(jì)特權(quán)同學(xué),版權(quán)所有配套例程和更多資料下載鏈接:http://pan.baidu.com/s/1c0nf6Qc SF-VGA板載用于
    發(fā)表于 09-05 18:46

    FPGA驅(qū)動(dòng)VGA顯示不正常

    小生最近在嘗試著做VGA驅(qū)動(dòng),遇到了一個(gè)小問(wèn)題請(qǐng)教下大家。我在工程中用assign把VGA的行列掃描信號(hào)復(fù)制了一份,連接到自定義的IO口,然后用IO口的HS/VS取代原來(lái)
    發(fā)表于 12-19 10:34

    FPGA零基礎(chǔ)學(xué)習(xí):VGA協(xié)議驅(qū)動(dòng)設(shè)計(jì)

    不多說(shuō),上貨。VGA協(xié)議驅(qū)動(dòng)設(shè)計(jì)本篇實(shí)現(xiàn)基于叁芯智能科技的SANXIN -B01 FPGA開(kāi)發(fā)板,以下為配套的教程,如有入手開(kāi)發(fā)板,可以登錄官方淘寶店購(gòu)買(mǎi),還有配套的學(xué)習(xí)視頻。叁芯智能科技 F
    發(fā)表于 03-22 16:51

    基于 FPGA Vivado 信號(hào)發(fā)生器設(shè)計(jì)(工程

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

    基于 FPGA Vivado 示波器設(shè)計(jì)(工程

    今天給大俠帶來(lái)基于 FPGA Vivado 示波器設(shè)計(jì),開(kāi)發(fā)板實(shí)現(xiàn)使用的是Digilent basys 3,話不多說(shuō),上貨。 需要工程可以在以下資料獲取里獲取。 資料匯總|FPGA
    發(fā)表于 08-17 19:31

    基于 FPGA Vivado 的數(shù)字鐘設(shè)計(jì)(工程

    今天給大俠帶來(lái)基于 FPGA Vivado 的數(shù)字鐘設(shè)計(jì),開(kāi)發(fā)板實(shí)現(xiàn)使用的是Digilent basys 3。話不多說(shuō),上貨。 需要工程可以在以下資料獲取里獲取。 資料匯總|FPGA
    發(fā)表于 08-18 21:18

    fpga_vga顯示程序

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

    VGA顯示IP核(包括驅(qū)動(dòng)

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

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

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

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

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

    基于叁芯智能科技的SANXIN -B01 FPGA開(kāi)發(fā)板的VGA協(xié)議驅(qū)動(dòng)設(shè)計(jì)

    VGA協(xié)議驅(qū)動(dòng)設(shè)計(jì) 作者:郝旭帥校對(duì):陸輝 本篇實(shí)現(xiàn)基于叁芯智能科技的SANXIN -B01 FPGA開(kāi)發(fā)板,以下為配套的教程,如有入手開(kāi)發(fā)板,可以登錄官方淘寶店購(gòu)買(mǎi),還有配套的學(xué)習(xí)視頻
    的頭像 發(fā)表于 09-28 11:49 ?3041次閱讀
    基于叁芯智能科技的SANXIN -B01 <b class='flag-5'>FPGA</b>開(kāi)發(fā)板的<b class='flag-5'>VGA</b>協(xié)議<b class='flag-5'>驅(qū)動(dòng)</b>設(shè)計(jì)

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

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用FPGA CPLD的VGA顯示8種顏色的程序和工程文件免費(fèi)下載。
    發(fā)表于 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發(fā)送圖像數(shù)據(jù)到VGA顯示的工程文件免費(fèi)下載

    發(fā)表于 01-19 15:53 ?7次下載