广告

原创 【芯航线FPGA】8位7段数码管驱动实验【连载⑩】

2017-2-22 11:39 792 1 1

8位7段数码管驱动实验


实验目的:

1.实现FPGA驱动数码管动态显示;


2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据,数码管显示对应数值。


实验平台:芯航线FPGA核心板、数码管_VGA_PS2模块


图片1


实验原理:


电子设计系统中常用的显示设备有数码管、LCD液晶以及VGA显示器等。其中数码管又可分为段式显示(7段、米字型等)以及点阵显示(88、1616等),LCD液晶的应用可以分为字符式液晶(1602、12864等)以及真彩液晶屏,VGA显示器是现在一般的电脑显示器。芯航线开发板对以上三种设备均提供了硬件接口上。


其中8段数码管的原理图如图10-1所示,


图片2


图10-1 8段数码管原理图


由上图可以看出数码管有两种结构:共阴与共阳。这两者的区别在于,公共端是连接到地还是高电平,对于共阴数码管需要给对应段以高电平才会使其点亮,对于共阳反之。芯航线数码管_VGA_PS2模块上板载的是共阳数码管。同时为了显示数字或字符,必须对数字或字符进行编码译码。这里先不考虑小数点也就是简化为7段数码管,其编码译码格式如表10-1所示:

图片3


表10-1 数码管编码译码表


段式数码管工作方式有两种:静态显示方式和动态显示方式。静态显示的特点是每个数码管的段选必须接一个8位数据线来保持显示的字形码。当送入一次字形码后,显示字形可一直保持,直到送入新字形码为止。这种方法由于每一个数码管均需要独立的数据线因此硬件电路比较复杂,成本较高,很少使用。


为了节约IO以及成本一般采用如图2所示的电路结构,这样3个数码管接在一起就比静态的少了7*2个I/O。


图片4


图10-2三位数码管等效电路图


这样就实现了另一种显示模式,动态显示。动态显示的特点是将所有位数码管的段选线并联在一起,由位选线控制是哪一位数码管有效。选亮数码管采用动态扫描显示。所谓动态扫描显示即轮流向各位数码管送出字形码和相应的位选,利用发光管的余辉和人眼视觉暂留作用,使人的感觉好像各位数码管同时都在显示。


现在举例假设将扫描时间定为1S,这三个数码管分成3s,第1秒时sel数据线上为100,这时数码管0被选中,这时a=0,数码管0的LED0就可以点亮;第2秒时sel数据线上为010,这时数码管1被选中,这时b=0,数码管1的LED1就可以点亮;第3秒时sel数据线上为001,这时数码管2被选中,这时c=0,数码管2的LED2就可以点亮。这时的效果就会是数码管0的LED0亮一秒后数码管1的LED1亮一秒最后是数码管2的LED2亮一秒,这样再次循环。


这样如果使用1ms刷新时间的话由于数码管的余辉效应以及人的视觉暂留这样就会出现数码管0的LED0、数码管1的LED1以及数码管2的LED2 “同时”亮,并不会有闪烁感。


实验步骤:


由上面的分析可以得出应该有图3的框图,其接口列表如表2所示:


图片5


图10-3 模块框图

图片6

表10-2 模块接口列表


经过以上的分析,数码管驱动模块逻辑电路图可以简化成如图10-4所示的,其中每一部分的作用如表10-3所示。


图片7


图10-4 数码管驱动模块逻辑电路图

图片7_1

表10-3 子功能块功能描述


建立工程子文件夹后,新建一个以名为HEX8的工程保存在prj下,并在本工程目录的rtl文件夹下新建verilog file文件并以HEX8.v保存。由图10-3可以得出如下的信号列表

图片8

这里先编写分频模块,从系统时钟50M分频得到1KHz的扫描时钟,计数器值即为’d25000,这样计数器的位宽定义为15位即可。

图片9

再编写8位循环移位寄存器,这里利用循环移位寄存器实现0000_0001 ->1000_0000的变化,进而实现数码管的位选,即实现每个扫描时钟周期选择一个数码管。移位寄存器输出值与数码管选通的对应关系如表10-4所示,其中sel7为高位。

图片10

表10-4 移位寄存器与数码管对应关系

图片11

利用8选1多路器,选择端为当前扫描到的数码管,利用多路器将待显示数据输送到对应到数码管上。

图片12

前面所说如果要使数码管显示数字或字符,须对数字或字符进行编码译码。这里利用一个4输入查找表,来实现7位输出用做显示译码。

图片13图片14

模块化的设计理念是每个模块以后调用以及控制方便,基于这种理念,这里需要加入使能信号。关于使能子模块,直接利用一个二选一多路器即可实现。

图片15

进行分析和综合直至没有错误以及警告。


为了测试仿真编写测试激励文件,新建HEX8_tb.v文件保存到testbench文件夹下,除编写正常的时钟外,输入以下内容再次进行分析和综合直至没有错误以及警告。以下生成了复位信号以及使能信号、待显示数据的初始化以及切换,分别在数码管上显示87654321以及89abcdef。

图片16

设置好仿真脚本后进行功能仿真,可以看到如图10-5所示的局部波形文件,可以看出在复位信号置高之前数码管均显示0,在复位结束后数码管才开始正常显示,且当待显示数据为32’h89abcdef(MSB)后,数码管从1到8依次被选通且分别显示为FEDCBA98(LSB)。即仿真通过。


图片17


