(1)顶层文件:
module tft_colorbar(
input clk ,
input reset_n ,
output hsync ,
output vsync ,
output [23:0] rgb_tft ,
output tft_bl ,
output tft_clk ,
output tft_DE
);
wire locked ;
wire clk_33M ;
wire [23:0] data_in ;
wire [9:0] hang ;
wire [9:0] lie ;
wire [23:0] data ;
assign data_in = data ;
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 )
);
data_gen data_gen_inst
(
.hang (hang),
.lie (lie),
.clk_33M (clk_33M),
.reset_n (locked),
.data (data)
);
endmodule
(2)仿真文件:
`timescale 1ns / 1ps
module tft_colorbar_tb;
reg clk ;
reg reset_n ;
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;
#22;
reset_n <= 1'd1;
#20_000_000;
$stop;
end
tft_colorbar tft_colorbar_inst
(
.clk (clk ),
.reset_n (reset_n ),
.hsync (hsync ),
.vsync (vsync ),
.rgb_tft (rgb_tft ),
.tft_bl (tft_bl ),
.tft_clk (tft_clk ),
.tft_DE (tft_DE )
);
endmodule
(3)RTL视图:
(4)仿真波形:
- 在第22秒拉高reset_n
- 在第4380ns时,locked信号拉高,在这之后测试clk_33M信号,确定它的频率为33MHz
- 在第128个像素点,行同步信号拉高
- 在每一行计数器清零后,场计数器加一
- 在场计数器计数到2时,场同步信号拉高
- 在第35行第216个像素点时,有效信号被拉高,行、列信号开始输出,而由于data生成模块采用时序逻辑的原因,data[23:0]会滞后一个时钟周期。
- 整体来看,rgb_tft[23:0]在每一行都会呈现赤橙黄绿青蓝紫黑白灰10色交替出现的现象,另外由于数据有效信号data_vaild的存在,每一行的灰色不会因为时序逻辑而蔓延到有效区域外。
(5)因为本人不小心把A7开发板fpc底座拔坏了,因此改用AC620进行实验,使用36pin的排针连接,颜色模式改为RGB565,修改代码如下:
module tft_colorbar(
input clk ,
input reset_n ,
output hsync ,
output vsync ,
output [15:0] rgb_tft ,
output tft_bl ,
output tft_clk ,
output tft_DE
);
wire locked ;
wire clk_33M ;
wire [15:0] data_in ;
wire [9:0] hang ;
wire [9:0] lie ;
wire [15:0] data ;
assign data_in = data ;
PLL_33M PLL_33M_inst (
.areset ( ~reset_n ),
.inclk0 ( clk ),
.c0 ( clk_33M ),
.locked ( locked )
);
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 )
);
data_gen data_gen_inst
(
.hang (hang),
.lie (lie),
.clk_33M (clk_33M),
.reset_n (locked),
.data (data)
);
endmodule
(6)引脚绑定: