当前位置:   article > 正文

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

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

(1)Visio视图:

(2)控制模块Verilog代码:

  1. module tft_ctrl(
  2. input clk_33M ,
  3. input reset_n ,
  4. input [23:0] data_in ,
  5. output [9:0] hang ,
  6. output [9:0] lie ,
  7. output hsync ,
  8. output vsync ,
  9. output [23:0] rgb_tft ,
  10. output tft_bl ,
  11. output tft_clk ,
  12. output tft_DE
  13. );
  14. reg [10:0] hang_cnt ;
  15. reg [9:0] v_cnt ;
  16. wire data_vaild ;
  17. parameter H_SYNC = 128 ;
  18. parameter H_BACK = 88 ;
  19. parameter H_VAILD = 800 ;
  20. parameter H_FRONT = 40 ;
  21. parameter H_TOTAL = 1056 ;
  22. parameter V_SYNC = 2 ;
  23. parameter V_BACK = 33 ;
  24. parameter V_VAILD = 480 ;
  25. parameter V_FRONT = 10 ;
  26. parameter V_TOTAL = 525 ;
  27. //行计数器设计
  28. always@(posedge clk_33M or negedge reset_n)
  29. if(!reset_n)
  30. hang_cnt <= 11'd0;
  31. else if(hang_cnt == H_TOTAL - 11'd1)
  32. hang_cnt <= 11'd0;
  33. else
  34. hang_cnt <= hang_cnt + 11'd1;
  35. //场计数器设计
  36. always@(posedge clk_33M or negedge reset_n)
  37. if(!reset_n)
  38. v_cnt <= 10'd0;
  39. else if ((v_cnt == V_TOTAL - 10'd1) && (hang_cnt == H_TOTAL - 11'd1))
  40. v_cnt <= 10'd0;
  41. else if(hang_cnt == H_TOTAL - 11'd1)
  42. v_cnt <= v_cnt + 10'd1;
  43. else
  44. v_cnt <= v_cnt;
  45. //数据有效信号设计
  46. assign data_vaild = (hang_cnt >= H_SYNC + H_BACK) && (hang_cnt < H_SYNC + H_BACK + H_VAILD)
  47. && (v_cnt >= V_SYNC + V_BACK) && (v_cnt < V_SYNC + V_BACK + V_VAILD);
  48. //行、列信号设计
  49. assign hang = ( data_vaild ) ? (hang_cnt - H_SYNC - H_BACK + 1'd1) : 10'd0;
  50. assign lie = ( data_vaild ) ? (v_cnt - V_SYNC - V_BACK + 1'd1) : 10'd0;
  51. //行同步、场同步信号设计
  52. assign hsync = (hang_cnt >= H_SYNC);
  53. assign vsync = (v_cnt >= V_SYNC);
  54. //rgb_tft、tft_bl、tft_clk、tft_DE信号设计
  55. assign rgb_tft = (data_vaild) ? data_in : 24'd0;
  56. assign tft_bl = 1'd1;
  57. assign tft_clk = clk_33M;
  58. assign tft_DE = data_vaild;
  59. endmodule

(3)仿真代码:

  1. `timescale 1ns / 1ps
  2. module tft_ctrl_tb;
  3. reg clk ;
  4. reg reset_n ;
  5. wire [23:0] data_in ;
  6. wire locked ;
  7. wire clk_33M ;
  8. wire [9:0] hang ;
  9. wire [9:0] lie ;
  10. wire hsync ;
  11. wire vsync ;
  12. wire [23:0] rgb_tft ;
  13. wire tft_bl ;
  14. wire tft_clk ;
  15. wire tft_DE ;
  16. initial clk = 1'd1;
  17. always #10 clk = ~clk;
  18. initial begin
  19. reset_n <= 1'd0;
  20. #15;
  21. reset_n <= 1'd1;
  22. #20_000_000;
  23. $stop;
  24. end
  25. assign data_in = ((hang >= 10'd1) && (lie >= 10'd1)) ? 24'h111_111 : 24'd0 ;
  26. PLL_33M PLL_33M_inst
  27. (
  28. .clk_33M (clk_33M ),
  29. .resetn (reset_n ),
  30. .locked (locked ),
  31. .clk_in1 (clk )
  32. );
  33. tft_ctrl tft_ctrl_inst(
  34. .clk_33M (clk_33M ),
  35. .reset_n (locked ),
  36. .data_in (data_in ),
  37. .hang (hang ),
  38. .lie (lie ),
  39. .hsync (hsync ),
  40. .vsync (vsync ),
  41. .rgb_tft (rgb_tft ),
  42. .tft_bl (tft_bl ),
  43. .tft_clk (tft_clk ),
  44. .tft_DE (tft_DE )
  45. );
  46. endmodule

(4)仿真波形:

  • PLL仿真波形:

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

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

  • 行信号、列信号:

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/889411?site
推荐阅读
相关标签
  

闽ICP备14008679号