数字电路实验报告-VHDL状态机的设计与实现.doc_第1页
数字电路实验报告-VHDL状态机的设计与实现.doc_第2页
数字电路实验报告-VHDL状态机的设计与实现.doc_第3页
数字电路实验报告-VHDL状态机的设计与实现.doc_第4页
数字电路实验报告-VHDL状态机的设计与实现.doc_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

北京邮电大学数字电路实验报告实验名称:VHDL状态机的设计与实现 学 院: 信息与通信工程学院 日 期: 2011年5月 一、发光二极管走马灯电路设计与实现1.实验目的 (1)进一步了解时序电路描述方法; (2)熟悉状态机的设计方法。2.实验所用仪器及元器件 (1)计算机; (2)直流稳压电源; (3)数字系统与逻辑设计实验开发板。3.实验任务与要求 设计并实现一个控制8个发光二极管亮灭的电路,仿真验证其功能,并下载到实验板测试。 (1)单点移动模式:一个点在8个发光二极管上来回的亮 (2)幕布式:从中间两个点,同时向两边依次点亮直至全亮,然后再向中间点灭,依次往复。4.设计思路和过程 (1)设计一个模8计数器和一个模5计数器,在输入的时钟信号的上升沿触发。 (2)对于模8计数器,当计数值达到“0000”时,计数标志位设置为0,进行加计数;当计数值达到“0111”时,计数标志位设置为1,进行减计数。 (3)模5计数器的设计思路与模8计数器相同。 (4)对于输入的控制信号,当控制信号为“00”时,8个二极管全灭;当控制信号为“01”时,利用3线至8线译码器输出控制信号,实现单点移动模式;当控制信号为“10”时,利用3线至8线译码器输出控制信号,利用其中的5个状态,实现幕布式;当控制信号为“11”时,将8个二极管全部点亮。5.VHDL代码6.仿真波形及分析 (1)仿真波形 (2)波形分析由波形可见,当控制信号输入为“00”时,输出信号全为0,实现8个二极管全部熄灭的效果;当输入为“01”时,输出的8个端口依次出现正脉冲,代表一个发光的点在8个发光二极管上来回的亮;当输入为“10”时,输出的8个端口出现正脉冲的时间与脉冲的长度呈现“中间宽,两头窄”的形状,实现了幕布式的点灯方式;当输入为“11”时,输出的信号全为1,实现8个二极管全部被点亮。当清零信号为0时,输出信号全为0,8个二极管全部熄灭。由图可知,该电路实现了要求的逻辑。7.故障及问题分析 (1)一开始设计模8计数器时,只用了长度为3的数组,将程序下载到电路板上,拨动拨码开关使电路工作在单点移动状态时,发现只有两边的两个灯轮流亮,其他灯都不亮,观察仿真波形之后发现,计数变量记到“111”时,计数标志位的值仍为0,下一状态计数变量变为“000”时,计数标志位才变为1,这就导致输出的信号只有两种状态。于是将计数变量改变为长度为4的数组,然后取了译码器前8个输出结果控制8个二极管亮灭的8种状态,其余输出结果均为让8个二极管全灭,成功地解决了这个问题。 (2)程序再次下载到电路板后,拨动拨码开关使电路工作在幕布式状态,发现电路又是只在两个状态之间来回变化,仔细检查后发现,是设置让标志位的值改变的那段代码有问题,当计数变量为“000”时,标志位的值为0,当计数变量为其他时,标志位的值为1。修改代码,使得当计数变量为“000”时,标志位的值为0,当计数变量为“100”时,标志位的值为1,再次下载到电路板上,电路就能在5个状态之间来回变化了。8.实验结果1)幕布式 (2)单点移动模式二、数码管扫描显示控制器的设计与实现1实验目的(1)掌握VHDL语言的语法规范,掌握时序电路描述方法(2)掌握多个数码管动态扫描显示的原理及设计方法2实验所用仪器及元器件(1)计算机(2)直流稳压电源(3)数字系统与逻辑设计实验开发板3实验任务要求(1)用VHDL语言设计并实现六个数码管串行扫描电路,要求同时显示0,1,2,3,4,5这六个不同的数字图形到六个数码管上,仿真验证其功能,并下载到实验板测试。(2)用VHDL语言设计并实现六个数码管滚动显示电路。I)循环左滚动,始终点亮6个数码管,左出右进。状态为:012345123450234501345012450123501234012345II)向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。4.实验原理 为使得输入控制电路简单且易于实现,采用动态扫描的方式实现设计要求。动态扫描显示需要由两组信号来控制:一组是字段输出口输出的字形代码,用来控制显示的字形,称为段码;另一组是位输出口输出的控制信号,用来选择第几位数码管工作,称为位码。各位数码管的相同段是并联的,段码的输出对各位数码管来说都是相同的。因此在同一时刻如果各位数码管都处于点亮状态,6位数码管将显示相同的字符。若要各位数码管能够显示出与本位相应的字符,就必须采用扫描显示方式,即在某一时刻,只让某一位处于点亮状态,而其它各位处于灭灯状态。同时,段码输出相应位要显示字符的字型码。这样在同一时刻,只有选通的那一位显示出字符,而其它各位则是熄灭的,如此循环下去,就可以使各位数码管显示出要显示的字符。虽然这些字符是在不同时刻出现的,而且同一时刻,只有一位显示,其它各位熄灭,但由于数码管具有余辉特性和人眼有视觉暂留现象,只要每位数码管显示间隔足够短,给人眼的视觉印象就会是连续稳定地显示。总之,多个数码管动态扫描显示,是将所有数码管的相同段并联在一起,通过选通信号分时控制各个数码管的公共端,循环点亮多个数码管,并利用人眼的视觉暂留现象,只要扫描的频率大于50Hz,将看不到闪烁现象。6个数码管则需要50*6=300Hz以上才能看到持续稳定点亮的现象。 5.设计思路及VHDL代码 (1)同时显示0、1、2、3、4、5这6个不同的数字到6个数码管上 i)设计思路: (1) 设计时序电路,输入时钟经过一个分频器,产生分频系数为6的扫描信号作为时钟,驱动计数器工作。(2) 选用模值为6的计数器,通过一个3线至6线译码器,控制产生位码,依次控制6个数码管的亮灭,使得某一时刻有且仅有一个数码管被点亮,同时产生与被点亮的数码管序号一致的段码。(3)根据段码生成相应的数字字型码,并输出到数码馆上。由于扫描频率较高,6位数码管序列将显示持续稳定的0至5的数码。 ii)VHDL代码 (2) 循环左滚动,始终点亮6个数码管,左出右进。状态为:012345123450234501345012450123501234012345 i)设计思路:(1)同时让6个数码管显示数字的代码主体和实验任务1中一致,基本思想也一致。(2)为实现移位,关键改动为新增一个计数器,计数周期远远大于扫描周期,这样,在一个大的计数周期内,对于要显示的6位数码进行动态扫描(和实验任务1中相同),显示出6种移位状态中的一种;在下一个大的周期内,计数变量FLAG加1,使用求余运算将显示位的数码移位,比如,FLAG为0时,显示“012345”六位数码,FLAG为1时,将FLAG与扫描周期计数变量CNT6相加求余(即FLAG_A求余)对应的数码为123450,显示的数码也就为“123450”。以此类推,实现循环移位。 ii)VHDL代码 (3) 向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。 i)设计思路:(1)同时显示6位数码,并使数码循环左移位的设计思路与方法同实验任务2-I,(2)稍有不同为左移出的数码不从右移入,因而没有取余运算,大于6的数码状态为灭灯,实现了左移且右端数码依次熄灭。(3)待全部灯熄灭后要实现数码依次从右移入,需要进行反向计数,故设置了控制加减计数的标志位FLAG_REVERSE,当FLAG计数达到5时,将FLAG_REVERSE设置为1,进行减计数;当FLAG计数达到0时,将FLAG_REVERSE设置为0,进行加计数。当FLAG_REVERSE为0时,FLAG_NUM等于NUM与FLAG的和;当FLAG_REVERSE为1时,FLAG_NUM等于NUM与FLAG的差。当FLAG_REVERSE等于1时,右端数码最先达到0,显示数码“0”,然后是右端第二位达到0,显示数码“0”,右端第一位为1,显示数码“1”,其余灯灭,以此类推,实现了右端逐位移入数码的功能。 ii)VHDL代码: 6.仿真波形及分析 (1)同时显示0、1、2、3、4、5这6个不同的数字到6个数码管上的仿真波形及分析 i)仿真波形ii)波形分析 由波形可见,随着模6计数器的周期性重复,0至5号数码管依次被点亮,当一个数码管被点亮时其余管熄灭,同时,数码管显示数字从0至5依次出现,两者保持同步,即n号管亮时显示的数码为n。以计数6次为一个周期进行循环,可知仿真结果正确。当扫描速度很快时,人眼将能看到持续稳定的0至5号数码显示。 (2) 循环左滚动,始终点亮6个数码管,左出右进。状态为:012345123450234501345012450123501234012345i)仿真波形ii)波形分析 为了使仿真结果便于打印,这里修改了count_FLAG值上限为6,也即在一个大的计数周期内,只扫描一遍(实际实现时需要动态扫描多次,如同实验任务1,产生稳定显示,只需把count_FLAG值加大即可)。由波形可见,随着大计数周期的增加,依次产生012345123450234501345012450123501234012345 ,这样便实现了循环移位。当清零信号为0时,控制数码管是否点亮的信号全为1,实现了让数码管全部熄灭的目标。实验室实测时,加大count_FLAG值为100,观察到稳定持续的周期循环移位的数码显示,完成实验任务。(3) 向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。 i)仿真波形 ii)与前一实验类似,为了使仿真结果便于打印,这里修改了count_FLAG值上限为12,也即在一个大的计数周期内,扫描两遍。由波形可见,随着大计数周期的增加,依次产生01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345(其中X表示数码管不显示)。这样便实现了循环移位。当清零信号为0时,控制数码管是否点亮的信号全为1,实现了让数码管全部熄灭的目标。实验室实测时,加大count_FLAG值上限为100,观察到稳定持续的周期循环移位的数码显示,完成实验任务。7.故障及问题分析 (1)第一次将程序下载到电路板上调试时,看到的效果是数码管被轮流点亮,并依次显示0、1、2、3、4、5,检查程序发现是分频器的分频系数设置得太大了,故将分频系数修改为100,就实现了稳定地同时显示05这6个数字的目标。向左循环滚动的程序中的大周期一开始也是将计数模值设置地太大,导致很久才开始滚动,后来将模值改到100,效果就比较明显了。 (2)数码向左滚动后用全灭的数码管填充右边的程序一开始下载到电路板上,出现的结果是用“0”填充右边,检查程序后发现,默认填充值被设置成了“0”的字型码,将其修改为全灭的数码管需要的字型码后,就实现了该程序的功能。8.实验结果(1) 向左滚动,用全灭的数码管填充右边,直至全部变灭,然后再依次从右边一个一个地点亮。状态为:01234512345X2345XX345XXX45XXXX5XXXXXXXXXXXXXXXX0XXXX01XXX012XX0123X01234012345,其中X表示数码管不显示。(2) 循环左滚动,始终点亮6个数码管,左出右进。状态为:012345123450234501345012450123501234012345(3) 同时显示0、1、2、3、4、5这6个不同的数字到6个数码管上9.本实验总结与结论 1.经过逻辑分析,编写VHDL代码,然后调试,进行波形仿真,最后下载到实验板实现,经过一系列工序,成功实现了数码管扫描显示控制器及发光二极管走马灯电路。2.进行数字电路实验,理论分析是十分重要的一环,只有逻辑分析透彻无误了,才能用语言进行描述,进而用硬件实现。这次实验让我对VHDL这样一门硬件描述语言有了更加深刻的认识。语言是描述设计者逻辑思想的,有什么样的逻辑思维就会产生什么样的代码,换句话说,逻辑思维错误将直接导致描述错误,进而不能实现数字逻辑。应该着重优化逻辑思维,才能写出优秀的硬件代码。3.硬件描述语言的学习,不同于一般编程语言的描述,它没有汇编那样深入硬件最底层,但从硬件抽象出来的逻辑却与硬件密不可分。编写硬件描述代码,不仅要符合基本编程语言的规范,更应该时时刻刻联系实现功能的硬件,理解时序和组合的关系,理解同步和异步的差异,理解进程和信号的流程等等,这样才能使写出的代码效率更高。4.通过这次实验,我对VHDL状态机有了更深层次的理解,也进一步理解了课堂上关于时序逻辑电路的内容,对于计数器、译码器的应用,有了更深层次的理解。通过这次实验,我巩固了在数字电路与逻辑设计课上学习到的理论知识,加深了对理论知识的理解。10. 学期总结 1.这学期开始了数字电路与逻辑设计课程,从理论课堂学习基本设计理论到实验课动手测试数字电路参数、编写VHDL代码实现逻辑功能,我对数字电路设计与实现的基本思想方法有了初步的了解,为日后进一步的学习打下了扎实的基础。数字电路是通信领域的重要的基础课,只有扎扎实实地学好它,才能将其

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论