Mojo v3 FPGA板与16x2 LCD模块是如何进行连接的呢?

时间:2025-11-02  作者:Diven  阅读:0

在本教程中,我们将使用Verilog HDL设计一个数字电路,该电路与基于HD44780 LCD控制器/驱动芯片的通用LCD模块连接。Mojo V3 FPGA板将用于实现设计。本文中使用的LCD模块是1602A显示器。

Mojo v3 FPGA板与16x2 LCD模块是如何进行连接的呢?

HD44780兼容LCD模块

之前我们讨论了使用HD44780 LCD控制器/驱动芯片的LCD模块的详细信息。这些LCD模块的引脚排列如图1所示。图1.图片由AAC提供

如你所见,有三个控制引脚(RS、R / W和E)以及八个数据引脚(DB7至DB0)。对于写操作,我们需要对这些引脚施加适当的电压,如下面图2的时序图所示。图2.图片由HITACHI提供

上述时序图的不同延迟值如下表所示:表1.由HITACHI提供

有几条指令可用于配置LCD模块。下面列出了一些重要说明。

表2

路径1

我们想在液晶显示屏上显示“HELLO WORLD!”信息。让我们来看看数字系统需要与LCD模块通信的构建模块。我们需要一个ROM来存储消息字符的ASCII码。如图3所示,ROM的输出将连接到LCD模块的8个数据引脚。

图3

“HELLO WORLD!”消息有12个字符,我们可以使用128位ROM来存储消息。但是,让我们考虑为消息提供一个168位的ROM,这样我们就可以显示长达16个字符的消息(LCD第一行的长度)。如果我们的消息最长为16个字符,你可能想知道为什么上图显示的是一个208位ROM。这些额外的四个字节将用于存储与允许我们配置模块相关的LCD指令相关的数据。例如,如表2中所列,我们可以将十六进制值0x38应用于LCD数据引脚,以指定LCD模块应以8位长度接收/发数据。就像字符代码一样,命令的十六进制值应用于数据引脚,我们可以将这两个命令存储在同一个ROM中。

在本文中,我们将使用四个命令(0x38、0x06、0x0C和0x01)来配置LCD。你可以在表2中找到这些命令的简要说明。我们有一个208位ROM,其中前四个字节是0x38、0x06、0x0C和0x01。接下来的16个字节存储消息的ASCII码。考虑到图2的时序图,我们观察到应用于DB7-DB0的数据在一定时间内不应发生变化,以便LCD能够成功读取数据。如图3所示,我们需要一组D型触发器(DFF)来保持ROM地址(DB7-DB0)在一段时间内保持恒定。LCD读取数据后,我们需要将地址值增加1,将下一个字符/命令应用到LCD。如图4所示,应在DFF之前放置多路复用器和增量器。图4

使用多路复用器的选择输入,我们可以指定地址值应该保持不变(S1=0)还是增加(S1=1)。多路复用器有第三个选项,允许我们将地址值重置为00000。这也可以通过重置DFF来实现。我们将所有这些块称为路径1,如图所示。正如本文后面所讨论的,我们将使用S 1 信号来控制路径1 块内的电路。该地址寄存器信号将被用来监视路径1的状态。值得一提的是,虽然上图只显示了一个DFF,但实际上有五个DFF(因为20字节ROM需要一个5位地址总线)。

实现延迟

如上所述,应用于LCD控制输入的波形应遵循图2的时序图。在RW和RS引脚改变状态后,我们必须等待t AS,然后再将E引脚设置为逻辑高电平。然后,E上的从高到低的转换开始写操作。但是,在E的下降沿之前(t DSW)和之后(t H)的一段时间内,数据应该保持不变。为了成功地与LCD通信,我们必须实现延迟TAS、T DSW和t h。这可以通过计数器实现。由于我们有时需要暂停计数器或重置,我们将在计数器的DFF之前放置一个多路复用器。如下图5所示。图5

通过这种方式,我们可以使用S2输入来控制计数器,而cnt_reg输出将给出计数器的状态,这表示经过的时间。根据时序图,我们需要三个不同的时间延迟:tAS=40ns,tDSW=80ns,tH=10ns。注意到Mojo V3板的时钟频率为50 MHz(时钟周期为20 ns),我们可以计算每个时间延迟所需的计数。

