zoukankan      html  css  js  c++  java
  • 基于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即可。

     显示器显示图片:

    以上。

  • 相关阅读:
    AIMS 2013中的性能报告工具不能运行的解决办法
    读懂AIMS 2013中的性能分析报告
    在线研讨会网络视频讲座 方案设计利器Autodesk Infrastructure Modeler 2013
    Using New Profiling API to Analyze Performance of AIMS 2013
    Map 3D 2013 新功能和新API WebCast视频下载
    为Autodesk Infrastructure Map Server(AIMS) Mobile Viewer创建自定义控件
    ADN新开了云计算Cloud和移动计算Mobile相关技术的博客
    JavaScript修改css样式style
    文本编辑神器awk
    jquery 开发总结1
  • 原文地址:https://www.cnblogs.com/kingstacker/p/7594170.html
Copyright © 2011-2022 走看看