VGA 协议理解

在这里插入图片描述
输入时钟,fpga给出时序和数据。
接到显示屏上显示。
在这里插入图片描述
颜色
在这里插入图片描述
行列信号

在这里插入图片描述
abcde,opqrs都是图中的含义,分别是行列,每行发几个像素,发多少行。
有前后标定用的非图像像素的像素。

@60是显示屏刷新率,显示一个像素点的时间是1/60MHz,越大显示的越快。

时钟是指针对某一个尺寸的图像,总共需要的时间。
在这里插入图片描述
计算
在这里插入图片描述

`define HSYNC_A 16'd128
`define HSYNC_B 16'd216
`define HSYNC_C 16'd1016
`define HSYNC_D 16'd1056

`define VSYNC_A 16'd4
`define VSYNC_B 16'd27
`define VSYNC_C 16'd627
`define VSYNC_D 16'd628
module Vga_signal(
    clk_    ,//40Mhz
    rst_n  ,
    //他信号,举例dout

    vsync,
    hsync,
    vga_data
    );

    //参数定义
    parameter      DATA_W =         8;
    parameter      CNT_W =         16;
    //输入信号定义
    input                    clk    ;
    input                    rst_n  ;

    output reg vsync;
    output reg hsync;
    //输出信号定义
    output reg [DATA_W-1:0]  vga_data   ;
 

    //中间信号定义
    reg[CNT_W-1:0]           hsync_cnt;//lie num
    reg[CNT_W-1:0]           vsync_cnt;//hang shu
    reg                      vga_data_en;

    //hsync_cnt 800 lie saomiao
    always@(posedge clk or negedge rst_n)begin
        if(rst_n==1'b0)begin
            hsync_cnt<=0;
        end
        else if(hsync_cnt==`HSYNC_D) begin
            hsync_cnt<=0;
        end
        else begin
            hsync_cnt<=hsync_cnt+1;
        end
    end
    //vsync_cnt
    always@(posedge clk or negedge rst_n)begin
        if(rst_n==1'b0)begin
            vsync_cnt<=0;
        end
        else if(hsync_cnt==`HSYNC_D) begin
            if(vsync_cnt==`VSYNC_D) begin
                 vsync_cnt<=0;
            end
            else begin
                vsync_cnt<=vsync_cnt+1;
            end
        end
        else begin
            vsync_cnt<=vsync_cnt;
        end
    end
    //vsync
    always  @(posedge clk or negedge rst_n)begin
        if(rst_n==1'b0)begin
            vsync<=0;
        end
        else if(vsync_cnt<`VSYNC_A )  begin
            vsync<=0;
        end
        else begin
            vsync<=1;
        end
    end

    //hsync
    always  @(posedge clk or negedge rst_n)begin
        if(rst_n==1'b0)begin
            hsync<=0;
        end
        else if(hsync_cnt<`HSYNC_A )  begin
            hsync<=0;
        end
        else begin
            hsync<=1;
        end
    end
    

   //vga_data_en
   always  @(*)begin
       if(hsync_cnt>`HSYNC_B&&hsync_cnt<`HSYNC_C&&vsync_cnt>`VSYNC_B&&vsync_cnt<`VSYNC_C)
            vga_data_en<=1;
        else
            vga_data_en<=0;
   end

    //    vga_data  根据范围赋值
    always  @(*)begin
        if(vga_data_en)begin 
            vga_data<=1;
        end
        else begin
            vga_data<=0;
        end
    end

endmodule


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值