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

一、概述

 

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

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

FPGA驱动LCD1602(IIC) Verilog代码(四)------ 顶层模块_第1张图片

         顶层模块代码如下


二、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每次重新下载显示的时候最好还是断电再上电,然后复位板子,不然可能现象不是很多(可能是因为自动移位的原因把)

你可能感兴趣的:(FPGA学习,fpga开发,verilog)