当前位置:首页 > 电源 > 数字电源
[导读]为了解决CPU处理速度快,而液晶显示模块处理速度慢的矛盾,提高系统的运行的速度。利用FPGA以及异步FIFO的IP核实现液晶显示接口,在CPU和液晶模块之间建立一个FIFO缓冲区。同时根据液晶模块控制的流程设计了一个有限状态机,对液晶的数据命令信号进行控制,满足液晶模块读写的时序,实现了液晶模块控制命令以及显示数据的正确写入。测试结果表明,整个接口设计实现方式简单,可靠。

现在继电保护或者测控装置的CPU大都使用TI的DSP或者飞思卡尔的POWERPC处理器,这些处理器速度快,主频已经达到几百M甚至1 G,但是这类装置的显示部分还是在使用基于行驱动器KSOl07B和列驱动器KS0108B的液晶显示模块。这些液晶显示模块价格低,控制简单,但液晶控制器速度慢,每写入1个字节的数据或命令大约需要5μs。一般情况下,液晶显示模块控制方式有高速CPU直接控制和附加单片机协助高速CPU控制液晶显示模块两种。前者产生的问题是处理器与液晶显示模块的速度严重失配,大大占用CPU的开销,后者产生的问题是系统结构复杂,增加了系统开发的难度。因此这里提出一种利用XIUNX公司可编程逻辑器件FPGA实现异步FIFO和有限状态机控制液晶显示模块的方法,CPU只需要把显示数据写入高速FIFO缓冲器,写完一整屏数据后,由FPGA实现的液晶控制模块读出数据并写入到液晶模块,这样可以大幅度提高CPU的利用率,同时系统结构简单,易于实现。

1 液晶显示模块介绍
    128×64液晶显示模块是使用2片KS0108B作为列驱动器,1片KS0107B作为行驱动器组成的,另外还带有负压发生电路。由于KS0107B不与FPGA发生联系。因此只要提供电源就能产生行驱动信号以及各种同步信号。每个KS0108B器件控制8页(每页8行像素)、64列像素的屏幕区域,因此两个列控制器正好控制64行、128列的像素矩阵,左右半屏由其,引脚控制选择。列控制器KS0108B的主要特点如下:内置64×64共4 096位显示RAM,RAM中每位数据对应LCD屏上一个点的亮暗状态;64路列驱动输出;读写操作时序与68系列微处理器相符,因此,它可直接与68系列微处理器接口相连;占空比为1/32~1/64。图1为KS0108B的显示RAM的地址结构。表1为128×64液晶显示模块的指令列表,表2为其引脚功能描述。

 [!--empirenews.page--]

 

 


