新手上路 
 
	- 积分
 - 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 
 
 
 |   
 
 
 
 
 
 |