• 基于FPGA的VGA表情包显示


    前言

    什么是VGA?

    VGA(视频图形阵列)是IBM公司制定的一种视频数据传输标准。

    接口信号主要有5个:R(Red),G(Green),B(Blue),HS(Horizontal synchronization水平同步),VS(Vertical synchronization垂直同步)。水平同步也叫行(line)同步,垂直同步也叫帧(frame)同步。信号都是模拟信号。

    用途:连接CRT显示器或者带VGA接口的LCD液晶显示器。

    VGA的接口原理是什么?行消隐,场消隐?

    逐行扫描的方式,电子束从屏幕左上角一点开始,从左向右逐行扫描。每扫描完一行,电子束回到屏幕的左边下一行的起始位置。当所有行扫描完毕后,电子束回到屏幕的左上角起始位置,开始下一次扫描。水平方向电子束从右侧回到左侧所需的时间叫行消隐;电子束从右下角回到左上角起始位置所需的时间叫场消隐。

    听大佬说缩短消隐区,但太短测试我未通过,还是按标准来吧。

    VGA时序参数?

    可以从网站上查询到你所需要的参数:http://tinyvga.com/vga-timing

    本次进行1024*768分辨率下的VGA三道杠条纹显示开发:

    VGA接口的工作时序?

    图像的显示是以像素为单位的,行同步信号hs的负脉冲到来时要由RGB送出在当前行显示的像素,下一个负向脉冲用来显示下一行。当整个屏幕显示一遍后,由帧同步信号vs送出一个负向脉冲,又从左上角显示。

    功能划分:(懒到不想画图了)

    编码实现:

    系统时钟确定:T=刷新hz*总像素点

    总像素点=水平计数*垂直计数=1344*806

    推得:T=60*1344*806=65mhz(约等于)

    坐标与hs、vs信号产生。

     1 //************************************************
     2 //  Filename      : coo_out.v                             
     3 //  Author        : kingstacker                  
     4 //  Company       : School                       
     5 //  Email         : kingstacker_work@163.com     
     6 //  Device        : Altera cyclone4 ep4ce6f17c8  
     7 //  Description   : product the coodinate and hs vs;                             
     8 //************************************************
     9 module  coo_out #(parameter WIDTH = 10)(
    10     //input;
    11     input    wire    clk,  //65mhz;
    12     input    wire    rst_n,
    13     //output;
    14     output   wire     hs,    //horizontal synchronization;
    15     output   wire     vs,   //vertical syn;
    16     output   reg     [WIDTH-1:0]  line_coo, //line coodinate;
    17     output   reg     [WIDTH-1:0]  ver_coo   //vertical coodinate;
    18 );  //1024*768;
    19  localparam HTA = 11'd136,  //sync pulse;
    20             HTB = 11'd160,  //back porch;
    21             HTC = 11'd1024, //visible area;
    22             HTD = 11'd24,   //front porch;
    23             VTA = 11'd6,    //sync pulse;
    24             VTB = 11'd29,   //back porch;
    25             VTC = 11'd768,  //visible area;
    26             VTD = 11'd3,    //front porch;
    27             LINE_CNTMAX = HTA+HTB+HTC+HTD-1'b1, //max line count;
    28             VER_CNTMAX  = VTA+VTB+VTC+VTD-1'b1, //max ver  count;
    29             HSTART = HTA+HTB,
    30             VSTART = VTA+VTB;
    31 reg [WIDTH+1:0] line_cnt;            
    32 reg [WIDTH+1:0] ver_cnt;
    33 always @(posedge clk or negedge rst_n) begin
    34     if (~rst_n) begin
    35         line_cnt <= 11'd0;
    36     end //if
    37     else begin
    38         if (line_cnt == LINE_CNTMAX) begin
    39             line_cnt <= 11'd0;
    40           end //if
    41           else begin
    42             line_cnt <= line_cnt + 1'b1;
    43           end //else  
    44     end //else
    45 end //always
    46 always @(posedge clk or negedge rst_n) begin
    47     if (~rst_n) begin
    48         ver_cnt <= 11'd0;
    49     end //if
    50     else begin
    51         if ((ver_cnt == VER_CNTMAX)&&(line_cnt == LINE_CNTMAX)) begin
    52                ver_cnt <= 11'd0;
    53            end //if
    54            else begin
    55                ver_cnt <= (line_cnt == LINE_CNTMAX)? (ver_cnt + 1'b1) : ver_cnt;
    56            end //else   
    57     end //else
    58 end //always
    59 assign hs = (line_cnt < HTA) ? 1'b0 : 1'b1;
    60 assign vs =  (ver_cnt < VTA) ? 1'b0 : 1'b1;
    61 always @(posedge clk or negedge rst_n) begin
    62     if (~rst_n) begin
    63         line_coo <= 0;
    64         ver_coo  <= 0;
    65     end //if
    66     else begin
    67         if((line_cnt >= HSTART)&&(line_cnt < HSTART + HTC)&&(ver_cnt >=VSTART)&&(ver_cnt < VSTART + VTC)) begin
    68             line_coo <= line_cnt - HSTART;
    69             ver_coo  <= ver_cnt  - VSTART;
    70         end
    71     end //else
    72 end //always
    73 
    74 
    75 endmodule

    三道杠产生:

     1 //************************************************
     2 //  Filename      : color_out.v                             
     3 //  Author        : kingstacker                  
     4 //  Company       : School                       
     5 //  Email         : kingstacker_work@163.com     
     6 //  Device        : Altera cyclone4 ep4ce6f17c8  
     7 //  Description   :                              
     8 //************************************************
     9 module  color_out #(parameter WIDTH = 10)(
    10     //input;
    11     input    wire    clk,
    12     input    wire    rst_n,
    13     input    wire    [WIDTH-1:0]  line_coo,
    14     input    wire    [WIDTH-1:0]  ver_coo,
    15     //output;
    16     output   reg     [15:0]        rgb_o   
    17 );
    18 always @(posedge clk or negedge rst_n) begin
    19     if (~rst_n) begin
    20         rgb_o <= 16'd0;
    21     end //if
    22     else begin
    23         if(ver_coo < 10'd255) begin
    24             rgb_o <= {5'b11111,6'd0,5'd0};
    25         end 
    26         else begin
    27             if (ver_coo < 10'd511) begin
    28                 rgb_o <= {5'd0,6'b111111,5'd0};
    29             end
    30             else begin
    31                 rgb_o <= {5'd0,6'd0,5'b11111};
    32             end
    33         end 
    34     end //else
    35 end //always
    36 
    37 endmodule

    综合资源使用:

     

    抓波:

     

    接显示器看看:三道杠少年

      

    修改color_out:九宫格(很无聊的东西hhhhhh)

    图片放rom显示:100*100

    mif文件可由matalb生成,也可以用下面两个软件生成(更方便):

    用lmage2Lcd生成bin文件:

    bin文件转换为mif文件:

    再把mif文件放rom即可。

     显示器显示图片:

    以上。

  • 相关阅读:
    希尔排序(java实现)
    直接插入排序(java实现)
    android AsyncTask使用限制
    android TranslateAnimation动画执行时的坐标获取。
    android内存管理机制
    android实现前置后置摄像头相互切换
    【转-整理】JavaWeb框架中,各层的解释和关系
    安卓系统上安装.net运行时 mono runtime
    你不知道的https工作原理
    HTTPS的误解(二)
  • 原文地址:https://www.cnblogs.com/kingstacker/p/7594170.html
Copyright © 2020-2023  润新知