2 基于免费IP核实现异步FIFO的设计
    设计所用的FPGA器件是XIUNX公司的XC3S100E,XC3S100E是SPARTAN3E系列的一款最低容量的FPGA,此系列FPGA利用90 nm工艺实现低成本高容量的需求,XC3S100E具有以下资源:2160个逻辑单元;RAM资源87 kb(其中BLOCK RAM 72 kb,分布式RAM 15 kb);2个DCM;4个乘法器:可实现FIFO等多个IP核。
    在XILINX ISElO.1集成开发工具下,容易利用XININX免费IP核实现异步FIFO。异步FIFO是在2个相互独立的时钟域下,数据在一个时钟域写入FIFO,而在另一个时钟域下又从该FIFO中将数据读出。异步FIFO通常被用来将数据从一个时钟域安全传送到另一个时钟域。在本设计中,FIFO和液晶控制(LCD_CONTROL)模块作为CPU和液晶显示模块之间的桥梁,使用FIFO作为输入缓冲器,由CPU将需要显示的字符或者图形数据写入FIFO,每写完一屏需要显示的字符以及图形便向液晶控制模块发送一个高电平信号,用来通知液晶控制模块读取FIFO中的图形或者字符数据,以便将此数据写入到128x64单色液晶显示模块中,这样比CPU直接控制液晶模块效率要高的多。[!--empirenews.page--]
    异步FIFO中的写时钟WR_CLK、WR_EN以及FULL标志是用来控制数据写入的,在时钟的上升沿,如果写使能有效,则数据就会写入FIF0,如果持续写入,数据就会写满,这时FULL信号就会有效,表示FIF0已经写满。同理读时钟RD_CLK、RD_EN以及EMPTY标志是用来控制数据读出的,在时钟的上升沿,如果读使能有效,则数据就会读出FIFO,如果持续读出,数据就会读空,这时EMPTY信号就会有效,表示FIF0已经读空。FULL/EMPTY标志能够防止数据上溢和上溢,也可以用来控制数据的写入和读出。在本设计中,FULL标志表示CPU已经把FIF0写满,液晶控制模块开始把FIFO中的数据读出同时写到液晶显示模块中。EMPTY标志表示液晶控制模块已经把FIFO读空,即把FIF0中所有的数据写入到液晶显示模块中。实际上,在本设计中,FULL/EMPTY就是CPU和液晶控制模块的握手信号,当FIF0空时,CPU才可以往液晶控制模块中写入数据,当FIF0写满时,液晶控制模块才能从FIF0中读取数据。图2为系统设计框图,图中写入控制逻辑部分包括译码和信号整形电路,通过这些电路使CPU向FIFO写数据时写使能信号WR_EN,写时钟信号WR_CLK的正确的时序关系,实现数据正确写入。


    异步FIF0 IP核的参数指标直接影响FIFO的写入速度,首先FIF0的写入速度快能够减少CPU的开销,使CPU写满FIF0花费时间更少,这样CPU可以有更多时间完成实时性更高的任务。其次FIFO的存储深度要适宜,深度过大造成资源的浪费,深度过小会造成控制复杂,这样将占用更多的逻辑资源,同时会降低整个系统的可靠性。本设计中的异步FIFO是利用ISEl0.1中的参数化的IP核在XC3S100E器件的实现。由于液晶显示模块共有128 x64个像素,每个字节可以控制8个像素,所以一个整屏共占用l 024个字节的缓冲区,所以在参数化的FIF0设计中选择FIF0深度为1 024,宽度为8位。

3 基于FPGA的液晶控制模块
    由液晶指令列表(表1)和KS0108B的显示RAM地址结构(图1)可以看出,128x64液晶显示模块的控制相对简单,页地址范围为B8H~BFH,列地址范围为40H~7FH,数据为纵向读写,即每页的第l行对应BD0,第8行对应BD7。控制器KS0108的指令总共7条,即:指令显示开关设定3EH/3FH:显示起始行设定C0H~FFH:页地址设定B8H~BFH:列地址设定40H~7FH;状态读取;写数据;读数据。


  [!--empirenews.page--]  由于在向液晶显示模块写数据和命令前,都要回读液晶显示模块状态。如果模块内部的控制器处于忙状态,这时就要等待,直到液晶显示模块的控制器处于空闲状态才能向模块写数据和命令。从液晶显示模块手册可以看到如果将数据或者命令写入液晶显示模块,主要是正确控制数据、命令写入时序。为了实现液晶控制命令或者数据的正确写入,这里设计了一个有限的状态机,其状态转移图如图3所示。从该状态转移图可以看出,此状态机共有8个状态,分别是:空闲、显示开关设置、显示起始行设置、数据页设置、数据起始列设置、回读、数据装载、写数据。如果FIF0没有数据或者数据未写满,状态机一直在空闲状态。当FIF0满时,状态机就依次进入显示开关设置状态(显示打开,写入命令代码3FH)、显示起始行设置状态(设置显示起始行,写入命令代码COH)、数据页设置状态(设置起始页,写人命令代码B8H)、数据起始列设置状态(设置起始列,写入命令代码40H),之后就进人数据装载,写数据,状态回读的循环中,每写完l列,液晶模块的列地址自动加l,直到写完一页(64列),页地址加1,重新设置页序号,数据起始列,再进入写数据,状态回读的循环中,直到写完l片KS0108B控制的显示存储区。在控制第2片KS0108B时,FPGA液晶控制模块自动选通另一片KS0108B,重新设置该片液晶控制器.写入命令和数据,直到写满整个显示RAM。图4为FPGA实现的液晶控制模块的仿真。其中E为使能信号,CSA_N、CSB_N为液晶显示模块内部液晶显示控制的片选信号,低电平有效;D_I位数据命令选择信号,RW为读写信号,FULL为FIF0满信号,BD为数据总线,ENABLE为液晶控制模块的使能信号,RESET_N为系统复位信号。从图4中可以看出:当FIF0满且有效时,也就是FULL=1时,液晶控制状态机依次从空闲状态写入命令代码3FH(显示开关打开)、COH(显示起始行设为0)、B8H(起始页地址设为0)、40H(列地址设为0),之后就进入数据装载,写数据,状态回读的循环中,直到把整个液晶显示模块显示RAM写满,FPGA实现的液晶控制模块重新进入空闲状态,等待CPU把整个异步FIFO写满。


    由于液晶模块速度很慢,在用CPU直接控制时,CPU写数据和命令的时间twrite≥1μs,而且写数据和命令之前要有一个读忙的时间tbu-sy,大约为4μs的时间,所以写数据和命令总的时间约为5μs,写满整屏时间为5μs×1 024=5.12 ms,如果用CPU直接写入FIF0,因为现在的控制器总线速度很快,假设写入一个字节数据需要50 ns,则写满一整屏需要50 nsX1024=0.0512 ms,约是原来时间的1/100,节省了5 ms,提高了CPU的利用率。

