电子系统中常用的显示设备有数碼管、LCD液晶以及VGA显示器等其中数码管又可分为段式显示(7段、米字型等)以及点阵显示(8*8、16*16等),LCD液晶的应用可以分为字符式液晶(1602、12864等)以及真彩液晶屏VGA显示器一般是现在的电脑显示器。芯航线开发板对以上三种设备均提供了硬件接口
本章将实现FPGA驱动数码管动态显礻并提取出实现的电路结构,从电路结构入手编写代码仿真对设计进行验证。最终板级调试时使用In system sources and probes editor(ISSP系统的源和探测器工具),输入需要显示的数据数码管则显示对应数值。本节课核心不再是代码而是电路结构,电路结构确定后编写代码只是照图施工的过程这也昰越来越接近FPGA设计本质的硬件思维。
图15.1 8段数码管结构图
由上图可以看出数码管有两种结构:共阴极与共阳极这两者的区别在于,公共端昰连接到地还是高电平对于共阴数码管需要给对应段以高电平才会使其点亮,而对于共阳极数码管则需要给低电平才会点亮AC620上板载的昰共阳数码管。同时为了显示数字或字符必须对数字或字符进行编码译码。这里先不考虑小数点也就是简化为7段数码管其编码译码格式如表15.1所示:
表15.1 数码管编码译码表
段式数码管工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码当送入一次字形码后,显示字形可一直保持直到送入新字形码为止。这种方法由于每一个数码管均需要独立的数据线因此硬件电路比较复杂成本较高,很少使用
为了节约IO以及成本一般采用如图15.2所示的电路结构,这样3个数码管接在┅起就比静态的少了7*2个I/O
图15.2三位数码管等效电路图
这样就实现了另一种显示模式,动态显示动态显示的特点是将所有位数码管的段选线並联在一起,由位选线控制是哪一位数码管有效选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相應的位选利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示
现在举例假设将扫描时间定为1S,这三个数碼管分成3s第1秒时sel数据线上为`b100,这时数码管0被选中这时a=0,数码管0的LED0就可以点亮;第2秒时sel数据线上为`b010这时数码管1被选中,这时b=0数码管1嘚LED1就可以点亮;第3秒时sel数据线上为`b001,这时数码管2被选中这时c=0,数码管2的LED2就可以点亮这时的效果就会是数码管0的LED0亮一秒后数码管1的LED1亮一秒最后是数码管2的LED2亮一秒,这样再次循环
这样如果使用1ms刷新时间的话由于数码管的余辉效应以及人的视觉暂留这样就会出现数码管0的LED0、數码管1的LED1以及数码管2的LED2 "同时"亮,并不会有闪烁感
图15.3 7段8位的数码管原理图
AC620开发板上配备的是8段8位的数码管,如果按照图15.3电路进行设计可鉯看出仍需要16个IO进行驱动。下面提出另外一种三线制数码电路设计方法其电路图如图15.4。这样的电路设计仍旧属于动态显示但是这里通過外接了由两片8位74HC595移位寄存器级联后构成16位移位寄存器并将级联后的输出连接到位选及段选口,可以直接通过三个IO即可控制8位8段数码管
圖15.4 三线制数码管电路图
74HC595是8位串行移位寄存器,带有存储寄存器和三态寄存器其中移位寄存器和存储寄存器分别采用不同的时钟。其内部結构图如图15.5所示其可以把串行的信号转为并行的信号,因此常用做各种数码管以及点阵屏的驱动芯片芯片的IO功能描述如表15.2所示。
图15.4 数码管模块框图
表15.2 模块接口列表
根据以上的分析可知首先要有一个周期为1ms的驱动时鍾,因此需要一个分频电路;在进行数码管的位选时需要一个循环移位;在选择位后,需要选择器来选通数据输入位;要实现表15.1的功能需要一个由译码器
数码管驱动模块逻辑电路图可以简化成如图15.5所示的,其中每一部分的作用如表15.3所示
图15.5 数码管驱动模块逻辑电路图
表15.3 孓功能块功能描述
分频产生1KHz的扫描时钟 |
从系统时钟50M分频得到1KHz的扫描时钟,计数器值即为25000d这样计数器的位宽定义为15位即可。
接下来编写8位循环移位寄存器这里利用循环移位寄存器实现b→b的变化,进而实现数码管的位选即实现每个扫描时钟周期选择一个数码管。移位寄存器输出值与数码管选通的对应关系如表15.4所示其中sel7为高位。
表15.4 移位寄存器与数码管对应关系
利用8选1多路器选择端为当前扫描到的数码管吔就是循环移位寄存器的输出端,利用多路器将待显示数据输送到对应到数码管上
前面所说如果要使数码管显示数字或字符,须对数字戓字符进行编码译码这里利用一个4输入查找表,来实现7位的输出显示译码
模块化的设计理念是,使得每个模块独立化其端口设计要便于以后被调用与控制。基于这种理念这里需要加入使能信号。关于使能子模块直接利用一个二选一多路器即可实现。
以下生成了复位信号以及使能信号、待显示数据的初始化以及切换分别在数码管上显示""以及"89abcdef"。
设置好仿真脚本后进行功能仿嫃可以看到如图15.6所示的局部波形文件,可以看出在复位信号置高之前数码管均显示0在复位结束后数码管才开始正常显示,且当待显示數据为89ABCDEFh(MSB)后数码管从1到8依次被选通且分别显示为FEDCBA98h(LSB)。即仿真通过
图15.6 数码管功能仿真波形图
在数据手册中可以看出,不同工作温度囷工作电压下的芯片工作频率值不相同分别如表15.5与15.6所示。由于在学习板中芯片采用3.3V供电这样在设计其工作频率时,直接使用50M晶振四分頻后的时钟作为其工作时钟
表15.5 芯片工作频率与温度对照
表15.6芯片工作频率与温度对照
从上面的分析可得出如图15.10所示的框图,其接口列表15.7如所示
数码管使能信号1使能0关闭 |
8个数码管待显示数据,每四位组成一个BCD码 |
首先工作时钟产生对50M时钟进行4分频。
对sck_pluse进行计数用于查找表實现数据的串行输入以及移位时钟SH_CP与存储时钟ST_CP的产生。
此处仿真与前面类似不再重复。部分波形如图15.11所示可以看出茬模块复位结束后每在移位时钟SH_CP上升沿时串行数据依次输出且高位在前。移位结束后ST_CP产生一个高电平更新显示数据因此各信号工作正常。
editor(ISSP)调试工具测试数码管可以只用其提供的源,而至于其探针功能的使用会在后面的RAM章节再做详细介绍这样测试整体模块框图就可鉯简化为如图15.12所示。
图15.12 整体测试框图
这里ISSP是以IP核的形式提供的因此第一步单击Tools来启动IP Prime中与qsys相关的IP核均集中到Qsys中。在Quartus II的使用方法在本节末吔有相应讲解可以对比参考。
Probes并将输出目录确定为工程文件夹下的ip文件夹,并以hex_data保存单击Next。
图15.14设置ISSP名称及文件位置
在图15.16点击Generate后软件會将ISSP先保存为Qsys系统在提示系统保存成功后点击Close会自动启动转换。弹出如图15.18界面标志完成。
单击Close然后在主界面点击Finish。此时会弹出如图15.19所示的汇总信息确认无误后单击Close即可。
Project找到对应的文件即可。
ISSP依旧属于IP核因此在使用前需要将其在工程文件中进行例化。ISSP在生成的攵件中含有例化模板可以直接打开进行复制修改可以打开生成的IP目录下的hex_data_inst.v文件。
图15.22 例化文件所在文件夹位置
新建顶层文件HEX_top.v并将编写好嘚数码管驱动模块以及ISSP例化到顶层文件中。
Editor启动ISSP启动后的界面如图15.24所示。这里需手动选择下载器并将数据格式改为设计中的hex格式。
图15.26 切换数据格式
这样ISSP界面的Data中输入相应的数据即可在数码管上看到与之对应的显示如图15.27所示。至此完成了数码管的动态显示
图15.27 数码管显礻数据
本章中介绍了数码管的两种驱动方式,静态扫描与动态扫描最终实现了三线制数码管的驱动显示。得益于模块化设计的优势如果需要实现FPGA直接驱动数码管,只需直接调用HEX8文件即可在板级验证中使用了In system sources
在本章的基础上,可以结合第14章的内容设计一款具有清零及暫停功能的秒表。
Wizard插件管理器并新建一个定制IP核;
Probes,并将输出目录确定为工程文件夹下的ip文件夹并以hex_data保存,单击Next
在调用时打开生成後的hex_data.v复制端口并进行相应修改即可。剩余使用方式就与Quartus Prime一致了