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

时间:2025-07-25  作者: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来控制这些构建块。

猜您喜欢

塑料托盘因其轻便、耐用和易于清洗的特点,应用于多个领域。在物流和运输行业,塑料托盘被用于货物的搬运和存储,能够有效提高运输效率,减少损耗。在食品和药品行业,由于...
2009-05-11 00:00:00

保险丝作为重要的保护元件,起到了防止电路过载和短路的关键作用。明威作为知名的电气元件制造品牌,其一次性保险丝因质量稳定、性能优良而受到市场青睐。本文将围绕“明威...
2021-02-15 07:32:30

立创服务是一项致力于为客户提供高品质电子元器件采购体验的专业服务。立创服务的参数包括丰富的产品种类,涵盖了从单片机、传感器到各种被动元件的选择,满足不同项目需求...
2015-08-26 00:00:00

贴片电阻上的5101标识代表着的阻值。这是一种标准的四位数代码表示法,其中前三位数字表示有效数字,最后一位数字表示10的幂次方。具体来说,对于5101这个标识:...
2024-11-29 10:25:59

合金电阻优异的性能和稳定的特性被应用于各种电子设备中。作为合金电阻行业的知名品牌,正邦(JPCON)凭借高品质和技术创新赢得了众多客户的信赖。面对市场上众多型号...
2022-11-04 19:06:00

贴片电阻上的「4703」代表其阻值为47千欧姆。这四个数字采用EIA-96标准的编码方式。前两位数字「47」代表有效数字,第三位数字「0」代表乘数,也就是10的...
2024-11-26 11:30:02

在选择适合的箱/炉时,规格尺寸是一个非常重要的因素。不同的使用场景和需求,决定了我们对尺寸的不同要求。箱子的尺寸通常包括长、宽、高,而炉子的规格则可能涉及内腔尺...
2016-08-26 00:00:00

放大镜是实用的光学工具,其主要优势体现在多个方面。放大镜能够清晰放大物体的细节,帮助人们更好地观察微小的文字、图案和纹理,尤其适合老年人和视力较弱者使用。放大镜...
2009-11-26 00:00:00

电阻器作为电子元件中的基础部件,是重要配件。华润电阻作为国内知名的电子元器件品牌,其合金电阻产品因优良的性能和稳定的质量赢得了市场认可。本文将全面介绍华润电阻合...
2016-10-30 05:24:30

与传统成像系统相比,偏振成像系统通过探测目标物在不同状态下的明显偏振差异,提高对目标物的探测和识别能力,因而被广泛应用于复杂环境或有伪装物的目标探测。特别是短波...
2023-07-17 10:36:00