循环彩灯课程设计程序.docx
- 文档编号:15222039
- 上传时间:2023-07-02
- 格式:DOCX
- 页数:12
- 大小:105.38KB
循环彩灯课程设计程序.docx
《循环彩灯课程设计程序.docx》由会员分享,可在线阅读,更多相关《循环彩灯课程设计程序.docx(12页珍藏版)》请在冰点文库上搜索。
循环彩灯课程设计程序
湖南科技大学信息与电气工程学院
VHDL课程设计报告
专业:
电子信息工程
班级:
一班
姓名:
崔永康
学号:
1104030115
指导老师:
罗朝辉
课程设计任务书
题目
设计时间
设计目的:
设计要求:
总体方案实现:
指导教师评语:
1、课程设计的目的。
本设计的任务是熟悉支持VHDL语言的软件,如MaxPlus2,quartus等,利用这一类软件使用VHDL语言进行设计编译仿真。
本次设计的主要目的:
1、使我们熟练掌握相关软件MaxPlus2及quartus的使用操作。
能对VHDL语言程序进行编译及调试,以及通过计算机仿真,得到正确的仿真波形图,并根据所得仿真波形图分析判断并改进所设计的电路。
2、在成功掌握软件操作基础上,让学生将所学数字电路的基础课知识与VHDL语言的应用型知识结合起来并与实际设计,操作联系起来,即“理论联系实际”。
要求学生自主设计电路,编写程序,鼓励新思路,新方法,新观点。
3、完成可编程器件与VHDL语言课程设计,掌握设计语言技术的综合应用性。
通过对课程的设计、仿真、调试来具体完成。
4、熟悉系统的分析和设计方法,合理掌握选用集成电路的方法,初步接触EDA技术,为以后本专业的学习奠定良好的基础。
2、设计方案的论证。
彩灯控制器电路是整个设计的核心,它控制整个设计的输出效果也就是图案的样式变化。
在电路中用1代表灯亮,用O代表灯灭,由0,1按不同的规律组合代表不同的灯光图案,同时使其选择不同的频率,以实现多种图案及多种频率的花样功能显示。
该程序充分证明了用VHDL设计电路的灵活性,即可以通过改变程序中输出变量的位数来改变彩灯的数目。
彩灯控制器的第1种花样为彩灯从右到左,然后从左到右逐次点亮,全灭全亮,第2种花样为彩灯两边同时亮1个逐次向中间移动再散开;第3种花样为彩灯两边同时亮2个逐次向中间移动再散开个花样自动变换,循环往复。
3、设计仿真及结果分析。
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYcolorlightIS
PORT(clk,clr:
INSTD_LOGIC;
red,green,yellow:
OUTSTD_LOGIC);
ENDENTITYcolorlight;
ARCHITECTUREexampleOFcolorlightIS
SIGNALdout:
STD_LOGIC_VECTOR(2DOWNTO0);
SIGNALm:
STD_LOGIC_VECTOR(2DOWNTO0);
BEGIN
red<=dout
(2);
green<=dout
(1);
yellow<=dout(0);
PROCESS(clk)IS
BEGIN
IF(clr='1')THEN
m<="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;
ENTITYsecondIS
PORT(clk1,reset1:
STD_LOGIC;
enmin:
OUTSTD_LOGIC;
daout1:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYsecond;
ARCHITECTUREfunOFsecondIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGINdaout1<=count;
PROCESS(clk1,reset1)
BEGIN
IF(reset1='0')THENcount<="0000000";
ELSIF(clk1'eventandclk1='1')then
IF(count<16#3C#)then
IF(count="0111011")then
enmin<='1';
count<="0000000";
ELSE
count<=count+1;
enmin<='0';
ENDIF;
ENDIF;
ENDIF;
ENDPROCESS;
ENDfun;
仿真结果:
仿真分析:
根据程序,对秒进行简单计数,当计数达60时,计数器清零,向enmin进位,并开始新的计时。
如此循环,实现对秒计数的仿真。
如图所示
2分计数模块
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYminuteIS
PORT(clk2,reset2:
INSTD_LOGIC;
enhour:
OUTSTD_LOGIC;
daout2:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYminute;
ARCHITECTUREfunOFminuteIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN--enmin_2由clk调制后的手动调时脉冲信号串
daout2<=count;
PROCESS(clk2,reset2)
BEGIN
IF(reset2='0')THEN--若reset为0,则异步清零
count<="0000000";
ELSIF(clk2'eventandclk2='1')THEN--否则,若clk上升沿到
IF(count<16#3C#)THEN--又若count小于16#60#,即60
IF(count="0111011")THEN--又若已到59D
enhour<='1';--则置进位为1
count<="0000000";--count复0
ELSE
count<=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;
ENTITYhourIS
PORT(clk3,reset3:
INSTD_LOGIC;
daout3:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYhour;
ARCHITECTUREfunOFhourIS
SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
BEGIN
daout3<=count;
PROCESS(clk3,reset3)
BEGIN
IF(reset3='0')THEN--若reset为0,则异步清零
count<="0000000";
ELSIF(clk3'eventandclk3='1')THEN--否则,若clk上升沿到
IF(count<16#18#)THEN--又若count小于16#60#,即24
IF(count="0010111")THEN--又若已到23
count<="0000000";--count复0
ELSE
count<=count+1;
ENDIF;--使前面的16#60#的个位转变为8421BCD的容量
ENDIF;
ENDIF;
ENDprocess;
ENDfun;
仿真结果:
仿真分析:
时计数,所计数的量程不同,原理大致与以上两个模块一样。
仿真如图
4顶层模块设计
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITYshizhongIS
PORT(clk,reset:
STD_LOGIC;
out1,out2,out3:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
ENDENTITYshizhong;
ARCHITECTUREfunOFshizhongIS
--SIGNALcount:
STD_LOGIC_VECTOR(6DOWNTO0);
componentsecond
port(clk1,reset1:
instd_logic;
enmin:
outstd_logic;
daout1:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
endcomponent;
componentminute
port(clk2,reset2:
instd_logic;
enhour:
outstd_logic;
daout2:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
endcomponent;
componenthour
port(clk3,reset3:
instd_logic;
daout3:
OUTSTD_LOGIC_VECTOR(6DOWNTO0));
endcomponent;
signala,b:
std_logic;
begin
u1:
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课程设计的课程设计时间主要是2014年1月9日至17日这两周时间。
主要的设计任务是将本学期VHDL硬件描述语言与数字逻辑电路设计和上学期所学的数字电路中所学的知识运用的实践中去,提高自己在理论与实践的相结合能力,进一步掌握本专业的各项知识,为以后的专业学习打下良好的基础。
从一些基础掌握一些本专业所学的知识了解一些基础的实验工具如quartus的使用,本次的设计基本达到预期的效果,得出设计的结果。
但本次数字系统仿真与VHDL课程设计也存在着一些不足之处,于此将本次设计的收获和不足总结为以下几点:
第一、在程序的编写过程中,通过发现问题再到解决问题,在这过程中,逐渐的掌握了Max Plus2的使用以及在使用过程中的一些注意事项,对更好的学习理论知识起到了一定的帮助。
第二、初步了解对电路的设计的思维和方法,在这方面还有很多不足的地方,理论知识不强,专业的课外知识不充足。
在编写程序的过程中遇到了一定的麻烦,感受到了正确的不一定是实用的。
第三、本次的设计得益于网络资源及图书馆资料的帮助,同时我也认识到在未来的学习中我们不仅要从老师那里学习知识,更多的是合理的正确的利用网上及图书馆资源
6、参考文献(包括电路图和元器件清单)
[1]作者:
侯伯亨,刘凯,顾新
书名:
《VHDL硬件描述语言与数字逻辑电路设计》
出版社:
西安电子科技大学出版社
出版时间:
2009.08
[2]作者:
蒋清明
书名:
《C语言程序设计》
出版社:
人民邮电出版社
出版时间:
2008.04
[3]作者:
田红丽,张涛
书名:
《基于VHDL微处理器模拟实验系统的设计与实现》
出版社:
河北省科学院
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 循环 彩灯 课程设计 程序