DEA课程设计交通灯.docx
《DEA课程设计交通灯.docx》由会员分享,可在线阅读,更多相关《DEA课程设计交通灯.docx(19页珍藏版)》请在冰豆网上搜索。
DEA课程设计交通灯
EDA技术课程设计
课题:
交通灯控制器
系别:
电气与电子工程系
专业:
电子信息工程
姓名:
学号:
指导教师:
河南城建学院
2012年6月20日
成绩评定·
一、指导教师评语(根据学生设计报告质量、答辩情况及其平时表现综合评定)。
二、课程设计评分
成绩:
2012年6月日
目录
一、设计目的1
二、设计要求1
三、总体设计方案要求1
1、设计的总体原理1
2、设计内容2
四、EDA设计与仿真2
1、分频模块2
2、交通灯控制及计时模块5
3、数码管译码扫描显示模块10
4、系统设计13
五、硬件实现11
1、硬件实现步骤11
2、硬件仿真结果12
六、设计总结14
七、参考文献15
八、设计生成的电路总图16
一、设计目的
1、了解交通灯的亮灭规律。
2、了解交通灯控制器的工作原理。
3、熟悉VHDL语言编程,了解实际设计中的优化方案。
二、设计要求
1、每条道路设一组信号灯,每组信号灯由红黄绿3个灯组成,绿灯表示允许通行红灯表示禁止通行,黄灯表示该车道上已过停车线的车辆继续通行,未过停车线的车辆停止通行。
2、每条道路上每次通行的时间为25s。
3、每次变换通行车道之前,要求黄灯先亮5s,才能变换通行车道。
4、黄灯亮时,要求每秒钟闪烁一次。
三、总体设计方案要求
1.设计的总体原理
段码输出
位码输出
1khz信号
50Mhz信号分频2hz信号数码显
1hz信号示模块
七段译码
数码管位选
交通灯控制六个led灯输出
图3-1.总体设计框图
①分频模块:
把实验板上的50MHZ的频率分成1HZ信号(用于倒计时计数的时钟信号)、1kHZ信号(用于数码管扫描显示的片选时钟信号)和2HZ(用于黄灯的闪烁);
②交通灯控制以及倒计时(五个状态的控制)模块;
③数码管译码扫描显示模块;
2.设计内容
交通灯控制设计共包括三个模块即分频模块交通灯控制以及倒计时(五个状态的控制)模块;数码管译码扫描显示,根据交通灯控制的原理图设计每个模块的源程序生成原理图根据原理图连接硬件。
四、EDA设计及仿真(各个模块设计程序、原理框图及仿真波形图)
1.分频模块
libraryieee;--对开发板上的50MHZ信号进行分频得到1khz位选信号--2hz黄灯闪烁信号和1hz计时信号
useieee.std_logic_1164.all;
entitydiv_freqis
port(freq_in:
instd_logic;
flag_1khz,flag_2hz,flag_1hz:
bufferstd_logic);
endentity;
architectureoneofdiv_freqis
signalcomplete_1khz:
integerrange0to50000;
signalcomplete_2hz:
integerrange0to499;
signalcomplete_1hz:
integerrange0to1000;
begin
process(freq_in)--此进程得到的是1khz的位选信号
begin
if(freq_in'eventandfreq_in='1')then
complete_1khz<=complete_1khz+1;
if(complete_1khz=50000)then
complete_1khz<=0;
elsif(complete_1khz<25000)then
flag_1khz<='0';
else
flag_1khz<='1';
endif;
endif;
endprocess;
process(flag_1khz)--此进程是得到2hz信号
begin
if(flag_1khz'eventandflag_1khz='1')then
complete_2hz<=complete_2hz+1;
if(complete_2hz=500)then
complete_2hz<=0;
flag_2hz<='0';
else
flag_2hz<='1';
endif;
endif;
endprocess;
process(flag_1khz)--此进程是得到1hz信号
begin
if(flag_1khz'eventandflag_1khz='1')then
complete_1hz<=complete_1hz+1;
if(complete_1hz=1000)then
complete_1hz<=0;
flag_1hz<='0';
else
flag_1hz<='1';
endif;
endif;
endprocess;
endarchitectureone;
图4-1分频器模块原理框图
图4-2分频器的时序仿真波形图
2.交通灯控制及计时模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitystate5is
port(clk1hz,clk2hz:
instd_logic;--1hz倒计时时钟信号
one1,ten1,one2,ten2:
outintegerrange0to10;--倒计时数
ra,ga,ya,rb,gb,yb:
outstd_logic);--主支干道红黄绿灯
end;
architecturetwoofstate5is
typestatesis(st0,st1,st2,st3,st4);--定义五个状态
signalr1,g1,y1,r2,g2,y2:
std_logic;
signala,y11,y22:
std_logic;
begin
process(clk1hz)-------5states
variablest:
states;
variableeoc:
std_logic;--倒计时结束标志位
variableh1,l1,h2,l2:
integerrange0to10;
begin
ifclk1hz'eventandclk1hz='1'then
casestis
whenst0=>
st:
=st1;
h1:
=4;l1:
=4;
h2:
=4;l2:
=9;
whenst1=>-----主干道绿灯亮45秒
ifeoc='0'then
h1:
=4;l1:
=4;
h2:
=4;l2:
=9;
eoc:
='1';
g1<='1';r1<='0';y1<='0';g2<='0';r2<='1';y2<='0';
else
ifh1=0andl1=1then
st:
=st2;eoc:
='0';h1:
=0;l1:
=0;h2:
=0;l2:
=5;
elsifl1=0then
l1:
=9;h1:
=h1-1;l2:
=l2-1;
elsifl2=0then
l2:
=9;h2:
=h2-1;l1:
=l1-1;
elsel1:
=l1-1;l2:
=l2-1;
endif;
endif;
whenst2=>-----主干道黄灯亮5秒
ifeoc='0'then
h1:
=0;l1:
=4;
h2:
=0;l2:
=4;
eoc:
='1';----------------------------------------------
g1<='0';r1<='0';y1<='1';g2<='0';r2<='1';y2<='0';------------------------------
else
ifl1=1then
st:
=st3;eoc:
='0';h1:
=0;l1:
=0;h2:
=0;l2:
=0;
elsel1:
=l1-1;l2:
=l2-1;
endif;
endif;
whenst3=>-----支干道绿灯亮25秒
ifeoc='0'then
h1:
=2;l1:
=9;
h2:
=2;l2:
=4;
eoc:
='1';
g1<='0';r1<='1';y1<='0';g2<='1';r2<='0';y2<='0';
else
ifh2=0andl2=1then
st:
=st4;eoc:
='0';h2:
=0;l2:
=0;h1:
=0;l1:
=5;
elsifl2=0then
l2:
=9;h2:
=h2-1;l1:
=l1-1;
elsifl1=0then
l1:
=9;h1:
=h1-1;l2:
=l2-1;
elsel2:
=l2-1;l1:
=l1-1;
endif;
endif;
whenst4=>------支干道黄灯亮5秒
ifeoc='0'then
h1:
=0;l1:
=4;
h2:
=0;l2:
=4;
eoc:
='1';
g1<='0';r1<='1';y1<='0';g2<='0';r2<='0';y2<='1';
else
ifl2=1then
st:
=st1;eoc:
='0';h1:
=0;l1:
=0;h2:
=0;l2:
=0;
elsel1:
=l1-1;l2:
=l2-1;
endif;
endif;
endcase;
endif;
ra<=r1;ga<=g1;ya<=y11;rb<=r2;gb<=g2;yb<=y22;--------------------
one1<=l1;ten1<=h1;one2<=l2;ten2<=h2;
endprocess;
process(clk2hz)
begin
ifclk2hz'eventandclk2hz='1'then
a<=nota;
if(y1='1')theny11<=a;elsey11<='0';endif;
if(y2='1')theny22<=a;elsey22<='0';endif;
endif;
endprocess;
end;
图4-3交通灯控制及计时模块原理框图
图4-4波形仿真图
3.数码管译码扫描显示模块
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydisplayis
port(clk_1khz:
instd_logic;--扫描时钟信号
one1,ten1,one2,ten2:
inintegerrange0to10;
scan:
outstd_logic_vector(3downto0);--片选输出信号
seg_7:
outstd_logic_vector(7downto0));--七段译码输出
endentitydisplay;
architecturethreeofdisplayis
signaldata:
integerrange0to10;
signalseg77:
std_logic_vector(7downto0);
signalcnt:
std_logic_vector(1downto0);
begin
process(data)-------七段译码
begin
casedatais
when0=>seg77<="00000011";
when1=>seg77<="10011111";
when2=>seg77<="00100101";
when3=>seg77<="00001101";
when4=>seg77<="10011001";
when5=>seg77<="01001001";
when6=>seg77<="01000001";
when7=>seg77<="00011111";
when8=>seg77<="00000001";
when9=>seg77<="00001001";
when10=>seg77<="11111111";
whenothers=>null;
endcase;
endprocess;
seg_7<=seg77;
process(clk_1khz,one1,ten1,one2,ten2)----------数码管动态扫描计数
begin
ifclk_1khz'eventandclk_1khz='1'then--00到11循环计数器
ifcnt="11"thencnt<="00";
elsecnt<=cnt+1;
endif;
endif;
endprocess;
process(cnt,one1,ten1,one2,ten2)----数码管动态扫描显示
begin
casecntis
when"00"=>data<=one1;scan<="0111";
when"01"=>data<=ten1;scan<="1011";
when"10"=>data<=one2;scan<="1101";
when"11"=>data<=ten2;scan<="1110";
whenothers=>null;
endcase;
endprocess;
endthree;
图4-5数码管译码扫描模块原理框图
4.系统设计
将上述3个程序作为底层文件,存放在同一个文件夹中,然后按下面的图将这几个文件连接起来,并生成顶层文件。
如下:
总图
图4-6总体原理框图
五、硬件实现
1、硬件实现步骤
实验步骤:
⑴打开QuartusⅡ9.0软件,建立工程,工程的名字和主程序的名字相同;
⑵打开新建选择VHDLFile,然后把程序输入进去;
⑶保存文件点击软件页面上方的编译按键进行编译;
⑷编译成功后,进行软件仿真,点击File选择VectorWaveformFile,然后点击鼠标右键选insetnodeorbus键,把脚码输入进去,再进行脚码设定;
⑸然后保存,点击Assigment中的settings选择时序仿真,进行程序的时序仿真;
⑹时序仿真成功后,点击上方AssigmentEditor键进行脚码锁定;脚码锁定中我们用了模式五。
图5-1脚码锁定图
2.硬件仿真结果
在这次设计中刚开始由于种种原因我们的硬件仿真结果没能够正常的显示出来,经多次的努力我们修改了程序后,最终仿真结果显示是正确的。
下面我照了一些我们仿真的硬件结果,如下图所示:
gayaragbybrb
图5-1硬件仿真结果图示一
gayaragbybrb
图5-2硬件仿真结果图示二
gayaragbybrb
图5-3硬件仿真结果图示三
gayaragbybrb
图5-4硬件仿真结果图示四
六、设计总结
在这次设计过程中,我们在设计中遇到了很多问题,但是在老师的指导下对VHDL这门课程加深了认识,其中在程序设计方面的问题在我们查阅资料后得到了解决,在程序软件的实现过程中所遇到的问题最后也得到了圆满的解答,但是在程序最后的硬件仿真过程中遇到的问题还是没能够得到解决,这也是这次课程设计中的遗憾之处。
交通灯的设计并不困难,这次设计给我最大的收获就是做什么事都不要急,要一步一步的做好前提工作,我开始看到这个课题的时候就动手去写程序,只是凭着自己脑子里想一点就写一点,但是经过几次反复的修改还是没有成功,看不到效果,所以后来干脆就放下来先把每一步每一个模块都弄清楚再动手去写,可以在本子上把各个模块的端口以及连接都画好,再去写,这样能做到事半工倍的效果,而且在设计的时候不懂得地方可以参考别人写的程序,毕竟,不管做什么课程设计都是为了让自己弄懂、学好,只要将别人的程序设计转为自己的知识就ok了,在次基础上加上自己的一些想法,学会变通,或许还有些知识没学好,比如状态机这部分,但是通过别人的程序能让自己学到更多的知识,而且能巩固知识,所以我觉得要想把程序写好平常一定要多写多练多参考,这就是我这次设计的收获。
但是结果不理想,这次设计的硬件仿真结果不理想。
这次课程设计我得到了一点感想,在生活中我们自己的力量是极其薄弱的,无论我们做什么事情都要懂得团结,时常只有我们大家团结一致才能攻克难关。
七、参考文献
⑴XX文库.基于VHDL的交通灯的实现;
⑵杭州康芯电子有限公司.EDA技术实验讲义;
⑶VHDL电路设计实用教程刘洪喜陆颖编著.清华大学出版社;
八、设计生成的电路图
附表:
电路总图