VGA协议

1.VGA时序

在这里插入图片描述
在这里插入图片描述

2.不同分辨率的VGA参数

在这里插入图片描述

3.基于小梅哥5寸800x480TFT屏幕的显示驱动

3.1小梅哥TFT屏幕接口和意义

在这里插入图片描述
由表可知,驱动TFT屏幕需要输入RGB分量、TFT像素时钟、DISP显示开关、HSYNC、VSYNC行场同步信号、DE数据使能.
驱动代码为

/*
驱动显示屏需要给TFT屏幕的信号有:
时钟——与显示区域大小和帧率有关
复位
待显示数据
行同步信号——行同步期间低电平,其余时间高电平
场同步信号——场同步期间低电平,其余时间高电平
背光控制pwm
背光使能de——高电平为有光,低电平为无光
https://editor.csdn.net/md/?articleId=124541374
*/
module  TFT_driver(
    //system    signals
    input           		clk 		,//时钟,与分辨率有关		
    input          			rst_n 		,//复位
    input			[15:0]	din			,
    //VGA
    output	wire			vga_clk 	,//输出时钟,接显示屏
    output  wire            vga_hs   	,//行同步
    output  wire            vga_vs    	,//场同步
    output  wire    [15:0]  vga_rgb     ,//像素信息
    output  reg             vga_de      ,//数据有效时间段
    output  wire            vga_pwm     ,//屏幕亮度
    output	wire			vga_req		,//数据请求,提前vga_de一个时钟周期
    output	wire	[15:0]	vga_x		,//屏幕中H像素位置 1开始
    output	wire	[15:0]	vga_y   	 //屏幕中v像素位置 1开始	
);
localparam  H_TOTAL_TIME    =   1056    ,//行总周期
            H_SYNC_TIME     =   128     ,//行同步
            H_BACK_PORCH    =   88      ,//行后沿
            H_LEFT_BORDER   =   0       ,//行左边框
            H_DATA_TIME     =   800     ,//行数据有效期
            H_RIGHT_BORDER  =   0       ,//行右边框
            H_FRONT_PORCH   =   40      ;//行前沿
           

localparam  V_TOTAL_TIME    =   525     ,//场总周期
            V_SYNC_TIME     =   2       ,//场同步
            V_BACK_PORCH    =   25      ,//场后沿
            V_TOP_BORDER    =   8       ,//场上边框
            V_DATA_TIME     =   480     ,//场数据有效
            V_BOTTOM_BORDER =   8       ,//场下边框
            V_FRONT_PORCH   =   2       ;//场前沿

localparam	H_LEFT 			=	H_SYNC_TIME + H_BACK_PORCH + H_LEFT_BORDER	,
			V_LEFT			=	V_SYNC_TIME + V_BACK_PORCH + V_TOP_BORDER	;

reg     [10:0]              cnt_h       ;
reg     [10:0]              cnt_v       ;

assign vga_rgb = (vga_de) ? din : 16'b11111_000000_00000;
assign vga_clk = clk;

//行场计数
always@(posedge clk or negedge rst_n)begin
    if(rst_n == 1'b0)
        cnt_h   <=  11'd0;
    else    if(cnt_h == H_TOTAL_TIME - 1'b1)
        cnt_h   <= 11'd0;
    else
        cnt_h   <= cnt_h + 1'b1;    
end 

always@(posedge clk or negedge rst_n)begin
    if(rst_n == 1'b0)
        cnt_v   <=  'b0;
    else    if(cnt_h == H_TOTAL_TIME - 1'b1 && cnt_v == V_TOTAL_TIME - 1'b1)
        cnt_v   <=  'b0;
    else    if(cnt_h == H_TOTAL_TIME - 1)
        cnt_v   <=  cnt_v + 1'b1;
    else
        cnt_v <= cnt_v;
end

//行场同步信号
assign  vga_hs   =   (cnt_h >= H_SYNC_TIME) ? 1'b1:1'b0;
assign  vga_vs   =   (cnt_v >= V_SYNC_TIME) ? 1'b1:1'b0;


//像素坐标1~V_DATA 1~H_DATA
assign  vga_x  =  (cnt_h >= H_LEFT & cnt_h < H_LEFT + H_DATA_TIME) ? cnt_h - H_LEFT + 1'b1: 1'b0;
assign  vga_y  =  (cnt_v >= V_LEFT & cnt_v < V_LEFT + V_DATA_TIME) ? cnt_v - V_LEFT + 1'b1: 1'b0;

assign  vga_pwm = clk;

//数据请求信号vga_req,比数据信号de快一个周期
assign  vga_req = (((cnt_h >= H_LEFT - 1'b1) && (cnt_h < H_LEFT + H_DATA_TIME - 'd1))
               && ((cnt_v > V_LEFT - 1'b1) && (cnt_v <= V_LEFT + V_DATA_TIME - 1'b1)));

//数据请求信号打一拍得到数据有效信号
always @(posedge clk) begin
	vga_de <= vga_req;
end
endmodule

仿真验证通过,驱动无误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值