FPGA驱动LCD1602(IIC) Verilog代码(四)------ 顶层模块

一、概述

 

        顶层模块就是例化lcd初始化模块和写命令/数据模块,然后把两个模块连接起来就完成了

        先贴一下最后实现的效果图

         顶层模块代码如下


二、Verilog代码

module lcd_drive(
	input clk,		//时钟信号 50m
	input rst_n,	//按键复位
	output scl,		//iic scl
	inout sda		//iic sda
);

wire clk_1m;		//1m的时钟信号
wire done_write;	//一次数据/命令写完成
wire [7:0] data;	//写的字节
wire cmd_data;		//数据还是命令 0:命令,1:数据
wire ena_write;	//使能写数据/命令模块

//时钟分频模块 产生1M的时钟
clk_fenpin clk_fenpin_inst(
	.clk(clk),
	.rst_n(rst_n),
	.clk_1m(clk_1m)
);

//lcd初始化模块
lcd_init u_lcd_init(
	.clk(clk_1m),
	.rst_n(rst_n),
	.ena(1'b1),
	.done_write(done_write),
	.data(data),
	.cmd_data(cmd_data),
	.ena_write(ena_write)
);

//lcd写命令/数据模块
lcd_write_cmd_data u_lcd_write_cmd_data(
	.clk(clk_1m),
	.rst_n(rst_n),
	.ena(ena_write),
	.data(data),
	.cmd_data(cmd_data),
	.sda(sda),
	.scl(scl),
	.done(done_write)
);

endmodule

三、小结

  1. 注意iic的时序,开始、停止和等待ack
  2. 多使用仿真和singal tap寻找问题,仿真不对就不要先下载到板子上,现象也大概率不会对的,不能心急,必须先保证仿真出正确的结果再开始下载到板子上。现象不对再使用singal tap寻找问题
  3.  使用小建议:lcd每次重新下载显示的时候最好还是断电再上电,然后复位板子,不然可能现象不是很多(可能是因为自动移位的原因把)
  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值