《基于vhdl交通灯设计实验报告.doc》由会员分享,可在线阅读,更多相关《基于vhdl交通灯设计实验报告.doc(14页珍藏版)》请在三一办公上搜索。
1、 基于VHDL交通灯设计实验报告 学 院 名 称:班 级:姓 名: 2011年 1 月 目 录序言3一 实验目的3二 实验要求3三 实验步骤4四 实验设计44.1 端口描述模块44.2 计数模块的设计54.3 控制模块的设计5 4.3.1 时间状态的转换5 4.3.1 信号灯的状态显示6五、 实验电路波形图8六、 实验心得9参考文献10附录10序言VHDL的英文全写是:VHSIC(Very High Speed Integrated Circuit)Hardware Description Language.翻译成中文就是超高速集成电路硬件描述语言。因此它的应用主要是应用在数字电路的设计中。V
2、HDL主要用于描述数字系统的结构,行为,功能和接口VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。 随着基于VHDL的EDA技术的发展和应用领域的扩大与深入,EDA技术在电子信息、通信、自动控制用计算机等领域的重要性日益突出。作为一个学电子信息专业的学生,我们必须不断地了解更多的新产品信息,这就更加要求我们对EDA有个全面的认识。本程序设计的是交通灯的设计。采用EDA作为开发工具,VHDL语言为硬件描述语言,quartusII作为程序运行平台,所开发的程序
3、通过调试运行、波形仿真验证,初步实现了设计目标在一个交通繁忙的十字路口,没有交通灯来控制来往车辆和行人的通行,假设也没有交警,那会发生什么事情呢?后果是难以想象的,可能会陷入一片混乱,甚至瘫痪。当然我们每个人都不希望这样。我们作为社会的一员,每人都有责任为它的更加先进和快捷做出力所能及的事情。我们设计的这个信号控制系统可以通过交通灯控制东西方向车道和南北方向车道两条交叉道路上的车辆交替运行,每次通行时间都可以根据实际情况预设,用以减少交通事故的发生概率。并且经过些次实验使得我们对电子技术课程内容的理解和掌握有了更深一层的认识,掌握电子电路的基本分析方法和设计方法。一、实验目的 设计一个基于ED
4、A的十字路口交通控制器,假设南北方向和东西方向,两个方向分别设置红灯、绿灯、黄灯,每个方向设置一组倒计时显示器,用以指挥车辆和行人有序的通行。红灯亮表示直行车辆禁行;绿灯亮表示直行车辆可以通行;黄灯亮表示直行车辆即将禁行;.二、 实验要求 在十字路口南北和东西两个方向各设一组红灯、绿灯、黄灯。显示顺序:绿灯 黄灯 红灯 黄灯 红灯。南北方向绿灯、黄灯和红灯显示时间分别是40*tclk、5*tclk,南北方向红灯显示时间为东西方向黄绿灯显示时间的总和;东西方向绿灯、黄灯和红灯显示时间亦为40*tclk、5*tclk,东西方向红灯显示时间为南北方向黄绿灯显示时间的总和。(tclk为时钟周期)三、
5、实验步骤 在VHDL设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的外部时钟信号clk,输出信号:east_green_led;east_yellow_led ;east_red_led;south_green_led ;south_yellow_led;south_red_led。在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。通过上面的分析,不难得知可以把交通灯控制系统划分为3个模块:端口描述模块,计数模块,控制模块
6、。端口描述模块:定义实验要求的输入输出信号和灯亮时间; 计数器模块:这里需要的计数器的计数范围为0150。计到150后,下一个时钟沿升为1时,开始下一轮计数0。控制模块:通过计数器的计数控制东西南北方向灯的亮灭。四、 实验设计:4.1 端口描述模块实体:entity jiaotongdeng is generic(-定义灯亮的时间 east_green_cnt:integer:=40;-东西方向主干道绿灯 east_yellow_cnt:integer:=5;-东西方向主干道黄灯 south_green_cnt:integer:=40;-南北方向支干道绿灯 south_yellow_cnt:i
7、nteger:=5);-南北方向支干道黄灯 port(clk:in std_logic; east_green_led:out std_logic; east_yellow_led:out std_logic; east_red_led:out std_logic; south_green_led:out std_logic; south_yellow_led:out std_logic; south_red_led:out std_logic);end jiaotongdeng;功能:实现输出端口、外部时钟的定义4.2 计数模块的设计signal cnt:integer range 0 to
8、 150;.if clkevent and clk=1 then if enable_cnt=1 then cnt=cnt+1; else cnt=1; end if; 功能:实现0到150的计数4.3 控制模块的设计4.3.1 时间状态的转换u1:process(clk)-信号灯的时间状态的转换beginif clkevent and clk=1 then if enable_cnt=1 then cnt=cnt+1; else cnt if (cnt=east_green_cnt)then state=s1; else state if (cnt=east_yellow_cnt)then
9、state=s2; else state if(cnt=south_green_cnt)then state=s3; else state if (cnt=south_yellow_cnt)then state=s0; else state end case; end if;end process u1;4.3.2信号灯的状态显示u2:process(state)-信号灯的状态显示begin case state is when s0= east_green_led=1; east_yellow_led=0; east_red_led=0; south_green_led=0; south_y
10、ellow_led=0; south_red_led=1; enable_cnt=1; if(cnt=east_green_cnt)then enable_cnt east_green_led=0; east_yellow_led=1; east_red_led=0; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; if(cnt=east_yellow_cnt)then enable_cnt east_green_led=0; east_yellow_led=0; east_red_led=1; sou
11、th_green_led=1; south_yellow_led=0; south_red_led=0; enable_cnt=1; if(cnt=south_green_cnt)then enable_cnt east_green_led=0; east_yellow_led=0; east_red_led=1; south_green_led=0; south_yellow_led=1; south_red_led=0; enable_cnt=1; if(cnt=south_yellow_cnt)then enable_cnt east_green_led=0; east_yellow_l
12、ed=0; east_red_led=1; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; end case;end process u2;end ex;五、 实验电路波形图 六、实验心得课程设计对学生而言是其对所学课程内容掌握情况的一次自我验证,从而有着极其重要的意义。通过课程设计能提高学生对所学知识的综合应用能力,能全面检查并掌握所学内容,本学期我们进行了数字电路课程设计,老师命题,两人一小组进行设计。趣味性强,同时也可以学到很多东西。我们做的是交通灯控制器的设计。在这学期的课程设计中,在收获知识的
13、同时,还收获了阅历,收获了成熟,在此过程中,我们通过查找大量资料,请教老师,以及不懈的努力,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们学会了很多学习的方法。而这是日后最实用的,真的是受益匪浅。要面对社会的挑战,只有不断的学习、实践,再学习、再实践。通过这个程序设计让我学会一种新的语言,对数字系统结构也有了更进一步的了解和认识,对我以后的学习有很大的帮助。希望其他人在看再做类似设计时有所借鉴。通过几天的课程设计,我对数据库软件EDA技术、VHDL、等系列知识都有了一定的了解。使用EDA技术开发页面的能力也有了很大提高。另外,我还学到了一个人的力量毕竟有限,
14、但是团队的力量势不可挡,我们不能只靠自己,遇到不会的要多多求助同学, 这次课程设计虽然结束了,也留下了很多遗憾,因为由于时间的紧缺和许多课业的繁忙,并没有做到最好,但是,最起码我们没有放弃,它是我们的骄傲!相信以后我们会以更加积极地态度对待我们的学习、对待我们的生活。我们的激情永远不会结束,相反,我们会更加努力,努力的去弥补自己的缺点,发展自己的优点,去充实自己,只有在了解了自己的长短之后,我们会更加珍惜拥有的,更加努力的去完善它,增进它。只有不断的测试自己,挑战自己,才能拥有更多的成功和快乐!快乐至上,享受过程,而不是结果!认真对待每一个实验,珍惜每一分一秒,学到最多的知识和方法,锻炼自己的
15、能力,这个是我们在实时测量技术试验上学到的最重要的东西,也是以后都将受益匪浅的! 参考文献1、 VHDL设计初步.王虹现2、VHDL程序设计(第二版). 曾繁泰等.清华大学出版社 附录 总程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity a is generic( east_green_cnt:integer:=40; east_yellow_cnt:integer:=5; south_green_cnt:integer:=
16、40; south_yellow_cnt:integer:=5); port(clk:in std_logic; east_green_led:out std_logic; east_yellow_led:out std_logic; east_red_led:out std_logic; south_green_led:out std_logic; south_yellow_led:out std_logic; south_red_led:out std_logic);end a;-architecture ex of a istype states is(s0,s1,s2,s3,s4);s
17、ignal state1:states:=s0;signal state:states:=s0;signal cnt:integer range 0 to 150;signal save_cnt:integer;signal enable_cnt:std_logic:=0;beginu1:process(clk)beginif clkevent and clk=1 then if enable_cnt=1 then cnt=cnt+1; else cnt if (cnt=east_green_cnt)then state=s1; else state if (cnt=east_yellow_c
18、nt)then state=s2; else state if(cnt=south_green_cnt)then state=s3; else state if (cnt=south_yellow_cnt)then state=s0; else state end case; end if;end process u1;u2:process(state)begin case state is when s0= east_green_led=1; east_yellow_led=0; east_red_led=0; south_green_led=0; south_yellow_led=0; s
19、outh_red_led=1; enable_cnt=1; if(cnt=east_green_cnt)thenenable_cnt east_green_led=0; east_yellow_led=1; east_red_led=0; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; if(cnt=east_yellow_cnt)then enable_cnt east_green_led=0; east_yellow_led=0; east_red_led=1; south_green_led=1;
20、 south_yellow_led=0; south_red_led=0; enable_cnt=1; if(cnt=south_green_cnt)then enable_cnt east_green_led=0; east_yellow_led=0; east_red_led=1; south_green_led=0; south_yellow_led=1; south_red_led=0; enable_cnt=1; if(cnt=south_yellow_cnt)then enable_cnt east_green_led=0; east_yellow_led=0; east_red_led=1; south_green_led=0; south_yellow_led=0; south_red_led=1; enable_cnt=1; end case;