4 结束语
    本文利用XIUNX SPARTAN3E系列FPGA器件实现异步FIFO和液晶控制功能模块的设计,CPU不用直接控制液晶模块,也不用增加单片机协助CPU控制液晶模块,CPU只需把显示的数据写入FPGA实现的FIF0缓冲区,剩下的任务交给FPGA实现的液晶控制模块处理,以便CPU去处理实时性高的任务,大大提高了CPU的利用率。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

最近为什么越来越多的研究开始利用FPGA作为CNN加速器?FPGA与CNN的相遇究竟能带来什么神奇效果呢?原来,FPGA拥有大量的可编程逻辑资源,相对于GPU,它的可重构性以及高功耗能效比的优点,是GPU无法比拟的;同时...

关键字: FPGA 可编程逻辑资源 GPU

FPGA的应用领域包罗万象,我们今天来看看在音乐科技领域及医疗照护的智能巧思。

关键字: FPGA 科技领域 智能

强大的产品可降低信号噪音并提高分辨率与动态

关键字: Spectrum仪器 数字化仪 FPGA

最近某项目采用以太网通信,实践起来有些奇怪,好像设计成只能应答某类计算机的ICMP(ping)命令, 某类计算机指的是Windows特定系统,其他系统发送ping都不能正确识别。

关键字: 嵌入式Linux FPGA 协议

近两年,国外厂商的FPGA芯片价格飙升,由于价格,货期,出口管制等多方面因素的影响,很多公司都在寻找FPGA国产化替代方案。我工作中正在使用的几款芯片也面临停产的风险,用一片少一片,了解到国产FPGA发展的也不错,完全自...

关键字: FPGA 芯片 EDA

本篇是FPGA之旅设计的第十二例,在前面的例程中,完成了DS18B20温度传感器数据的采集,并且将采集到的数据显示在数码管上。由于本例将对温湿度传感器DHT11进行采集,而且两者的数据采集过程类似,所以可以参考一下前面的...

关键字: FPGA DS18B20温度传感器

这是FPGA之旅设计的第十三例啦,本例是一个综合性的例程,基于OLED屏幕显示,和DHT11温湿度采集,将DHT11采集到的温湿度显示到OLED屏幕上。

关键字: FPGA OLED屏幕

第八例啦,本例将介绍如何通过FPGA采集DS18B20传感器的温度值。

关键字: FPGA DS18B20传感器

这是FPGA之旅设计的第九例啦!!!本例将介绍如何使用FPGA驱动OLED屏幕,并在接下来的几例中,配合其它模块,进行一些有趣的综合实验。由于使用的OLED屏是IIC接口的,对IIC接口不是很清楚的,可以参考第五例的设计...

关键字: FPGA OLED屏幕

这是FPGA之旅设计的第十例啦,在上一例中,已经成功驱动了OLED屏幕,本例将结合上一例,以及第四例多bytes串口通信做一个有趣的例程。

关键字: FPGA OLED屏 串口

数字电源

15504 篇文章

关注

发布文章

编辑精选

技术子站

关闭