verilog驱动RGB接口TFT液晶屏

1.驱动原理

驱动TFT屏幕与驱动VGA显示器的原理很相似。

行、场同步模式




DE同步模式

在正点原子的教程中有如下说明:

​ 液晶屏有两种驱动模式,分别为行场驱动模式(HV MODE)和数据使能同步模式(DE MODE)

​ HV MODE:数据使能信号(DE)必须为低电平

​ DE MODE:行同步和场同步信号必须为高电平

但是在我实际实验的过程中,当在HV模式中,DE信号也必须正确工作,如果DE为低电平,显示的图像会错位。但是只要DE信号是正确的,行同步和场同步信号一直保持高电平或者低电平都可以正常工作。

2.模块框图

3.时钟模块

时钟使用锁相环IP核生成,时钟频率如框图所示。

3.TFT驱动模块

module tft_ctrl (input  wire tft_clk,input  wire rst_n,input  wire [15:0]  pic_data,output  wire [9:0]  pic_y,output  wire [9:0]  pic_x,output  wire [15:0]  rgb_data,output  wire   hsync,output  wire   vsync,output  wire   tft_de,output  wire   tft_clk_out,    output  wire   tft_bl
);
//parameter define
parameter H_SYNC    =   10'd128  ,   //行同步H_BACK    =   10'd88   ,   //行时序后沿H_VALID   =   10'd800 ,   //行有效数据H_FRONT   =   10'd40   ,   //行时序前沿H_TOTAL   =   11'd1056 ;   //行扫描周期parameter V_SYNC    =   10'd2  ,   //场同步V_BACK    =   10'd33   ,   //场时序后沿V_VALID   =   10'd480 ,   //场有效数据V_FRONT   =   10'd10   ,   //场时序前沿V_TOTAL   =   10'd525 ;   //场扫描周期wire rgb_valid;//计数到有效图像时拉高
wire rgb_request;//请求RGB像素信息reg [10:0]  count_h;//行同步计数
reg [10:0]  count_v;//场同步计数assign  tft_clk_out = tft_clk;
assign  tft_de  = rgb_valid;
assign  tft_bl  = rst_n;   //行同步计数
always @(posedge tft_clk or negedge rst_n) beginif (!rst_n) begincount_h <= 11'b0;endelse    if (count_h == H_TOTAL - 1'b1) begincount_h <= 11'b0;endelsecount_h <= count_h + 1'b1;
end
assign hsync =/* (count_h <= H_SYNC - 1'b1) ? 1'b1 : 1'b0*/  1'b0 ;//场同步计数
always @(posedge tft_clk or negedge rst_n) beginif (!rst_n) begincount_v <= 11'b0; endelse    if ((count_v == V_TOTAL - 1'b1) && (count_h == H_TOTAL - 1'b1)) begincount_v <= 11'b0;endelse    if (count_h == H_TOTAL - 1'b1) begincount_v <= count_v + 1'b1;endelsecount_v <= count_v;
end
assign vsync = /*(count_v <= V_SYNC - 1'b1) ? 1'b1 : 1'b0  */   1'b0     ;//rgb信号有效rgb_valid
assign rgb_valid = (((count_h >= H_SYNC + H_BACK)&& (count_h < H_SYNC + H_BACK + H_VALID))&&((count_v >= V_SYNC + V_BACK)&& (count_v < V_SYNC + V_BACK + V_VALID))) ? 1'b1 : 1'b0;
//请求RGB像素信息rgb_request
assign rgb_request = (((count_h >= H_SYNC + H_BACK - 1'b1)&& (count_h < H_SYNC + H_BACK + H_VALID - 1'b1))&&((count_v >= V_SYNC + V_BACK)&& (count_v < V_SYNC + V_BACK + V_VALID))) ? 1'b1 : 1'b0;assign  pic_x = (rgb_request == 1'b1)? (count_h - (H_SYNC + H_BACK - 1'b1)) : 10'h3ff;
assign  pic_y = (rgb_request == 1'b1)? (count_v - (V_SYNC + V_BACK )) : 10'h3ff;//rgb_tft:输出像素点色彩信息
assign  rgb_data = (rgb_valid == 1'b1) ? pic_data : 16'b0 ;
endmodule //tft_ctrl

代码中控制行同步和场同步的信号被注释掉了,只有de信号,因此工作在DE同步模式。

4.图像控制模块

module tft_pic (input  wire tft_clk,input  wire rst_n,output  reg [15:0]  pic_data,input  wire [9:0]  pic_y,input  wire [9:0]  pic_x
);
parameter   H_VALID =   10'd800 ,   //行有效数据V_VALID =   10'd480 ;   //场有效数据parameter   RED     =   16'hF800,   //红色ORANGE  =   16'hFC00,   //橙色YELLOW  =   16'hFFE0,   //黄色GREEN   =   16'h07E0,   //绿色CYAN    =   16'h07FF,   //青色BLUE    =   16'h001F,   //蓝色PURPPLE =   16'hF81F,   //紫色BLACK   =   16'h0000,   //黑色WHITE   =   16'hFFFF,   //白色GRAY    =   16'hD69A;   //灰色
//pic_data:输出像素点色彩信息,根据当前像素点坐标指定当前像素点颜色数据
always@(posedge tft_clk or negedge rst_n)if(rst_n == 1'b0)pic_data    <= 16'd0;else    if((pic_x >= 0) && (pic_x < (H_VALID/10)*1))pic_data    <=  RED;else    if((pic_x >= (H_VALID/10)*1) && (pic_x < (H_VALID/10)*2))pic_data    <=  ORANGE;else    if((pic_x >= (H_VALID/10)*2) && (pic_x < (H_VALID/10)*3))pic_data    <=  YELLOW;else    if((pic_x >= (H_VALID/10)*3) && (pic_x < (H_VALID/10)*4))pic_data    <=  GREEN;else    if((pic_x >= (H_VALID/10)*4) && (pic_x < (H_VALID/10)*5))pic_data    <=  CYAN;else    if((pic_x >= (H_VALID/10)*5) && (pic_x < (H_VALID/10)*6))pic_data    <=  BLUE;else    if((pic_x >= (H_VALID/10)*6) && (pic_x < (H_VALID/10)*7))pic_data    <=  PURPPLE;else    if((pic_x >= (H_VALID/10)*7) && (pic_x < (H_VALID/10)*8))pic_data    <=  BLACK;else    if((pic_x >= (H_VALID/10)*8) && (pic_x < (H_VALID/10)*9))pic_data    <=  WHITE;else    if((pic_x >= (H_VALID/10)*9) && (pic_x < H_VALID))pic_data    <=  GRAY;elsepic_data    <=  BLACK;endmodule //tft_pic

5.顶层模块

module tft_rgb_colorbar (input  wire sys_clk,input  wire sys_rst_n,output  wire   hsync,output  wire   vsync,output  wire   tft_de,output  wire   tft_clk_out,output  wire   tft_bl,output  wire [15:0]  rgb_data
);wire tft_clk;
wire locked;
wire [9:0]  pic_y;
wire [9:0]  pic_x;
wire [15:0]  pic_data;
assign rst_n = (locked & sys_rst_n);
clk_gen u_clk_gen(.areset (~sys_rst_n),.inclk0 (sys_clk),.c0     (tft_clk),.locked (locked )
);tft_ctrl u_tft_ctrl(.tft_clk     (tft_clk     ),.rst_n       (rst_n       ),.pic_data    (pic_data    ),.pic_y       (pic_y       ),.pic_x       (pic_x       ),.rgb_data    (rgb_data    ),.hsync       (hsync       ),.vsync       (vsync       ),.tft_de      (tft_de      ),.tft_clk_out (tft_clk_out ),.tft_bl      (tft_bl      )
);tft_pic u_tft_pic(.tft_clk  (tft_clk  ),.rst_n    (rst_n    ),.pic_data (pic_data ),.pic_y    (pic_y    ),.pic_x    (pic_x    )
);endmodule //tft_rgb_colorbar

实验结果

(FPGA)verilog驱动RGB接口TFT液晶屏相关推荐

  1. ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条

    ZYNQ7020(黑金)纯verilog驱动4.3寸RGB接口TFT液晶屏(AN430)显示彩条 简介 像素(Pixel):像素是指由图像的小方格组成的,这些小方快都有一个明确的位置和被分配的色彩数值 ...

  2. S3C2440A驱动RGB接口TFT LCD的研究(转载)

    S3C2440A驱动RGB接口TFT LCD的研究 时间: 2009-02-25 11:29:50 来源:嵌入式在线 作者:纪宁宁,孙灵燕 1 引言     随着科技的进步,TFT LCD作为显示器件 ...

  3. 利用 STC32G12K128 的 LCM 驱动 8080 接口的液晶屏

    零.目录 零.目录 一.硬件和参考对象 二.STC32G 的 LCM 三.简要的初始化流程 四.代码的移植和修改 五.引脚接线 六.运行结果 七.总结和注意事项 一.硬件和参考对象 本次将使用 STC ...

  4. 树莓派GPIO驱动ST7735S主控TFT液晶屏显示图片和文字

    本文使用1.8''128*160RGB_TFT ST7735S主控的液晶屏来操作 参考blog:http://blog.mangolovecarrot.net/2017/03/05/raspi-stu ...

  5. stm32驱动rgb屏电路图_STM32直接驱动RGB接口的TFT数字彩屏设计

    STM32 直接驱动 RGB 接口的 TFT 数字彩屏设计 本文提出了一种由 STM32 的 FSMC 总线直接挂载 RGB 接口屏的方案,直接由一片 CPU(STM32F103VC) 来完成 TFT ...

  6. 【嵌入式】MCU(HC32F460)+SPI接口LCD液晶屏ILI9341 移植emWin记录1----点亮LCD屏

    目录 一 SPI屏的接线 二 SPI屏驱动初始化 三 SPI屏点亮 四 附录 一 SPI屏的接线 SPI屏的特点在于接线简单,只需要四根SPI线以及几个GPIO口即可驱动工作,但是由于非并口的,所以当 ...

  7. 全志H616开发板Orange Pi Zero2连接香橙派5寸TFT液晶屏的测试说明

    香橙派Zero2开发板采用全志H616 四核 64位处理器,拥有512MB/1GB 内存可选,集成千兆以太网卡.蓝牙5.0+双频WiFi(2.4GHz和5GHz).USB2.0.Micro-HDMI( ...

  8. 联盛德 HLK-W806 (六): I2C驱动SSD1306 128x64 OLED液晶屏

    目录 联盛德 HLK-W806 (一): Ubuntu20.04下的开发环境配置, 编译和烧录说明 联盛德 HLK-W806 (二): Win10下的开发环境配置, 编译和烧录说明 联盛德 HLK-W ...

  9. fpga硬件驱动TFT液晶屏-小结

    最近折腾了一下fpga,发现还真是不好搞,硬件描述语言和顺序代码的真的是天差地别,还好电路的底子还在一些.通过发挥不怕效率低,只要能运行的精神,终于把ili9320的初始化和写操作调通了.最后跑了下时 ...

  10. 基于STM32F103ZET6主控平台实现(SPI接口)OLED液晶屏驱动

    一个热爱代码的工程师,唯有凭借双手不断敲打,才可以快速提升实力! 本文谨以记录,日后相忘时再作复习,代码没有贵贱,既来之则安之. OLED液晶屏产品图和效果图 由上图我们知道:OLED液晶屏分别有GN ...

最新文章

  1. 爬虫入门到精通-HTTP协议的讲解
  2. html如何让边框变圆,CSS怎样做出自适应圆形边框?
  3. jquery之empty()与remove([expr])区别
  4. 怎么判断程序运行的当前目录在哪?关键词:根目录
  5. 关于 Boost.PropertyTree
  6. java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to field
  7. java怎么输入数据_java怎么键盘输入数据啊?
  8. linux 图片编辑 java_Java在Linux下 不能处理图形的解决办法 分享
  9. 1159 最大全0子矩阵
  10. 一个解析XML的VB类
  11. 计算机效果图线稿的制作方法,如何只用PS将线稿图变成高大上的效果图?
  12. 从零开始用 Windows C++ 桌面程序制作方舟同人游戏(五)
  13. easyUI——easyUI(入门)
  14. docker服务及镜像开机自动启动
  15. 遥控器控制项目(拷贝型遥控器+灵R1A)
  16. 蒂姆-库克于2010年5月14日在奥本大学毕业典礼上发表的演讲全文
  17. STM32下载程序至SRAM——基于正点原子精英STM32F103ZET6开发板
  18. 中国前10名的休闲服品牌企业信息化漫谈--S公司
  19. iPhone14也将支持拍月亮了,然而这可能是技术工程师的功劳
  20. python监控文件或目录大小_python监控文件或目录的变化(实例代码)

热门文章

  1. php fpm 测试,php-fpm – 配置详解(转)
  2. [BZOJ3503]-[CQOI2014]和谐矩阵-高斯消元
  3. Python之xlsx文件转csv文件
  4. UE4-角色摄像机镜头的设置
  5. 使用计算机编辑文档的同时 还可播放mp3,win7系统电脑怎么使用Windows Movie Maker剪辑音频文件...
  6. 测量电流传感器的放大倍数
  7. ICIP论文结构整理
  8. 网站如何被百度蜘蛛快速抓取?
  9. php 实现人脸识别功能
  10. 【黑灰产犯罪研究】DDOS攻击