小梅哥 xilinx fpga VGA

module VGA_CTRL(
    Clk,
    Reset_n,
    Data,
    Data_Req,
    VGA_HS, //行
    VGA_VS, //场
    VGA_BLK, //数据有效的那一段
    VGA_RGB
);
    
    input Clk;
    input Reset_n;
    input [23:0]Data;
    output reg Data_Req;
    output reg VGA_HS;
    output reg VGA_VS; 
    output reg VGA_BLK;
    output reg [23:0]VGA_RGB;//{R[7:0]、G[7:0]、B[7:0]}
    
    localparam Hsync_End = 800;
    localparam HS_End = 96;
    localparam Vsync_End = 525;
    localparam VS_End = 2;//2 line
    localparam Hdat_Begin = 144;
    localparam Hdat_End = 784;
    localparam Vdat_Begin =  35;
    localparam Vdat_End = 515;
    
    reg [9:0]hcnt;
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        hcnt <= 0;
    else if(hcnt >= Hsync_End -1)
        hcnt <= 0;
    else
        hcnt <= hcnt + 1'b1;
        
//    assign VGA_HS = (hcnt < HS_End - 1'd1)?0:1;
 // 改成时序逻辑后时间节点会出现后移,需要解决
    always@(posedge Clk)
        VGA_HS <= (hcnt < HS_End)?0:1;
    
    reg [9:0]vcnt;
    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        vcnt <= 0;
    else if(hcnt == Hsync_End -1)begin
        if(vcnt >= Vsync_End -1)
            vcnt <= 0;
        else
            vcnt <= vcnt + 1'd1;
    end
    else
        vcnt <= vcnt;
    
//    assign VGA_VS = (vcnt < VS_End - 1'd1)?0:1;
    always@(posedge Clk)
        VGA_VS  <= (vcnt < VS_End)?0:1;
        
    //BLK表示的就是输出输出的时间段
//    assign VGA_BLK = ((hcnt >= Hdat_Begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin - 1) && (vcnt < Vdat_End))?1:0;
//    always@(posedge Clk)
//         VGA_BLK <= ((hcnt >= Hdat_Begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin - 1) && (vcnt < Vdat_End))?1:0;   

    always@(posedge Clk)
       Data_Req <= ((hcnt >= Hdat_Begin - 1) && (hcnt < Hdat_End - 1) && (vcnt >= Vdat_Begin) && (vcnt < Vdat_End))?1:0;
    
    always@(posedge Clk)
       VGA_BLK <= Data_Req;     
            
//    assign VGA_RGB = VGA_BLK? Data:0;
    always@(posedge Clk)
        VGA_RGB <= Data_Req? Data:0;
        
    
        
endmodule

testbeach

