您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 基于vhdl的交通灯设计
交通灯设计课程名称:学院专业姓名:学号:年级:任课教师:2011年9月5日实验目的:1.熟悉quartus的使用,了解VHDL编程2.掌握逻辑电路的设计方法3.利用Quartus,使用VHDL语言编写一个交通灯的程序,使之可以实现红黄绿灯的交替出现,并在十字路口的另一条岔路上实现指挥的同步,完成交通指挥的功能。实验基本原理:在假设时钟信号为1HZ的情况下,对路口的灯进行计时,每当时间到时转入下一个状态,开始新一轮的计时,一个十字路口的交通灯组合后有四种情况(绿,红)(黄,红)(红,绿)(红,黄),每个状态可对应一个时间。在对每种状态编号后就可以开始状态的循环了。实验内容:实验代码:libraryieee;useieee.std_logic_1164.all;useieee.std_logic_arith.all;useieee.std_logic_unsigned.all;entitytrafficisport(clk:instd_logic;r1,y1,g1,r2,y2,g2:outstd_logic--六个输出对应十字路口的六个红绿灯);endtraffic;architectureactoftrafficisconstantyellow_time:integer:=5;constantgreen_time:integer:=20;--不用定义红灯的时间,因为后面用不到.signalstate:integerrange0to3;--这里有四种状态,用state来表示beginprocess(clk)beginif(clk'eventandclk='1')thencasestateis--用来展示这四种状态when0=r1='0';y1='0';g1='1';r2='1';y2='0';g2='0';when1=r1='0';y1='1';g1='0';r2='1';y2='0';g2='0';when2=r1='1';y1='0';g1='0';r2='0';y2='0';g2='1';whenothers=r1='1';y1='0';g1='0';r2='0';y2='1';g2='0';endcase;endif;endprocess;process(clk)variablecount:integerrange0to25;beginif(clk'eventandclk='1')thenifcount=0then--状态的循环ifstate=3thenstate=0;elsestate=state+1;endif;casestateiswhen0=count:=yellow_time;--选择状态对应的时间when1=count:=green_time;when2=count:=yellow_time;whenothers=count:=green_time;endcase;elsecount:=count-1;--状态的计时endif;endif;endprocess;endact;实验结果点击编译,可以看出没有出现错误设计出相应的波形文件并加载后,点击仿真,就可以出现如下的波形由时序仿真的结果可以看出,它实现了红绿灯的交替以及十字路口的两路灯的协调实验总结:此次实验做出的交通灯是建立在时钟频率为1HZ的基础上的,而硬件实验中提供的时钟信号一般都为几兆赫兹,因此如果这个实验想要下载到实验箱上去模拟的的话就需要在前面加上分频的代码,并将clk换成更改后的时钟通过实验的结果可以看出,在红绿灯稳定之前,有几秒钟的不稳定时期,这个是由于在设计是没有给变量赋给初值造成的,这在以后的设计中尤其需要注意,而在稳定后,功能实现较好,各时间段的衔接很顺畅,并且计时的时候用的是定义的常数green_time和yellow_time本实验中定义式25秒和5秒,这种做法可以方便以后的维护,修改起来也比较方便,并且使代码比较容易读懂。
本文标题:基于vhdl的交通灯设计
链接地址:https://www.777doc.com/doc-2572721 .html