图10-5 数码管功能仿真波形图


为了更便捷的进行板级调试,这里介绍Qusrtus II自带的的In system sources and probes editor(ISSP)调试工具,测试数码管可以只用其提供的源,探针等到后面的RAM中再做详细介绍。这样测试整体模块框图就可以简化为如图10-6所示。


图片18


图10-6 测试激励整体框图


这里ISSP是以IP核的形式提供的,因此第一步单击Tools—Mega Wizard Plug-In Manager来启动Mega Wizard插件管理器,并新建一个定制IP核;


图片19


图10-7 启动Mega Wizard插件管理器


在弹出的图10-8 Mega Wizard插件管理器的参数设置界面中,找到JTAG-accessible Extensions下选择In-System Source and Probes,并将输出目录确定为工程文件夹下的ip文件夹,并以hex_data保存,单击Next。


在弹出的图10-9配置界面中将源位宽定义为32,探针位宽定义为0,然后单击Next即可。


图片20


图10-8 Mega Wizard插件管理器参数设置


图片21


图10-9-1 ISSP配置界面


图片22


图10-9-2 ISSP配置界面


图片23


图10-9-3 ISSP配置界面


在本工程目录的rtl文件夹下新建verilog file文件在此文件下输入以下内容并以HEX_top.v保存,并设置为顶层文件。

图片24图片25

分配引脚后全编译无误后下载工程到开发板中。这时可以看到数码管全显示0,与设计一致。在Quartus II中点击Tools—In-System Source and Probes Editor启动ISSP,启动后的界面如图10-11所示。这里需手动选择下载器,并将数据格式改为设计中的hex格式。


图片26


图10-10 启动ISSP


图片27


图10-11 ISSP操作界面


图片28


图10-12 切换数据格式


这样ISSP界面的Data中输入相应的数据即可在数码管上看到与之对应的显示,如图10-13所示。


图片29图片30图片31


图10-13 数码管显示数据


至此完成了数码管的动态显示。本节主要介绍了数码管显示数字原理、数码管动态扫描显示原理以及In system sources and probes editor(ISSP)调试工具的基本使用。


如有更多问题,欢迎加入芯航线 FPGA 技术支持群交流学习:472607506


小梅哥


芯航线电子工作室


关于学习资料,小梅哥系列所有能够开放的资料和更新(包括视频教程,程序代码,教程文档,工具软件,开发板资料)都会发布在我的云分享。(记得订阅)链接:http://yun.baidu.com/share/home?uk=402885837&view=share#category/type=0


赠送芯航线AC6102型开发板配套资料预览版下载链接:链接:http://pan.baidu.com/s/1slW2Ojj 密码:9fn3


赠送SOPC公开课链接和FPGA进阶视频教程。链接:http://pan.baidu.com/s/1bEzaFW 密码:rsyh


广告

文章评论 0条评论)

登录后参与讨论
相关推荐阅读
小梅哥 2019-09-04 22:10
小梅哥FPGA时序分析笔记(6.2)深入现象看本质——庖丁解牛之FPGA内数据传输模型
通过上一节,我们了解了FPGA内部数据的传输形式,接下来我们就可以根据上一节的内容来总结一下FPGA内部的数据传输模型了。 时钟和数据传输路径 通过上一节内容中,我绘制的那个FPGA内部数...
小梅哥 2019-09-01 21:28
小梅哥FPGA时序分析笔记(6.1)深入现象看本质——庖丁解牛之FPGA可编程原理
上一次发博客,已经是2个月前了,这中间两个月,干了件很有意义的事情,尤其是对于自己来说,感觉学到了非常多的知识和经验,每天都很忙,忙到没时间逛网站博客,终于忙完闲下来了,连载的事情可不能忘,终于可以书...
小梅哥 2019-07-02 08:57
小梅哥FPGA时序分析笔记(五)I/O约束显神威——深入龙潭
大家一定对我上一节的突然结尾表示一脸茫然:我是来学习时序约束的,然后你告诉我时序约束里面IO约束很重要,然我又跟着你的文章继续往下看,本以为你就要讲如何进行IO约束了,结果呢,你一个取反时钟就把我们打...
小梅哥 2019-06-30 11:07
小梅哥FPGA时序分析笔记(四)I/O时序定成败——化险为夷
小梅哥FPGA时序分析从遥望到领悟系列没有遇见过I/O时序问题,没有通过I/O约束方式实际解决过I/O时序问题,就很难明白I/O约束的重要性,也很难相信各种EDA软件真的有那么的傻白甜。 我遇到...
小梅哥 2019-06-22 10:32
小梅哥FPGA时序分析笔记(三)时钟约束真重要——事实说话
小梅哥FPGA时序分析从遥望到领悟系列以前,那是在以前,经常有网友(原谅我行文动不动就是网友说,网友问,毕竟我是卖开发板的,正面接触学FPGA的网友相对多一些,所以这些也都是事实存在的事情)问我:小梅...
小梅哥 2019-06-21 10:33
小梅哥FPGA时序分析笔记(二)时钟质量是生命——初遇时序
小梅哥FPGA时序分析从遥望到领悟系列第一次遇到时序问题并通过相应的手段解决问题,算是2年前做百兆以太网图像传输的时候了吧。当时遇到的问题为:同一个工程,每次编译结果的效果都不一样,有的时候编译了,下...
我要评论
0
1
广告
关闭 热点推荐上一条 /3 下一条