数字系统实验-三位数码管实验报告## 1. 日志(2020.03.26日完成)
1.1.1操作说明:
首先在课前提前安装好quartus软件,接着在电脑上安装USB硬件驱动,然后连接好PC接口,再打开quartus II,找到Tools中的Programmer命令,单击【Add File】添加下载好的【scan_led3.sof】,单击【Hardware setup】,然后在硬件列表中选择【USB_Blaster】双击,最后返回点击Start,加载100%后观察实验板。
1.1.2观察现象:
我们调节对应的拨码开关使数码管从左向右依次显示1,2,3,我们可以发现数码管同时快速闪烁,但其实这是一种频闪的状态,我们可以通过调节左上方时钟信号的频率,适当降低频率,就能发现它是从左到右依次闪烁。
1.2示波器测量位选择信号和时钟信号
1.2.1实验现象描述及结果分析:
1.2.1.1描述:
图中蓝色表示的是时钟信号,黄色表示的是位选信号,通过图我们可以看出,蓝色的也就是时钟信号,它的周期刚好就是10ms(图中一格代表10ms),而黄色的也就是位选信号,它的周期是50ms(5格),这就表示时钟信号频率是位选信号频率的5倍。
1.2.1.2结果分析:
我们回顾一下实验板上二极管闪烁的原理:当当时钟信号变化一个周期时,模四计数器计一个数,计数两次后产生一个进位,二极管亮起并保持三个时钟信号周期后重新清除置零,晶体管熄灭,又当二极管亮起时,为高电平,所以示波器上黄色波形中高电平占信号周期的百分之六十,低电平占百分之四十,刚好对应实验板上二极管的闪烁情况。这样说明时钟信号经过五个周期的时间,位选信号才经历一个变化周期,因此时钟信号的频率是位选信号频率的五倍
2. 报告
2.1实验目的
2.1.1目的
- 熟悉FPGA实验板上数码管构成,即了解组成部分和其对应的功能和原理
- 掌握时钟及位选等信号波形,多位数码管显示电路由显示字符的段选信号和选通数码管的位选信号控制,深入理解各个信号之间的联系。
- 利用Quartus II来完成三位数码管显示电路的逻辑设计,通过仿真波形及硬件实验平台验证设计,掌握硬件实验平台的一系列操作方法,进一步了解三位数码管显示电路的逻辑设计。
2.1.2资源
这次试验我所用到的实验资源是一台Huwei电脑,学习通中老师所提供的工程资料,一块FPGA实验板,quartus软件。
2.2设计
2.2.1模四计数器电路图(含管脚分配的)截图与文字说明
模四计数器具有清零、置数、保持和加法计数功能,它用到的元件有74161计数芯片,输入输出元件以及nand2和dff、vcc元件,其中输入的是时钟信号,分配管脚91,输出是二极管,分配管脚是101和100。
2.2.2模四计数器下载现象描述并举证从验证实验时的现象上如何看出你实现的电路行为正确并下结论:
我们会发现两个二极管出现周期性闪烁,最开始是两个晶体管同时熄灭,然后低位晶体管闪烁一次后熄灭,接着高位晶体管闪烁一次后熄灭,再两个晶体管同时闪烁一次,最后两个晶体管同时熄灭,这样进行下一次循环,这对应了模四计数器的功能,计数四次后,清零重新计数,所以会 0,1,2,3,0循环,最后面一个0是清零的作用。
低位晶体管分配的管脚是P100,高位则是P101,而晶体管只在高电平下亮,而0,1,2,3对应的二进制是00,01,10,11,0是低电平,1是高电平,所以最开始两个都不亮,然后再是低位亮,再是高位亮,最后一起亮,这和我们所看到的实验结果是一致的,所以就能看出我所实现的电路行为是正确的。
2.2.3比较仿真验证与下载验证两种方式:
仿真验证分为功能仿真和时序仿真,前者忽略了延迟,但二则都是通过软件提前将输入信号对应的波形设置好,进而得出相应的波形文件,最后利用仿真功能以波的形式把它输出,如果有多个输出,则通过二进制数的形式展示出来,仿真验证的形式能让我们很方便的判断电路的正确性,因为我们一眼就能看出输入和输出的关系,而弊端则是我们仅仅对输出的结果很关心,而忽略了这个电路的实现过程,这样我们就没有透彻的理解电路的功能以及作用;
下载验证则是我们要将二极管的管脚正确的接入实验板,然后在验证的过程中我们可以通过二极管的闪烁情况或者数码管的显示情况来分析电路是否设计正确,在这个过程中,我们能更进一步了解电路的功能,但弊端就是输入与输出之间的联系却没有得到直观的体现。而且实现起来比较麻烦,因为涉及到一些相关仪器的连接,验证的速度也比较慢,人眼观察的话,失误也会增加。
总的来说,我个人更倾向于使用仿真验证,虽然下载验证更具实践性,更能加深理解,但是在日常的验证中,我可能只需要判断出对错与否,仿真验证便捷,直观的优点符合日常验证的条件。但如果时间足够的话,我会先仿真验证再下载验证,这样就万无一失了。
2.3实现
2.3.1顶层电路截图(带附加电路与管脚分配),并说明各模块的功能与实现方式等方面:
counter4模四计数器:它是整个电路的主控制模块,控制数码管上数据的位选信号以及段选信号的产生,接收时钟信号,产生位选和段选信号,传给2-3译码器和3选1多路选择器。
Decoder2_3 (2-3译码器):它能接收counter4传输过来的信号,产生三位位选信号:百位、十位、个位,它控制三位数码管的先后显示;当data为00时,译出百位,也就是第一个数码管,为01时,译出十位,也就是第二个数码管,11和10时译为个位,也就是第三个数码管。
mux4_3_1(3选1多路选择器):它能接收counter4传输来的信号,产生段选信号,以此来显示不同的数字,根据sel信号的输入来确定输出,输入00时,输出d0, 01时,输出d1,10和11时,输出d2。总结就是三路选择器可以同时输入三路数据与模四计数器传来的信号。通过控制三路四位数据的选择输出。
7449模块:它能接收mux4_3_1产生的信号,来实现对七段数码管的显示控制,即接收dout[0],则控制第一个数码管,dout[1]控制第二个数码管,dout[2]和dout[3]都是控制第三个数码管。
2.3.2下载实作截图,列表记录输入0-f时,7449译码符号的显示情况
输入0-f的依次显示
2.3.3 顶层电路优化,说明设计思路、实现电路、和实验验证:
到数码管输出十以上的数字时会出现乱码,而且我们暂时无法同时输出两个数码管,所以我的想法是可以用字母来代替十以上的输出,同时又不能删除7449,所以我想可以设计一个新的模块eda接在7499的后面,将A-F的输出转换一下,即当7449输出A到F时,分别转化对应输出1110111,0011111,1001110,0111101,1001111,1000111。但是我注意的是大写字母B与8输出相同,改为输出小写字母b的话,又与6冲突,所以我想把7499输出的B改成1011111,也就是在6的基础上再点亮第一个数码管,那么现在的转换是,输出A-F,变为1110111,1011111,1001110,0111101,1001111,1000111。剩下的其余数字还是保持不变。
代码实现:
实现电路:
实验验证:
因为我想巩固一下实验所学的内容,所以在这里我并没有采取简便的功能验证,而是在实验室中用下载验证
3.实验总结
3.1学到的知识:
1.通过此次实验,我了解并掌握了熟悉DDA-III型实验板构成以及原理,即时钟信号和拨码开关是如何共同控制数码管上的显示,同时也清楚了各个管脚的连接方式以及电路之间是如何联系的,像数码管是共阴极的,所有一个数码管上的七段发光二极管的所有阴极是连在一起。
2.加深了我对quartus II,示波器等仪器的理解程度,同时也掌握硬件实验平台的一系列操作方法。像如何利用quartus软件和实验班来实现对自己的工程文件进行判断以及如何通过vhdl语言实现工程的优化,还有就是示波器的图像分析,即通过正确连接示波器和试验板所产生的图像,分析出时种信号和位选信号的关系。
3. 让我理解了74系列芯片的一些实际应用和原理,比如模四计数器还有2-3译码器的工作原理,像模四计数器计数功能实现每四个时间计数一循环,每次循环计数后,还会有一个清除功能,这也需要时间。
3.2掌握的技能:
1.如何利用quartus II和实验板来进行下载验证,以及对实际工程的多维分析,即从下载验证的结果来分析工程存在的不足,并进一步优化。
2.如何正确的使用示波器,去年因为疫情在家,就没有大物实验中自己实操示波器的使用,通过这次的实验以及之前的一些理论知识去,让我对示波器有了入门级的理解(即正确使用示波器完成一些简单分析)
3.如何正确的记录实验结果,在这次实验中,大多数同学记录实验的方式就是直接手机拍照,而我发现他们离开实验室几天后就会忘记或者记不清一些实验现象以及一些自己做实验过程中的心得和体会,所以我在做的时候除了必要的拍照记录结果,我还会拍摄视频记录整个实验过程,同时还会准备纸,笔随时记录做实验过程的一些疑惑和体会,这样在回来写报告时就不会不记得了。
3.3人文:
第一次做这种实验,我深刻感觉到自己课前的准备工作做得还不够充分,但是通过和同学之间的认真的讨论,解决了遇到的问题,我还记得在做优化时,我开始是想直接把7499的功能重新自己写vhdl代码实现,但在和同学之间的讨论之后,发现我忽略了题目中不能删除7499的条件,然后我又仔细想了想,才有了再加一个叫eda新模块的想法。这样的讨论不仅能让我们及时发现自己存在的问题,同时也能加深同学间的情谊,一举两得。还有就是自己课后也花了很多时间去了解,去独立思考,琢磨为什么会有这样的现象,锻炼自己独立思考的能力。
3.4记忆
顶层电路图实现中,各个模块的之间的联系:
示波器的使用:
DDA-III型实验板部分组成和作用: