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