`timescale 1ns / 1ps

module VGA_CRTL_tb ;

    reg Clk;
    reg Reset_n;
    reg [23:0]Data;
    wire Data_Req;
    wire VGA_HS;
    wire VGA_VS; 
    wire VGA_BLK;
    wire [23:0]VGA_RGB;//{R[7:0]、G[7:0]、B[7:0]}
    
    VGA_CTRL VGA_CTRL(
        Clk,
        Reset_n,
        Data,
        Data_Req,
        VGA_HS,
        VGA_VS,
        VGA_BLK,
        VGA_RGB
    );
    
    initial Clk = 1;
    always #20 Clk = ~Clk;

    initial begin
        Reset_n = 0;
        #201;
        Reset_n = 1;
        #200000000;
        $stop;
    end

    always@(posedge Clk or negedge Reset_n)
    if(!Reset_n)
        Data <= 0;
    else if(!Data_Req)
        Data <= Data;
    else
        Data <= Data + 1'd1;

endmodule

仿真的VGA_VS,下降沿到上升沿之间的时间是64000ns,25MHz的时钟,那就是64000/40=1600,

一行是800次,一场目前是2行,那就是1600,就是2行的时间长度

vga分辨率vesa标准时钟

VESA 标准时序
640 x 350
VGA 640x350@70 Hz (pixel clock 25.175 MHz)
VESA 640x350@85 Hz (pixel clock 31.5 MHz)
640 x 400
VGA 640x400@70 Hz (pixel clock 25.175 MHz)
VESA 640x400@85 Hz (pixel clock 31.5 MHz)
640 x 480
VGA 640x480@60 Hz Industry standard (pixel clock 25.175 MHz)
VGA 640x480@73 Hz (pixel clock 31.5 MHz)
VESA 640x480@75 Hz (pixel clock 31.5 MHz)
SXGA (Mode 101) 640x480@85 Hz (pixel clock 36.0 MHz)
VESA 640x480@100 Hz (pixel clock 43.16 MHz)
720 x 400
VESA 720x400@85 Hz (pixel clock 35.5 MHz)
768 x 576
VESA 768x576@60 Hz (pixel clock 34.96 MHz)
VESA 768x576@72 Hz (pixel clock 42.93 MHz)
VESA 768x576@75 Hz (pixel clock 45.51 MHz)
VESA 768x576@85 Hz (pixel clock 51.84 MHz)
VESA 768x576@100 Hz (pixel clock 62.57 MHz)
800 x 600
SVGA 800x600@56 Hz (pixel clock 36.0 MHz)
SVGA 800x600@60 Hz (pixel clock 40.0 MHz)
SVGA 800x600@75 Hz (pixel clock 49.5 MHz)
VESA 800x600@72 Hz (pixel clock 50.0 MHz)
SXGA 800x600@85 Hz (Modes 102/103) (pixel clock 56.25 MHz)
VESA 800x600@100 Hz (pixel clock 68.18 MHz)
1024 x 768
VESA 1024x768@43 Hz Interlaced (pixel clock 44.9 MHz)
XGA 1024x768@60 Hz (pixel clock 65.0 MHz)
VESA 1024x768@70 Hz (pixel clock 75.0 MHz)
VESA 1024x768@75 Hz (pixel clock 78.8 MHz)
VESA 1024x768@85 Hz (pixel clock 94.5 MHz)
VESA 1024x768@100 Hz (pixel clock 113.31 MHz)
1152 x 864
VESA 1152x864@75 Hz (pixel clock 108.0 MHz)
VESA 1152x864@85 Hz (pixel clock 119.65 MHz)
VESA 1152x864@100 Hz (pixel clock 143.47 MHz)
VESA 1152x864@60 Hz (pixel clock 81.62 MHz)
1280 x 1024
VESA 1280x1024@60 Hz (pixel clock 108.0 MHz)
VESA 1280x1024@75 Hz (pixel clock 135.0 MHz)
VESA 1280x1024@85 Hz (pixel clock 157.5 MHz)
VESA 1280x1024@100 Hz (pixel clock 190.96 MHz)
1280 x 800
VESA 1280x800@60 Hz (pixel clock 83.46 MHz)
1280 x 960
VESA 1280x960@60 Hz (pixel clock 102.1 MHz)
VESA 1280x960@60 Hz (pixel clock 108.0 MHz)
VESA 1280x960@72 Hz (pixel clock 124.54 MHz)
VESA 1280x960@75 Hz (pixel clock 129.86 MHz)
VESA 1280x960@85 Hz (pixel clock 148.5 MHz)
VESA 1280x960@100 Hz (pixel clock 178.99 MHz)
1368 x 768
VESA 1368x768@60 Hz (pixel clock 85.86 MHz)
1400 x 1050
VESA 1400x1050@60 Hz (pixel clock 122.61 MHz)
VESA 1400x1050@60 Hz (pixel clock 122.61 MHz)
VESA 1400x1050@72 Hz (pixel clock 149.34 MHz)
VESA 1400x1050@75 Hz (pixel clock 155.85 MHz)
VESA 1400x1050@85 Hz (pixel clock 179.26 MHz)
VESA 1400x1050@100 Hz (pixel clock 214.39 MHz)
1440 x 900
VESA 1440x900@60 Hz (pixel clock 106.47 MHz)
1600 x 1200
VESA 1600x1200@60 Hz (pixel clock 162.0 MHz)
VESA 1600x1200@60 Hz (pixel clock 162.0 MHz)
VESA 1600x1200@65 Hz (pixel clock 175.5 MHz)
VESA 1600x1200@70 Hz (pixel clock 189.0 MHz)
VESA 1600x1200@75 Hz (pixel clock 202.5 MHz)
VESA 1600x1200@85 Hz (pixel clock 229.5 MHz)
VESA 1600x1200@100 Hz (pixel clock 280.64 MHz)
1680 x 1050
VESA 1680x1050@60 Hz (pixel clock 147.14 MHz)
1792 x 1344
VESA 1792x1344@60 Hz (pixel clock 204.8 MHz)
VESA 1792x1344@75 Hz (pixel clock 261.0 MHz)
1856 x 1392
VESA 1856x1392@60 Hz (pixel clock 218.3 MHz)
VESA 1856x1392@75 Hz (pixel clock 288.0 MHz)
1920 x 1200
VESA 1920x1200@60 Hz (pixel clock 193.16 MHz)
1920 x 1440
VESA 1920x1440@60 Hz (pixel clock 234.0 MHz)
VESA 1920x1440@75 Hz (pixel clock 297.0 MHz)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值