摘要:给出了一种利用电子设计自动化( EDA) 软件对复杂可编程逻辑器件(CPLD) 进行设计以实现8 位发光二极管(LED) 显示驱动器的方法。设计结果表明, 用1 片Lattice 公司的ispLSI1032E(6000 门密度) 最多可以驱动12 位LED 显示器。文中还就如何减少资源进行了探讨,介绍了5 种方法。
发光二极管(LED) 显示驱动器是电路设计中经常使用的部件,例如MAX7219 和PS7219 。这些器件的功能非常多,能满足不同用户的设计需求,但对于许多设计者来说并不需要如此多的功能应用,此时可以借助电子设计自动化( EDA) 技术和复杂可编程逻辑器件(CPLD) 设计专用芯片。
本文给出了一种利用电子设计自动化( EDA) 软件对复杂可编程逻辑器件(CPLD) 进行设计以实现8 位发光二极管(LED) 显示驱动器的方法。设计结果表明,用1 片Lattice 公司的ispLSI1032E(6000 门密度)最多可以驱动12 位LED 显示器。本文还就如何减少资源进行了探讨,介绍了5 种方法。
1 LED 显示驱动器功能
本设计中,LED 显示驱动器采用流行的同步串行外设接口(SPI) ,使之可以方便地与各种常用单片机连接。该驱动器可以同时驱动8 位LED 数字显示器或64 个独立的LED ,还可以对每位数字单独控制、刷新,不需重写整个显示器。串行输入的16 位数据字中包含对某个LED 操作的地址和数据,如表1 和表2 所示。其中,D11~D8 是4 位地址,D7~D0 是8 位数据,D7 用于指示小数点的显示与否,D3~D0 用于确定LED 显示的数字。
2 电路设计
LED 显示驱动器电路组成如图1 所示。它包括4个模块:16 位移位寄存器、16 位锁存器、地址译码选择输出和扫描控制电路。输入信号有5 个:串行输入时钟、串行输入数据、数据装载输入load、扫描时钟和复位信号。电路的输出信号是8 个数据输出和8 个扫描输出,其中数据输出接LED 的8 个输入端,扫描输出接每个LED 的片选端。串行输入数据在时钟上升沿进入16 位移位寄存器,当16 位数据都进入后,装载数据load 的上升沿把16 位数据装入16 位锁存器。接着对16 位接收数据的D11~D8 位进行地址译码,根据译码结果将数据D7~D0 (实际上只是D7 、D3~D0 5位数据) 传给相应的LED 显示。
图1 LED 显示驱动器的电路结构
要达到对每位LED 单独控制的目的,必须使多个LED 共同显示,即当某个LED 显示时,必须不影响前面已显示的位。解决办法是利用锁存器将前1 位或多位锁存,这样需要8 个5 输入的锁存器。这是本电路中需用组合资源最多的地方。
如果采用静态显示输出,需要的输出引脚是64个, IO 资源不够,所以这里采用动态扫描显示的方法。扫描显示每次只选择一个LED ,并送出相应的数据,8个LED 在扫描时钟的作用下,利用状态机的状态循环依次显示。如果扫描速度足够快(1.5 kHz 以上) ,人眼是看不出有闪烁的。所有功能模块均采用硬件描述语言ABEL 编写并进行功能仿真。
需要指出的是,这里实现的功能都是实际中经常用到的,例如显示的数据实际上是带译码方式的。如果用户需要不译码方式,只需将8 位数据不经过译码模块处理直接输出。其他功能例如闪烁可以通过增加模块实现。这一点对于具有在系统可编程能力的CPLD/ FPGA 来说并不困难。
3 实现结果
本设计使用的CPLD器件是Lattice 公司的ispLSI1032E ,84 引脚,密度为6 000 个门,32 个通用逻辑模块( GLB) 单元。适配的结果占用了22 个GLB ,最高时钟速率达到65 MHz。如果驱动更多的LED ,则所需资源情况如表3 所示。
CPLD 的工作速度可以适应各种单片机。用CPLD 实现的LED 显示驱动器替代目前市场上的同类产品也有许多可取之处,例如减小电路板体积、功能更紧凑、修改更灵活方便等。
4 讨论
实现电路的功能是可编辑逻辑器件( PLD) 设计人员首先需要考虑的,另外,作为一个有经验的PLD 设计人员来说,还需要掌握如何用最少的资源求得功能的实现,这样设计出来的专用芯片才具有竞争力。减少芯片资源的占用可以采用下列5 种方法:
需要指出的是,本设计只从逻辑功能上实现8 位LED 驱动器,并没有考虑对具体LED 的驱动能力,实际电路中通常采用缓冲驱动器完成该功能。
文章评论(0条评论)
登录后参与讨论