《《数字系统仿真与VHDL设计》课程设计报告交通灯.doc》由会员分享,可在线阅读,更多相关《《数字系统仿真与VHDL设计》课程设计报告交通灯.doc(17页珍藏版)》请在三一办公上搜索。
1、湖南科技大学信息与电气工程学院数字系统仿真与VHDL设计课程设计报告题 目: VHDL语言课程设 专 业: 通信工程 班 级: 二班 姓 名: 学 号: 7 课程设计任务书题 目设 计 时 间设 计 目 的:设 计 要 求:总体方案实现:指导教师评语:目 录1、课程设计的目的。2、设计方案的论证。3、设计仿真及结果分析。4、设计及仿真中的体会。5、对本次课程设计的体会和建议。6、参考文献(包括电路图和元器件清单)1、课程设计的目的选题一:循环彩灯控制器设计一个循环彩灯控制器,该控制器控制红,绿,黄三个发光管循环点亮。要求红发光管亮3秒,绿发光管亮2秒,黄发光管亮1秒。选题二:交通灯控制器的程序
2、设计用于十字路口的交通灯控制器。要求:东西方向各有一组红,黄,绿灯用于指挥交通,红,黄,绿的持续时间分别为25s,5s,20s 。当有紧急情况(如消防车)时,两个方向均为红灯亮,计时停止,当特殊情况结束后,控制器恢复初始状态,正常工作。选题三:多功能电子表设计一个含有数字钟的多功能电子表。数字钟以“秒”作为基准信号,可显示时、分、秒。2、设计方案的论证选题一:循环彩灯控制器要实现彩灯的循环控制需设计一个六进制计数器count,该计数器以时钟脉冲clk为输入信号,上升沿触发有效,采用VHDL硬件描述语言中的CASE语句实现控制彩灯的亮灭,设置一个输出三位逻辑值output以表示彩灯亮灭的总体情况
3、,顺序为红、绿、黄,逻辑1表示灯亮,逻辑0表示灯不亮。其真值表如下:countoutput彩灯000100红灯亮001100红灯亮010100红灯亮011010绿灯亮100010绿灯亮101001黄灯亮设置输入时钟脉冲以1s为周期即可实现题设要求红发光管亮3秒,绿发光管亮2秒,黄发光管亮1秒。为实现对彩灯的控制,设置一个清零端clr和置位端reset,均为高电平有效。当清零端clr为高电平时,彩灯均不亮,当置位端reset为高电平时,彩灯从初始状态开始重新循环,直到清零端clr的下一个高电平脉冲使其清零。输入端口为:clk(时钟脉冲信号)、clr(清零端)、reset(置位端)输出端口为:ou
4、tput(2 downto 0)选题二:交通灯控制器的程序设计要实现对交通灯的控制,原理和选题一大同小异,设计一个十进制计数器count,该计数器以时钟信号clk为输入信号,上升沿触发有效,采用VHDL硬件描述语言中的CASE语句实现控制彩灯的亮灭,东西两个方向分别设置一个输出三位逻辑值output1,output2以表示彩灯亮灭的总体情况,顺序为红、绿、黄,逻辑1表示灯亮,逻辑0表示灯不亮。为操作方便,将output1,output2合并为一个六位逻辑值output表示,其真值表如下:countoutput东西0000100010红灯亮绿灯亮0001100010红灯亮绿灯亮001010001
5、0红灯亮绿灯亮0011100010红灯亮绿灯亮0100100001红灯亮黄灯亮0101010100绿灯亮红灯亮0110010100绿灯亮红灯亮0111010100绿灯亮红灯亮1000010100绿灯亮红灯亮1001001100黄灯亮红灯亮设置一个置位端set,高电平有效,当有特殊情况发生时,使set为高电平,此时两个方向均为红灯亮,当set还原为低电平时,即当特殊情况结束后,控制器恢复初始状态,正常工作。输入端口:clk(时钟脉冲信号)、set(特殊情况控制信号)输出端口:r_east,g_east,y_east,r_west,g_west,y_west(东西方向红绿灯)选题三:多功能电子表设
6、置一个输入端clk时钟脉冲输入信号,以hout,mout2,mout1,sout2,sout1分别表示时间的时、分、秒,从最低位s1(即秒的个位)开始计数,s2,s1构成一个六十进制计数器,当s1受时钟脉冲触发控制,当s1计数至9时,s2加1,s1从零开始重新计数,以此类推,m2,m1构成一个六十进制计数器,以s2,s1一个计数周期为触发。其中h,m2,m1,s2,s1均用四位二进制数表示,当完成一个整周期后从零开始重新循环。这样就实现了电子表的计时功能。要利用六个七段数码管实现电子表的显示功能,用h2,h1,m2,m1,s2,s1分别表示实现显示功能的数码管,它们在程序中都是以七位二进制逻辑
7、值表示,其表示方法与对应的十进制数值关系如下:十进制数值二进制数值七段数码管表示000000111111100010000110200101011011300111001111401001100110501011101101601101111101701110000111810001111111910011101111输入端口:clk(时钟脉冲信号)输出端口hout,mout2,mout1,sout2,sout1,h2,h1,m2,m1,s2,s13、设计仿真及结果分析选题一仿真波形如下:选题二仿真波形如下:选题三仿真波形如下:4、设计及仿真中的体会设计过程中调试的时候发现不能进行调试,后来经
8、过学习和查阅资料发现程序文件名的后缀应为“.vhd”,并且文件名应该与程序中命名 的实体名一致,否则都会造成程序段不能编译调试成功,后来,把这些都改正之后发现程序还是调试不了,在确认程序设计思想及逻辑都没有问题之后,更加百思不得其解,也没有出什么明显的语法错误,慢慢琢磨了很久之后还是不清楚,后来突然发现原来自己少些了一个库文件的调用“USE IEEE.STD_LOGIC_UNSIGNED.ALL;”,添加之后便能正常运行了, 5、对本次课程设计的体会和建议对于自己所犯的这个“小错误”我自己都觉得很好笑,不过我也因此更加明白细心对于编程的重要性,真可谓“一着不慎,全盘皆输”啊,此后一定要随时提醒
9、自己要细心。不过总的来说,这次课程设计让我收获了不少,让我对maxplux软件进一步了解,对vhdl语言的编程思想也更加了解,增加了操作的熟练程度。6、参考文献(包括电路图和元器件清单)1 作者:侯伯亨,刘凯,顾新书名:VHDL硬件描述语言与数字逻辑电路设计出版社:西安电子科技大学出版社出版时间:2009.082 作者:蒋清明书名:语言程序设计出版社:人民邮电出版社出版时间:2008.043 作者:田红丽,张涛书名:基于VHDL微处理器模拟实验系统的设计与实现出版社:河北省科学院 附录一 选题一源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IE
10、EE.STD_LOGIC_UNSIGNED.ALL;ENTITY light ISPORT(clk,clr:IN STD_LOGIC; output:OUT STD_LOGIC_VECTOR(2 DOWNTO 0);END ENTITY light;ARCHITECTURE example OF light ISSIGNAL count:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGINPROCESS(clk,clr)ISBEGINIF(clr=1)THENcount=000;ELSIF(clkEVENT AND clk=1)THEN IF(count=101)THEN co
11、unt=000; ELSE countoutputoutputoutputoutputoutputoutputoutput=000;END CASE;END IF;END PROCESS;END ARCHITECTURE example;附录二 选题二源程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY trafficlight ISPORT(clk,set:IN STD_LOGIC; r_east,g_east,y_east,r_west,g_west,y_west:OUT STD
12、_LOGIC);END ENTITY trafficlight;ARCHITECTURE example OF trafficlight ISSIGNAL count:STD_LOGIC_VECTOR(3 DOWNTO 0);SIGNAL output:STD_LOGIC_VECTOR(5 DOWNTO 0);BEGINPROCESS(clk,set)ISBEGINIF(set=1)THEN count=1010; ELSIF(clkEVENT AND clk=1)THEN IF(count=1001OR count=1010)THEN count=0000; ELSE countoutput
13、outputoutputoutputoutputoutputoutputoutputoutputoutputoutputoutput=100100;END CASE;r_east=output(5);g_east=output(4);y_east=output(3);r_west=output(2);g_west=output(1);y_west=output(0);END PROCESS;END ARCHITECTURE example;附录三 选题三源程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned
14、.all;entity a2 isport(clk:in std_logic; hdout:out std_logic_vector(3 downto 0); mdout2:out std_logic_vector(3 downto 0);mdout1:out std_logic_vector(3 downto 0);sdout2:out std_logic_vector(3 downto 0);sdout1:out std_logic_vector(3 downto 0);m2,m1,s2,s1:out std_logic_vector(6 downto 0); end entity a2;
15、architecture e1 of a2 issignal out5:std_logic_vector(3 downto 0);signal out4:std_logic_vector(3 downto 0);signal out3:std_logic_vector(3 downto 0);signal out2:std_logic_vector(3 downto 0);signal out1:std_logic_vector(3 downto 0); begin hdout=out5; mdout2=out4;mdout1=out3;sdout2=out2;sdout1=out1;proc
16、ess(clk) isbeginif(clk event and clk=1) thenif(out1=1001) thenout1=0000; elseout1=out1+1; end if;end if;end process;process(clk) isbeginif(clkevent and clk=1) then if(out1=1001) thenif(out2=0101) thenout2=0000;elseout2=out2+1;end if;end if;end if;end process;process(clk) isbeginif(clkevent and clk=1
17、)thenif(out1=1001) then if(out2=0101) thenif(out3=1001) thenout3=0000;elseout3=out3+1;end if;end if;end if;end if; end process;process(clk) isbeginif(clkevent and clk=1)thenif(out1=1001) then if(out2=0101) thenif(out3=1001) thenif(out4=0101) thenout4=0000;elseout4=out4+1; end if;end if;end if;end if
18、;end if;end process; process(clk) isbeginif(clkevent and clk=1)thenif(out1=1001) then if(out2=0101) thenif(out3=1001) thenif(out4=0101) thenif(out5=1011) thenout5=0000;elseout5s1s1s1s1s1s1s1s1s1s1s1s2s2s2s2s2s2s2m1m1m1m1m1m1m1m1m1m1m1m2m2m2m2m2m2m2=0000000; end case; end process;end architecture e1;