1、桂林电子科技大学EDA实训交通灯控制电路的设计 桂林电子科技大学信息科技学院EDA技术及应用实训报告学 号 06 姓 名 陈 力 指导教师:李德明2014 年 4 月 29 日交通灯控制电路的设计1 系统设计1.1 设计要求1.1.1 设计任务 用EDA实训仪上的4只八段数码管分别显示道路东西和南北通行和禁止的倒计时时间。1.1.2 性能指标要求 能设置道路东西和南北两侧通行和禁止的倒计时时间,最大设置时间为99秒,最小设置时间为1秒。交通灯用红、绿、黄三种发光二极管(LED)显示控制的结果。红、绿、黄灯显示的次序应符合实际交通道路控制的要求。1.2 设计思路及设计框图fpq是分频器,将EDA
2、实训仪主板提供的20MHz的主频经分频后,得到电路所需的1Hz(1秒)时钟。Rgwork和ywork是减法计数器,产生道路东西和南北通行和禁止的倒计时时间。Counter是控制电路,控制整个系统的工作。控制器接收倒计时的结果,当倒计时归0时,改变电路的控制模式,输出倒计时的初始时间和交通灯亮灭控制信号。6输入或非门和2输入与非门组成了简易密码锁的功能(通过拨码开关实现)。分频器 交通灯控制电路 数码管及LED灯2 各个模块程序的设计2.1分频器模块的设计分频器模块截图:分频器模块程序设计:module fpq(clk,newclk);input clk;output reg newclk;re
3、g24:0 counter;always (posedge clk )begincounter=counter+1;if(counter=)counter=0;if(counter)newclk=b0;endendmodule2.2红绿灯模块设计红绿灯模块截图:红绿灯模块程序设计:module rgwork(clk,clrn,ydbj,gzfs,LED,t1,t2,q1,q2);input clk,clrn;input 7:0 q1,q2;output reg ydbj;output reg1:0 gzfs;output reg7:0 LED;output reg7:0 t1,t2;reg7:
4、0 rtime,gtime,ytime,rtime1=h20,gtime1=h16;reg1:0 z;initial begin rtime=h20;gtime=h16;ytime=h03;ydbj=0;z=0;endalways (posedge clk or negedge clrn)begin if(clrn) ydbj=1; else begin if(q1=0|q2=0) ydbj=1; else begin ydbj=0; rtime=rtime1;gtime=gtime1; end endend always (posedge ydbj or negedge clrn) begi
5、n if(clrn) begin t1=rtime;t2=gtime;LED=b01100110;gzfs=2;z=0; end else begin z=z+1; case (z) 0:begin t1=rtime;t2=gtime;LED=b01100110;gzfs=2;end 1:begin t1=ytime;t2=ytime;LED=b00100010;gzfs=0;end 2:begin t1=gtime;t2=rtime;LED=b;gzfs=2;end 3:begin t1=ytime;t2=ytime;LED=b;gzfs=1;end default:begin t1=rti
6、me;t2=gtime;LED=b01100110;gzfs=2;end endcase endendendmodule2.3黄灯模块设计黄灯模块截图:黄灯模块程序设计:module ywork(gzfs,clk,clrn,q1,q2,LED_h);input7:0 q1,q2;input clk,clrn;input 1:0 gzfs;output reg3:0 LED_h;always (posedge clk or negedge clrn)begin if(clrn) LED_h=b0000; else begin if(gzfs=0) begin if(q1=h03&q2=h03)
7、LED_h=b1010; if(q1=h02&q2=h02) LED_h=b0000; if(q1=h01&q2=h01) LED_h=b1010; if(q1=h00&q2=h00) LED_h=b0000; end if(gzfs=1) begin if(q1=h03&q2=h03) LED_h=b0101; if(q1=h02&q2=h02) LED_h=b0000; if(q1=h01&q2=h01) LED_h=b0101; if(q1=h00&q2=h00) LED_h=b0000; end endend endmodule 2.4控制模块的设计控制模块截图:控制模块程序设计:mo
8、dule countor(ts,en,clk,ybj,t1,t2,q1,q2);input clk,ybj,en,ts;input7:0 t1,t2;output reg7:0 q1,q2;always (posedge clkts or posedge ybj or posedge en)begin if(en) begin q1=q1;q2=q2; end else begin if(ybj) begin q1=t1;q2=t2; end else begin if(q1=0) q1=h99; else begin q1=q1-1;end if(q13:0=ha) q13:0=9; if(
9、q2=0) q2=h99; else begin q2=q2-1;end if(q23:0=ha) q23:0=9; end endendendmodule3 调试过程用Quartus 软件对程序编译成功后下载到EDA试验箱。LED开始亮,四个数码管显示3s倒计时,即黄灯开始进入闪烁状态,然后开始实现东西方绿灯,南北方红灯状态。绿灯倒计时结束以后黄灯再次闪烁,随后进入南北方绿灯,东西方红灯状态。并不断自动进行转换。当S15拨到上方时,实现交通灯暂停(使能端作用)。当K8按键按下时,交通灯自动恢复到初始化状态。当将S3,S2,S1,S0拨为1010并按下K7按键能实现减计数调时。4 功能测试4.
10、1 测试仪器与设备 EDA实训箱、 计算机一台、Quartus 软件4.2 性能指标测试 基本实现要求,初始化南北方向为红灯,东西方向为绿灯,倒计时20s,东西方向开始黄灯闪烁3秒,同时南北方向还为红灯,3秒后东西方向变为红灯,南北方向变为绿灯。倒计时的同时数码管交替显示不同亮灯的倒计时时间。实现4位数码管显示。拨码开关S15实现暂停功能,S3到S0四个拨码开关实现简易密码锁功能(当拨“1010”时,可以实现调时功能,密码错误时则无法实现调时功能)。两个按键K8,K7分别实现复位与调时功能(调时功能在密码正确情况下实现)。5 实训心得体会这次实验使我更进一步地熟悉了VHDL硬件描述语言的设计思
11、想,同时通过对程序的调试也使自己对VHDL语言的语法,结构和基本语句有了更深刻的了解。在设计较复杂数字电路系统时最好采用分层设计的方法,分为各个功能模块,逐个进行仿真,最后通过顶层文件调用各个底层文件完成设计,程序也便于修改如程序要增加一些功能也只需加入相应的模块即可。在设计的过程中还应该多联系下实际情况,要了解实际情况下交通信号灯的工作情况,才能更好的完成此次的课程设计。在今后的工作和学习中,我们不能仅仅把目光停留在课本上,要多理论联系实际。有的时候,理论上是正确的东西放到现实中去,可能由于种种因素的制约,并不能达到实际的效果,还需要我们进行相应的修改才能完成要求。这次的课程设计使我巩固了以
12、前学习到的知识,还使我掌握了以前没有掌握的知识,同时锻炼了自己的能力。6 参考文献【1】江国强.新编数字逻辑电路 北京邮电大学出版社 2006年12月【2】江国强. EDA技术与应用 电子工业出版社 2010年4月【3】王金明、冷自强.EDA技术与Verilog设计科学出版社 2008年8月【4】谢自美.电子线路设计实验测试(第二版)武汉华中科技大学出版社2000【5】谭会生、张昌凡 EDA技术与应用-Verilog HDL版西安电子科技大学出版社附 录附录1:仿真波形图(部分模块)分频器模块波形仿真:红绿灯模块波形仿真: 黄灯模块波形仿真: 控制模块波形仿真:附录2:程序清单分频器模块程序设
13、计:module fpq(clk,newclk);input clk;output reg newclk;reg24:0 counter;always (posedge clk )begincounter=counter+1;if(counter=)counter=0;if(counter)newclk=b0;endendmodule红绿灯模块程序设计:module rgwork(clk,clrn,ydbj,gzfs,LED,t1,t2,q1,q2);input clk,clrn;input 7:0 q1,q2;output reg ydbj;output reg1:0 gzfs;output
14、 reg7:0 LED;output reg7:0 t1,t2;reg7:0 rtime,gtime,ytime,rtime1=h20,gtime1=h16;reg1:0 z;initial begin rtime=h20;gtime=h16;ytime=h03;ydbj=0;z=0;endalways (posedge clk or negedge clrn)begin if(clrn) ydbj=1; else begin if(q1=0|q2=0) ydbj=1; else begin ydbj=0; rtime=rtime1;gtime=gtime1; end endend alway
15、s (posedge ydbj or negedge clrn) begin if(clrn) begin t1=rtime;t2=gtime;LED=b01100110;gzfs=2;z=0; end else begin z=z+1; case (z) 0:begin t1=rtime;t2=gtime;LED=b01100110;gzfs=2;end 1:begin t1=ytime;t2=ytime;LED=b00100010;gzfs=0;end 2:begin t1=gtime;t2=rtime;LED=b;gzfs=2;end 3:begin t1=ytime;t2=ytime;
16、LED=b;gzfs=1;end default:begin t1=rtime;t2=gtime;LED=b01100110;gzfs=2;end endcase endendendmodule黄灯模块程序设计:module ywork(gzfs,clk,clrn,q1,q2,LED_h);input7:0 q1,q2;input clk,clrn;input 1:0 gzfs;output reg3:0 LED_h;always (posedge clk or negedge clrn)begin if(clrn) LED_h=b0000; else begin if(gzfs=0) beg
17、in if(q1=h03&q2=h03) LED_h=b1010; if(q1=h02&q2=h02) LED_h=b0000; if(q1=h01&q2=h01) LED_h=b1010; if(q1=h00&q2=h00) LED_h=b0000; end if(gzfs=1) begin if(q1=h03&q2=h03) LED_h=b0101; if(q1=h02&q2=h02) LED_h=b0000; if(q1=h01&q2=h01) LED_h=b0101; if(q1=h00&q2=h00) LED_h=b0000; end endend endmodule 控制模块程序设
18、计:module countor(ts,en,clk,ybj,t1,t2,q1,q2);input clk,ybj,en,ts;input7:0 t1,t2;output reg7:0 q1,q2;always (posedge clkts or posedge ybj or posedge en)begin if(en) begin q1=q1;q2=q2; end else begin if(ybj) begin q1=t1;q2=t2; end else begin if(q1=0) q1=h99; else begin q1=q1-1;end if(q13:0=ha) q13:0=9; if(q2=0) q2=h99; else begin q2=q2-1;end if(q23:0=ha) q23:0=9; end endendendmodule
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1