当前位置: 首页 > article >正文

数字图像处理(9):VGA接口及其时序

(1)特点:成本低、结构简单、应用灵活

        VGA接口需要五个信号:R、G、B、Hsync、Vsync

(2)VGA的工作原理:

  • 设定一个高速时钟信号(像素时钟)来控制每个像素的传输速率,例如:对于640x480分辨率,像素时钟为25.175MHz。(可以通过PLL实现)
  • 水平扫描:显示器从左往右逐行扫描像素,每行扫描完成后,发送一个水平同步信号(Hsync)来表示行的结束。在水平同步信号之后,有一段水平消隐区,用来准备下一行的扫描。
  • 垂直扫描:显示器从上到下逐帧扫描行像素。每帧扫描完成后,发送一个垂直同步信号(VSync)来表示帧的结束。在垂直同步信号之后,有一段垂直消隐区,用于准备下一帧的扫描。

(3)附上一段常用的VGA代码

module tft_ctrl(
    input               hdmi_clk        ,
    input               reset_n         ,
    input   [23:0]      data_in         ,
                                        
    output  [9:0]       hang            ,
    output  [9:0]       lie             ,
    output              hsync           ,
    output              vsync           ,
    output  [23:0]      rgb_tft         ,
    output              tft_DE          
    
);
    
    reg     [10:0]      hang_cnt        ;
    reg     [9:0]       v_cnt           ;

    wire                data_valid      ;
    
    parameter H_SYNC        =   96      ;
    parameter H_BACK        =   40      ;
    parameter H_LEEF        =   8       ;
    parameter H_VALID       =   640     ;
    parameter H_RIGHT       =   8       ;    
    parameter H_FRONT       =   8       ;
    parameter H_TOTAL       =   800     ;
    
    parameter V_SYNC        =   2       ;
    parameter V_BACK        =   25      ;
    parameter V_TOP         =   8       ;
    parameter V_VALID       =   480     ;
    parameter V_BOTTOM      =   8       ;    
    parameter V_FRONT       =   2       ;
    parameter V_TOTAL       =   525     ;

//行计数器设计
    always@(posedge hdmi_clk or negedge reset_n)
        if(!reset_n)
            hang_cnt <= 11'd0;
        else if(hang_cnt == H_TOTAL - 11'd1)
            hang_cnt <= 11'd0;
        else 
            hang_cnt <= hang_cnt + 11'd1;
            
//场计数器设计
    always@(posedge hdmi_clk or negedge reset_n)
        if(!reset_n)
            v_cnt <= 10'd0;
        else if ((v_cnt == V_TOTAL - 10'd1) && (hang_cnt == H_TOTAL - 11'd1))
            v_cnt <= 10'd0;
        else if(hang_cnt == H_TOTAL - 11'd1)
            v_cnt <= v_cnt + 10'd1;
        else 
            v_cnt <= v_cnt;

//数据有效信号设计
    assign data_valid = (hang_cnt >= H_SYNC + H_BACK + H_LEEF) && (hang_cnt < H_SYNC + H_BACK + H_LEEF + H_VALID)
                            && (v_cnt >= V_SYNC + V_BACK + V_TOP) && (v_cnt < V_SYNC + V_BACK + V_TOP + V_VALID);
                            
//行、列信号设计   
    assign hang = ( data_valid ) ? (hang_cnt - H_SYNC - H_BACK - H_LEEF + 1'd1) : 10'd0;
    assign lie  = ( data_valid ) ? (v_cnt - V_SYNC - V_BACK - V_TOP + 1'd1) : 10'd0;    
    
//行同步、场同步信号设计
    assign hsync = (hang_cnt >= H_SYNC);
    assign vsync = (v_cnt >= V_SYNC);
    
//rgb_tft、tft_DE信号设计
    assign rgb_tft = (data_valid) ? data_in : 24'd0;
    assign tft_DE  = data_valid;

endmodule


http://www.kler.cn/a/412899.html

相关文章:

  • MATLAB中Simulink的基础知识
  • Elasticsearch与CCS跨集群搜索:深入讲解与实战演练
  • 2024年第15届蓝桥杯C/C++组蓝桥杯JAVA实现
  • Spring Boot 动态数据源切换
  • 实现Excel文件和其他文件导出为压缩包,并导入
  • 文件系统的作用
  • 使用C语言实现Linux的date>date.txt功能
  • Vue2中 vuex 的使用
  • 嵌入式硬件实战基础篇(四)多路直流稳压电源
  • C#笔记(5)
  • Android实现桌面小部件:今天吃什么
  • 全文单词统计
  • Tomcat(38) Tomcat的响应缓冲区大小
  • UE5 纹理平铺
  • B+Tree--Mysql在插入(删除)是,节点(页)内有多个索引key,新索引key是怎么与其他key进行比较的呢?
  • 使用 Maven 开发 IntelliJ IDEA 插件
  • 蓝牙MCU单片机8k高回报率无线应用
  • HCIP——堆叠技术实验配置
  • Redis(4):主从复制
  • MCU(一) 时钟详解 —— 以 GD32E103 时钟树结构为例
  • 3101.交替子数组计数
  • 2023年12月GESPC++一级真题解析
  • FFmpeg 音视频同步问题
  • 单片机将图片数组调出来显示MPU8_8bpp_Memory_Write
  • springboot视频网站系统的设计与实现(代码+数据库+LW)
  • 代码随想录打卡DAY20