赞
踩
(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)仿真波形:
第35列的第216个像素点是有效的第一行第一列数据。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。