循环彩灯课程设计程序_第1页
循环彩灯课程设计程序_第2页
循环彩灯课程设计程序_第3页
循环彩灯课程设计程序_第4页
循环彩灯课程设计程序_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

湖南科技大学信息与电气工程学院VHDL课程设计报告专业:电子信息工程班级:一班姓名:崔永康学号:1104030115指导老师:罗朝辉课程设计任务书题目设计时间设计目的:设计要求:总体方案实现:指导教师评语:课程设计的目的。本设计的任务是熟悉支持VHDL语言的软件,如MaxPlus2,quartus等,利用这一类软件使用VHDL语言进行设计编译仿真。本次设计的主要目的:1、使我们熟练掌握相关软件MaxPlus2及quartus的使用操作。能对VHDL语言程序进行编译及调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。2、在成功掌握软件操作基础上,让学生将所学数字电路的基础课知识与VHDL语言的应用型知识结合起来并与实际设计,操作联系起来,即“理论联系实际”。要求学生自主设计电路,编写程序,鼓励新思路,新方法,新观点。3、完成可编程器件与VHDL语言课程设计,掌握设计语言技术的综合应用性。通过对课程的设计、仿真、调试来具体完成。4、熟悉系统的分析和设计方法,合理掌握选用集成电路的方法,初步接触EDA技术,为以后本专业的学习奠定良好的基础。设计方案的论证。彩灯控制器电路是整个设计的核心,它控制整个设计的输出效果也就是图案的样式变化。在电路中用1代表灯亮,用O代表灯灭,由0,1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,以实现多种图案及多种频率的花样功能显示。该程序充分证明了用VHDL设计电路的灵活性,即可以通过改变程序中输出变量的位数来改变彩灯的数目。彩灯控制器的第1种花样为彩灯从右到左,然后从左到右逐次点亮,全灭全亮,第2种花样为彩灯两边同时亮1个逐次向中间移动再散开;第3种花样为彩灯两边同时亮2个逐次向中间移动再散开个花样自动变换,循环往复。设计仿真及结果分析。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYcolorlightISPORT(clk,clr:INSTD_LOGIC; red,green,yellow:OUTSTD_LOGIC);ENDENTITYcolorlight;ARCHITECTUREexampleOFcolorlightISSIGNALdout:STD_LOGIC_VECTOR(2DOWNTO0);SIGNALm:STD_LOGIC_VECTOR(2DOWNTO0);BEGINred<=dout(2);green<=dout(1);yellow<=dout(0);PROCESS(clk)ISBEGINIF(clr='1')THENm<="001"; ELSIF(clk'EVENTANDclk='1')THEN IF(m="110")THEN m<="001"; ELSE m<=m+1; ENDIF; CASEmIS WHEN"001"=>dout<="100"; WHEN"010"=>dout<="100"; WHEN"011"=>dout<="100"; WHEN"100"=>dout<="010"; WHEN"101"=>dout<="010"; WHEN"110"=>dout<="001"; WHENOTHERS=>dout<="111"; ENDCASE;ENDIF;ENDPROCESS;ENDARCHITECTURE;仿真分析:根据程序,clk为时钟脉冲。Clr设为高电平有效,根据要求以及程序的响应。红色灯亮三秒,即持续三个时间脉冲,绿色灯亮2秒,即持续两个时钟脉冲,黄色灯亮疫苗。就一个时钟脉冲。如图所示,仿真正确。实验二:1秒计数模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYsecondISPORT(clk1,reset1:STD_LOGIC;enmin:OUTSTD_LOGIC;daout1:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYsecond;ARCHITECTUREfunOFsecondISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);BEGINdaout1<=count;PROCESS(clk1,reset1)BEGINIF(reset1='0')THENcount<="0000000";ELSIF(clk1'eventandclk1='1')thenIF(count<16#3C#)thenIF(count="0111011")thenenmin<='1';count<="0000000";ELSEcount<=count+1;enmin<='0';ENDIF;ENDIF;ENDIF;ENDPROCESS;ENDfun;仿真结果:仿真分析:根据程序,对秒进行简单计数,当计数达60时,计数器清零,向enmin进位,并开始新的计时。如此循环,实现对秒计数的仿真。如图所示2分计数模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYminuteISPORT(clk2,reset2:INSTD_LOGIC;enhour:OUTSTD_LOGIC;daout2:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYminute;ARCHITECTUREfunOFminuteISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);BEGIN--enmin_2由clk调制后的手动调时脉冲信号串daout2<=count;PROCESS(clk2,reset2)BEGINIF(reset2='0')THEN--若reset为0,则异步清零count<="0000000";ELSIF(clk2'eventandclk2='1')THEN--否则,若clk上升沿到IF(count<16#3C#)THEN--又若count小于16#60#,即60IF(count="0111011")THEN--又若已到59Denhour<='1';--则置进位为1count<="0000000";--count复0ELSEcount<=count+1;--若count未到59D,则加7,即作"加6校正"enhour<='0';ENDIF;--使前面的16#60#的个位转变为8421BCD的容量ENDIF;--ENDIF(reset='0')ENDIF;ENDprocess;ENDfun;仿真结果:仿真分析,与秒计时原理一样。只是输出端的改变,clk仍为时钟信号,上升沿有效。3.时计数模块LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYhourISPORT(clk3,reset3:INSTD_LOGIC;daout3:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYhour;ARCHITECTUREfunOFhourISSIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);BEGINdaout3<=count;PROCESS(clk3,reset3)BEGINIF(reset3='0')THEN--若reset为0,则异步清零count<="0000000";ELSIF(clk3'eventandclk3='1')THEN--否则,若clk上升沿到IF(count<16#18#)THEN--又若count小于16#60#,即24IF(count="0010111")THEN--又若已到23count<="0000000";--count复0ELSEcount<=count+1;ENDIF;--使前面的16#60#的个位转变为8421BCD的容量ENDIF;ENDIF;ENDprocess;ENDfun;仿真结果:仿真分析:时计数,所计数的量程不同,原理大致与以上两个模块一样。仿真如图4顶层模块设计LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYshizhongISPORT(clk,reset:STD_LOGIC;out1,out2,out3:OUTSTD_LOGIC_VECTOR(6DOWNTO0));ENDENTITYshizhong;ARCHITECTUREfunOFshizhongIS--SIGNALcount:STD_LOGIC_VECTOR(6DOWNTO0);componentsecondport(clk1,reset1:instd_logic;enmin:outstd_logic;daout1:OUTSTD_LOGIC_VECTOR(6DOWNTO0));endcomponent;componentminuteport(clk2,reset2:instd_logic;enhour:outstd_logic;daout2:OUTSTD_LOGIC_VECTOR(6DOWNTO0));endcomponent;componenthourport(clk3,reset3:instd_logic;daout3:OUTSTD_LOGIC_VECTOR(6DOWNTO0));endcomponent;signala,b:std_logic;beginu1:secondportmap(clk1=>clk,reset1=>reset,daout1=>out1,enmin=>a);u2:minuteportmap(clk2=>a,reset2=>reset,daout2=>out2,enhour=>b);u3:hourportmap(clk3=>b,reset3=>reset,daout3=>out3);endARCHITECTUREfun;仿真波形:仿真分析:时钟计数器是有三个模块共同组合达到所需要仿真的功能。在本次仿真中需要将以上三个模块组合起来。运用component语句,实现秒计进分,分计进时。这样便实现日常的时钟表的工作,达到仿真,实现仿真目的。仿真结果如上图。4、设计及仿真中的体会。在设计与仿真中,由于对软件的不了解,操作也不熟练,经常会出现找不到自己想要的。尤其在仿真中,对信号的输入,以及调试要得到预期的结果都有些不太明白。但最后通过向他人求助解决了这个这些问题。设计过程中调试的时候发现不能进行调试,后来经过学习和查阅资料发现程序文件名的后缀应为“.vhd”,并且文件名应该与程序中命名的实体名一致,否则都会造成程序段不能编译调试成功,后来,把这些都改正之后发现程序还是调试不了,在确认程序设计思想及逻辑都没有问题之后,更加百思不得其解,也没有出什么明显的语法错误,慢慢琢磨了很久之后还是不清楚,后来突然发现原来自己少些了一个库文件的调用“USEIEEE.STD_LOGIC_UNSIGNED.ALL;”,添加之后便能正常运行了。所以要想学号这门语言,必须要多练习,才能够很好的掌握。5、对本次课程设计的体会和建议。本次数字系统仿真与VHDL课程设计的课程设计时间主要是20

温馨提示

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

最新文档

评论

0/150

提交评论