新手上路
- 积分
- 39
- 金钱
- 39
- 注册时间
- 2020-5-19
- 在线时间
- 5 小时
|
1金钱
想用fpga实现32里的lcd屏显示,尺寸为240*320
请问我的配置哪里有问题
module lcd_config(
input clk_ref , //360khz
input rst_n ,
input [15:0] data_in ,
output reg lcd_dcx ,
output reg lcd_csx ,
output reg lcd_wrx ,
output reg lcd_rdx ,
output reg lcd_rst ,
output [15:0] lcd_data ,
output [9:0] x_pos ,
output [9:0] y_pos
);
reg [15:0] data_r;
reg [9:0] x_cnt;
reg [9:0] y_cnt;
reg [15:0] delay_cnt;
reg [9:0] state_cnt;
assign lcd_data = data_r ;
assign x_pos = x_cnt ;
assign y_pos = y_cnt ;
always @(posedge clk_ref or negedge rst_n) begin
if (!rst_n) begin
delay_cnt <= 16'd0;
state_cnt <= 10'd0;
data_r <= 16'd0;
x_cnt <= 10'd0;
y_cnt <= 10'd0;
lcd_csx <= 1'b1;
lcd_rst <= 1'b1;
lcd_wrx <= 1'b0;
lcd_dcx <= 1'b0;
lcd_rdx <= 1'b0;
end
else begin
case(state_cnt)
10'd0 : begin //硬复位
lcd_rst <= 1'd0;
lcd_csx <= 1'b0;
state_cnt <= state_cnt + 1'b1;
end
10'd1 : begin //延时100ms
if(delay_cnt < 16'd36_000) begin
delay_cnt <= delay_cnt + 1'b1;
end
else begin
state_cnt <= state_cnt + 1'b1;
delay_cnt <= 16'd0;
lcd_rst <= 1'b1;
end
end
10'd2 : begin //软复位
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h01;
state_cnt<= state_cnt + 1'b1;
end
10'd3 : begin //写信号上升沿
lcd_wrx <= 1'b1;
state_cnt<= state_cnt + 1'b1;
end
10'd4 : begin //延时5ms
if(delay_cnt < 16'd1800) begin
delay_cnt <= delay_cnt + 1'b1;
end
else begin
delay_cnt <= 16'd0;
state_cnt <= state_cnt + 1'b1;
end
end
10'd5 : begin //睡眠模式关闭
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h11;
state_cnt<= state_cnt + 1'b1;
end
10'd6 : begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd7 : begin //delay 120ms
if(delay_cnt < 16'd43200) begin
delay_cnt <= delay_cnt + 1'b1;
end
else begin
delay_cnt <= 16'd0;
state_cnt <= state_cnt + 1'b1;
end
end
10'd8 : begin //打开正常模式
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h13;
state_cnt<= state_cnt + 1'b1;
end
10'd9 : begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd10: begin //开显示
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h29;
state_cnt<= state_cnt + 1'b1;
end
10'd11: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd12: begin //列地址设置
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h2a;
state_cnt<= state_cnt + 1'b1;
end
10'd13: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd14: begin //列地址参数sc 15:8
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd15: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd16: begin //列地址参数sc 7:0
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd17: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd18: begin //列地址参数ec 15:8
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd19: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd20: begin //列地址参数ec 7:0
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'hef;
state_cnt<= state_cnt + 1'b1;
end
10'd21: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd22: begin //页地址设置
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h2b;
state_cnt<= state_cnt + 1'b1;
end
10'd23: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd24: begin //页地址参数sp 15:8
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd25: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd26: begin //页地址参数sp 7:0
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd27: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd28: begin //页地址参数ep 15:8
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h01;
state_cnt<= state_cnt + 1'b1;
end
10'd29: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd30: begin //页地址参数ep 7:0
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h3f;
state_cnt<= state_cnt + 1'b1;
end
10'd31: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd32: begin //存储器访问控制
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h36;
state_cnt<= state_cnt + 1'b1;
end
10'd33: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd34: begin //参数
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd35: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd36: begin //像素格式控制
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h3a;
state_cnt<= state_cnt + 1'b1;
end
10'd37: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd38: begin //参数
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h55;
state_cnt<= state_cnt + 1'b1;
end
10'd39: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd40: begin //帧率控制
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'hb1;
state_cnt<= state_cnt + 1'b1;
end
10'd41: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd42: begin //参数
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h00;
state_cnt<= state_cnt + 1'b1;
end
10'd43: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd44: begin //参数
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h15;
state_cnt<= state_cnt + 1'b1;
end
10'd45: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd46: begin //显示功能控制
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'hb6;
state_cnt<= state_cnt + 1'b1;
end
10'd47: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd48: begin //参数
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h0a;
state_cnt<= state_cnt + 1'b1;
end
10'd49: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd50: begin //参数
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h82;
state_cnt<= state_cnt + 1'b1;
end
10'd51: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd52: begin //写入数据命令
lcd_dcx <= 1'b0;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= 8'h2c;
state_cnt<= state_cnt + 1'b1;
end
10'd53: state_cnt<= state_cnt + 1'b1;
10'd54: begin
state_cnt<= state_cnt + 1'b1;
lcd_wrx <= 1'b1;
end
10'd55: state_cnt<= state_cnt + 1'b1;
10'd56: begin
lcd_dcx <= 1'b1;
lcd_wrx <= 1'b0;
lcd_rdx <= 1'b1;
data_r <= data_in;
state_cnt<= state_cnt + 1'b1;
end
10'd57: state_cnt<= state_cnt + 1'b1;
10'd58: begin //写信号上升沿到来时,写入数据同时计数xy轴
lcd_wrx <= 1'b1;
if(x_cnt < 10'd239) begin
x_cnt <= x_cnt + 1'b1;
state_cnt <= 10'd55;
end
else begin
x_cnt <= 10'd0;
if(y_cnt < 10'd319) begin
y_cnt <= y_cnt + 1'b1;
state_cnt <= 10'd55;
end
else begin
y_cnt <= 10'd0;
state_cnt <= 10'd52;
end
end
end
default : state_cnt <= 10'd0;
endcase
end
end
endmodule
|
|