事实证明我的16x2 LCD需要更长的延迟才能运行。这可能是因为我使用相对较长的电线和面包板来测试我的设计。在本文中,我将实现tAS=10ms和tH=3 ms。我会将E信号保持高电平58ms(PWEH=58 ms)。我的设计应该可以使用更短的延迟。你可以进行一些实验并根据你的设计调整这些数字。计数器需要多少位?选择延迟后,总延迟将为10+58+3ms=71 ms。考虑到Mojo的时钟周期(20 ns),从0到3549999可以实现71 ms的延迟。如图5所示,我们需要一个22位计数器。

控制路径

我们需要的最后一个构建块是一个 适当控制路径1和路径2块的单元,以便为LCD模块生成所需的波形。这可以通过有限状态机(FSM)实现,可以接收addr_reg和cnt_reg信号(路径1和路径2的状态)并生成适当的s1和s2信号。该FSM的初始设计如图6所示。图6

请注意,该图仅显示状态转换(未显示FSM的输出)。有三种状态:在空闲 状态期间,信号获得其初始值。所述lcd_init状态应用于液晶配置命令;这就是状态转换条件为addr_reg = 3 && cnt_reg = 3550000的原因。换句话说,我们有四个命令,并且当所述第四命令(addr_reg = 3)被施加到LCD 71毫秒(cnt_reg = 3550000)时,我们应该将消息数据发送到LCD lcd_print状态。当我们到达ROM的末尾(addr_reg = 19)时,我们应该等待71 ms(cnt_reg = 3550000),然后转换到空闲状态。项目的困难部分几乎完成了。现在,我们只需要设计FSM并编写其Verilog代码。

对于FPGA,我们通常必须在设计的最低层次上查看问题。我们所拥有的是逻辑门和一些基本构建模块,如加法器和比较器。虽然这使FPGA设计变得困难,但FPGA确实提供了几个优点。在本文中,我们研究了将FPGA与通用16x2 LCD模块连接的构建模块。需要ROM、一些DFF和多路复用器来实现FPGA到LCD接口。我们需要一个FSM来控制这些构建块。

猜您喜欢

贴片电阻上的数字和字母代表其阻值和容差。读取这些信息的关键在于理解标识系统。大多数贴片电阻使用三位数代码标注阻值。前两位数字代表有效数字,第三位数字代表10的幂...
2025-04-14 15:02:31

同步动态随机存取内存(SDRAM)是应用于计算机和电子设备中的内存类型,因其高效的性能和速度而受到青睐。根据不同的工作原理和技术特点,SDRAM可以分为几种主要...
2012-12-10 00:00:00

中间对接端子是重要的电气连接器件,应用于电子设备和电气工程中。基本功能是实现电气线路之间的连接与断开,确保电流的顺畅流动。中间对接端子通常由导体、绝缘材料和固定...
2016-07-21 00:00:00

贴片电阻上的150代表其阻值为150欧姆。贴片电阻通常使用数字编码来表示阻值。三位数字编码是最常见的,其中前两位数字表示有效数字,第三位数字表示乘数,即10的幂...
2024-11-29 10:25:56

现代照明技术中,发光二极管(LED)和LED灯是两个常被提及的概念。虽然在日常生活中被使用,但很多人对具体区别并不明确。本文将为您详细解析发光二极管和LED灯之...
2025-04-07 13:30:34


LED灯以其节能环保的优势,已经走进了千家万户。然而,不少人却遇到过LED灯驱动器容易坏的问题,令人十分头疼。 别担心,其实只要找准原因,就能有效避免驱动器频频...
2024-09-23 00:00:00

海洋是地球上最大的水体,它对人类的生存和发展具有重要的作用。 然而,海洋也面临着各种来源和类型的污染物的威胁,如重金属、有机物、营养盐、微塑料等。 这些污染...
2024-07-20 08:12:00

橡胶锤是常用的工具,应用于木工、石工和其需要敲击的工作中。根据不同的用途和材料,橡胶锤可以分为几种主要类型。按材料分类,橡胶锤可以分为天然橡胶锤和合成橡胶锤。天...
2016-05-29 00:00:00

YAGEO(国巨)作为全球知名的电子元器件制造商,其贴片排阻产品在业界享有盛誉。本文将详细介绍YAGEO品牌的国家归属、发展历程、产品特点及其在电子产业中的重要...
2019-04-12 21:02:18