首页 > 其他分享 >49.TFT_LCD液晶屏驱动设计与验证(2)

49.TFT_LCD液晶屏驱动设计与验证(2)

时间:2024-07-25 13:25:41浏览次数:14  
标签:cnt wire clk 49 SYNC 33M LCD tft TFT

(1)Visio视图:

(2)控制模块Verilog代码:

module tft_ctrl(
    input               clk_33M         ,
    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_bl          ,
    output              tft_clk         ,
    output              tft_DE          
    
);
    
    reg     [10:0]      hang_cnt        ;
    reg     [9:0]       v_cnt           ;

    wire                data_vaild      ;
    
    parameter H_SYNC        =   128     ;
    parameter H_BACK        =   88      ;
    parameter H_VAILD       =   800     ;
    parameter H_FRONT       =   40      ;
    parameter H_TOTAL       =   1056    ;
    
    parameter V_SYNC        =   2       ;
    parameter V_BACK        =   33      ;
    parameter V_VAILD       =   480     ;
    parameter V_FRONT       =   10      ;
    parameter V_TOTAL       =   525     ;

//行计数器设计
    always@(posedge clk_33M 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 clk_33M 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_vaild = (hang_cnt >= H_SYNC + H_BACK) && (hang_cnt < H_SYNC + H_BACK + H_VAILD)
                            && (v_cnt >= V_SYNC + V_BACK) && (v_cnt < V_SYNC + V_BACK + V_VAILD);
                            
//行、列信号设计   
    assign hang = ( data_vaild ) ? (hang_cnt - H_SYNC - H_BACK + 1'd1) : 10'd0;
    assign lie  = ( data_vaild ) ? (v_cnt - V_SYNC - V_BACK + 1'd1) : 10'd0;    
    
//行同步、场同步信号设计
    assign hsync = (hang_cnt >= H_SYNC);
    assign vsync = (v_cnt >= V_SYNC);
    
//rgb_tft、tft_bl、tft_clk、tft_DE信号设计
    assign rgb_tft = (data_vaild) ? data_in : 24'd0;
    assign tft_bl  = 1'd1;
    assign tft_clk = clk_33M;
    assign tft_DE  = data_vaild;

endmodule

(3)仿真代码:

`timescale 1ns / 1ps

module tft_ctrl_tb;

reg             clk         ;
reg             reset_n     ;
wire    [23:0]  data_in     ;
    
wire            locked      ;
wire            clk_33M     ;

wire    [9:0]   hang        ;
wire    [9:0]   lie         ;    
wire            hsync       ;   
wire            vsync       ;
wire    [23:0]  rgb_tft     ;
wire            tft_bl      ;
wire            tft_clk     ;
wire            tft_DE      ;

initial clk = 1'd1;
always #10 clk = ~clk;

initial begin
        reset_n <= 1'd0;
        #15;
        reset_n <= 1'd1;
        #20_000_000;
        $stop;
end

assign data_in = ((hang >= 10'd1) && (lie >= 10'd1)) ? 24'h111_111 : 24'd0  ;

PLL_33M     PLL_33M_inst
(

    .clk_33M        (clk_33M    ), 

    .resetn         (reset_n    ), 
    .locked         (locked     ), 
    .clk_in1        (clk        )
);

tft_ctrl    tft_ctrl_inst(
    .clk_33M         (clk_33M   ),
    .reset_n         (locked    ),
    .data_in         (data_in   ),

    .hang            (hang      ),
    .lie             (lie       ),
    .hsync           (hsync     ),
    .vsync           (vsync     ),
    .rgb_tft         (rgb_tft   ),
    .tft_bl          (tft_bl    ),
    .tft_clk         (tft_clk   ),
    .tft_DE          (tft_DE    )
);

endmodule

(4)仿真波形:

  • PLL仿真波形:

  • 行计数器信号、行同步信号(我这里同步信号的设计与之前理论部分的不一样,是根据tft显示屏数据手册改的):

  • 场计数器信号、场同步信号:

  • 行信号、列信号:

第35列的第216个像素点是有效的第一行第一列数据。

  • 数据输入信号和rgb_tft信号:

标签:cnt,wire,clk,49,SYNC,33M,LCD,tft,TFT
From: https://blog.csdn.net/2301_80417284/article/details/140671203

相关文章

  • 泰凌微8258学习日记-6:LCD屏幕的点亮以及使用
            点亮LCD对我而言算是比较难的操作了,在了解到LCD点亮的步骤以后(开SPI,导入LCD驱动,主函数调用),我开始学习LCD的引脚功能,SPI如何使用,后面拿到中景园给的LCD例程(STM32的),修改LCD驱动(这一步是最难的)。好在有位大哥帮我,也是顺利完成了驱动的修改。......
  • 边缘设备使用记录--阿加犀AIBox 6490(realsense+yolox部署)
    边缘设备使用记录--阿加犀AIBox6490:realsense+yolox部署前言RealsenseSDK+ROSYOLOx部署预处理后处理可视化ROS节点总结前言由于6490这个板子是有type-c接口的,所以这里准备用Realsense+YOLOx来先简单做一个实时的目标检测的东西出来,这里也用到上一篇文章所提到......
  • 【计算机毕业设计】ssm499智能社区管理系统的设计与实现+vue
    现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本智能社区管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达......
  • 【计算机毕业设计】ssm497网上茶叶销售平台设计与开发+jsp
    计算机网络发展到现在已经好几十年了,在理论上面已经有了很丰富的基础,并且在现实生活中也到处都在使用,可以说,经过几十年的发展,互联网技术已经把地域信息的隔阂给消除了,让整个世界都可以即时通话和联系,极大的方便了人们的生活。所以说,网上茶叶销售平台用计算机技术来进行设计,......
  • 【计算机毕业设计】ssm495题库管理系统的设计与实现+jsp
    随着考试的增多,需要管理的试卷越来越多。现在大多数学校考试的方式采用老师出卷安排考试时间,学生参与的方式。这种方式效率低、灵活性低,每门课程的考卷组成就给老师的统计整理工作造成困难。目前,网络发展成熟,各类管理系统层出不穷,如果可以有专业的管理系统提供网上考试,则可......
  • pg 关于表膨胀 转发:https://www.cnblogs.com/lottu/p/14549463.html
    对于PostgreSQL处理MVCC(数据文件中新增tuple)的方式;相比其他数据库(Oracle、Mysql)而言;更容易触发表/索引膨胀。因为update操作也会影响表膨胀的问题。PostgreSQL处理的方式是对表autovacuum,vacuum是不会降低水位线。能避免表、索引膨胀。vacuumfull,reindex才会降低水位线。当然......
  • 代码随想录算法训练营Day5、6 | Leetcode 242 有效字母的异位词 Leetcode 349 两个数
    前言因为昨天休息所以把两天合并成一天来写,昨天把上周的题又重写了一遍,发现一些细节还是要注意。今天的题目都是查找,也涉及到了最近正在学的STL。Leetcode242有效字母的异位词 题目链接:https://leetcode.cn/problems/valid-anagram/description/代码随想录题解:代码随想......
  • 第四十八天 第十章 单调栈part01 739. 每日温度 496.下一个更大元素 I 503.下一个更大
     739.每日温度 使用单调栈:注意栈中的递增递减顺序。classSolution{public:vector<int>dailyTemperatures(vector<int>&temperatures){vector<int>res(temperatures.size(),0);stack<int>sta;sta.push(0);for(int......
  • # 代码随想录算法训练营第38天 | 01背包问题:1049.最后一块石头的重量II(最多能装多少)、
    1049.最后一块石头的重量IIhttps://leetcode.cn/problems/last-stone-weight-ii/代码随想录https://programmercarl.com/1049.最后一块石头的重量II.html#算法公开课494.目标和https://leetcode.cn/problems/target-sum/description/代码随想录https://programmercarl.com......
  • SQL249 分页查询employees表,每5行一页,返回第2页的数据
    SQL249分页查询employees表,每5行一页,返回第2页的数据描述分页查询employees表,每5行一页,返回第2页的数据CREATETABLE`employees`(`emp_no`int(11)NOTNULL,`birth_date`dateNOTNULL,`first_name`varchar(14)NOTNULL,`last_name`varchar(16)NOTNULL,`gender`......