FPGA驱动SPI接口的LCD(二)——SPI写模块lcd_write

一、lcd_write模块框图

1、输入端口部分

sys_clk_50MHz:与EP4CE10E22C8N的系统时钟相关,为50MHz。

sys_rst_n:低电平系统复位。

data:设为9位,最高位用于寄存器/数据选择信号,0:寄存器,1:数据。

en_write:使能lcd_write模块。

2、输出端口部分

wr_done:传输完成标志信号。

cs:cs片选信号,低电平有效。

dc:液晶屏寄存器/数据选择信号,低电平:寄存器,高电平:数据。

sclk:SPI时钟信号。

mosi:SPI写数据信号。

二、波形图与状态机

1、操作时序

该lcd模块接口为4-wire SPI interface。

查看ILI9341的数据手册。

选用SPI0模式,空闲时scl为低电平,在上升沿采样,下降沿更新数据。

时序方面主要关注twc串行时钟周期和tcss芯片选择时间。

twc串行时钟周期可知其最小的周期为100ns,我们需要把系统时钟降频,使sclk符合其要求。

tcss芯片选择时间为片选信号拉低到第一个数据被采集的时间,至少40ns。只需要保证在更新第一个数据的同时拉低cs即可。

2、状态机

用状态机来描叙这个流程。代码图3-3处实现。

 3、波形图绘制

根据时序自己设计波形图。 

借用野火的画波形图规范,绿色底代表输出端口,黄色底代表定义变量,红色底代表输出端口。

三、代码编写

部分解析嵌在代码里面。

该模块为了适用性更广,把SPI1模式、SPI2模式和SPI3模式也考虑进去。

代码图3-1

代码图3-2

代码图3-3

代码图3-4

注意:cnt_delay至少要计数到3然后进入状态STATE2,LCD才正常显示。

代码图3-5

代码图3-6

代码图3-7

代码图3-7对应的波形图部分如下所示 ,在SPI1和SPI3模式下拉高sclk_flag虚线部分。

代码图3-8

代码图3-9

代码图3-10

代码图3-10对应的波形图部分如下 。

代码图3-11

代码图3-12

四、仿真代码与ModelSim仿真波形图

1、仿真代码

`timescale 1ns/1ns

module tb_lcd_write();
reg             sys_clk_50MHz;
reg             sys_rst_n    ;
reg     [8:0]   data         ;
reg             en_write     ;

wire            wr_done      ;
wire            cs           ;
wire            dc           ;
wire            sclk         ;
wire            mosi         ;

initial
begin
    sys_clk_50MHz <= 1'b1;
    sys_rst_n     <= 1'b0;
    data          <= 9'd0;
    en_write      <= 1'b0;
    #100
    sys_rst_n     <= 1'b1;
    data          <= 9'h1ae;
    #100
    en_write      <= 1'b1;
end

always #10 sys_clk_50MHz <= ~sys_clk_50MHz;

lcd_write  lcd_write_inst
(
    .sys_clk_50MHz (sys_clk_50MHz),
    .sys_rst_n     (sys_rst_n    ),
    .data          (data         ),
    .en_write      (en_write     ),

    .wr_done       (wr_done      ),
    .cs            (cs           ),
    .dc            (dc           ),
    .sclk          (sclk         ),
    .mosi          (mosi         )
);

endmodule

2、仿真波形图

  • 5
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值