EDA交通灯信号控制器的设计.docx
《EDA交通灯信号控制器的设计.docx》由会员分享,可在线阅读,更多相关《EDA交通灯信号控制器的设计.docx(12页珍藏版)》请在冰豆网上搜索。
EDA交通灯信号控制器的设计
课程设计说明书
题目交通灯信号控制器的设计
交通灯的信号控制器的设计说明书
一、设计内容及其要求:
试设计一个交通信号等控制器,用于主干道与支道公路的交叉路口,要求是优先保证主干道的畅通。
因此,平时处于“主干道绿灯,支道红灯”状态,只有在支道有车辆要穿行主干道时,才将交通等切向“主干道红灯,支道绿灯”,一旦支道无车辆通过路口,交通灯又回到“主干道绿灯,支道红灯”的状态。
此外,主干道和支道每次通行的时间不得短于30秒,而在两个状态交换过程出现的“主黄,支红”和“主红,支黄”状态,持续时间都为4秒。
主干道和支道的红、黄、绿灯驱动信号接LED,时间都需通过数码管显示。
系统提供50MHZ频率的时钟源。
完成该系统的硬件和软件的设计,并制作出实物装置,调试好后并能实际运用(指导教师提供制作所需的器件),最后就课程设计本身提交一篇课程设计说明书。
二、设计主要内容:
2.1设计的总体方案
根据设计要求和系统所具有功能,并参考相关的文献资料设计画出如下所示的十字路口交通灯控制器系统框图,及为设计的总体方案,框图如下图2.1所示:
图2.1系统的框图
2.2交通灯思路分析
因为有主干道和支道,所以可以定义为5种状态,分别是1:
主道绿灯,支道红灯且没有车辆行驶;2:
主道绿灯,支道红灯或者支道有车辆驶入;3:
主道红灯,支道绿灯;4:
主道红灯,支道黄灯;5:
主道黄灯,支道红灯。
并设置主道红灯亮34秒,支道绿灯亮30秒,黄灯亮4秒的设计要求。
如下图:
图2.2三种灯的循环顺序
三、设计程序
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
Entityredgreenis
Port
(
clock_in:
instd_logic;
hold_state:
instd_logic;
reset_state:
instd_logic;
hold_state1:
instd_logic;
reset_state1:
instd_logic;
led_red,led_green,led_yellow,led_red1,led_green1,led_yellow1:
outstd_logic;
select_display:
outstd_logic_vector(0to6);
led_selout:
outstd_logic_vector(0to3)
);
end;
Architectureredgreen1ofredgreenis
constantloop_hz:
integer:
=20000000;
--constantloop_hz:
integer:
=2;
constantloop_hz1:
integer:
=500;
signalcount_time:
integerrange0toloop_hz;
signalcount_time1:
integerrange0toloop_hz1;
signalclock_buffer:
std_logic;
signalclock_buffer1:
std_logic;
signalclock_out:
std_logic;
signalclock_out1:
std_logic;
signalcount_num:
integerrange0to68;
signalcount_num1:
integerrange0to68;
signaldisplay_num:
integerrange0to68;
signaldisplay_num1:
integerrange0to68;
signaldisplay_shi:
integerrange0to9;
signaldisplay_ge:
integerrange0to9;
signaldisplay_shi1:
integerrange0to9;
signaldisplay_ge1:
integerrange0to9;
signalb:
integerrange0to9;
signala:
std_logic_vector(1downto0);
constantloop_time:
integer:
=68;
constantred_time:
integer:
=34;
constantgreen_time:
integer:
=30;
constantyellow_time:
integer:
=4;
begin
process(clock_in)--分频进程
begin
ifclock_in'eventandclock_in='1'then
ifcount_time=loop_hzthen
count_time<=0;
clock_buffer<=notclock_buffer;
else
count_time<=count_time+1;
endif;
endif;
clock_out<=clock_buffer;
endprocess;
process(clock_in)--分频进程
begin
ifclock_in'eventandclock_in='1'then
ifcount_time1=loop_hz1then
count_time1<=0;a<=a+1;
clock_buffer1<=notclock_buffer1;
else
count_time1<=count_time1+1;
endif;
endif;
clock_out1<=clock_buffer1;
endprocess;
process(reset_state,clock_out,count_num)
begin
ifreset_state='1'then
count_num<=0;
elsifclock_out'eventandclock_out='1'then
ifhold_state='1'then
count_num<=count_num;
elsifcount_num=loop_time-1then
count_num<=0;
else
count_num<=count_num+1;
endif;
endif;
endprocess;
process(reset_state1,clock_out,count_num1)
begin
ifreset_state='1'then
count_num1<=0;
elsifclock_out'eventandclock_out='1'then
ifhold_state1='1'then
count_num1<=count_num1;
elsifcount_num1=loop_time-1then
count_num1<=0;
else
count_num1<=count_num1+1;
endif;
endif;
endprocess;
process(clock_out,count_num,a)--交通灯显示
begin
ifclock_out'eventandclock_out='0'then
ifhold_state='1'then
led_red<='1';
led_green<='0';
led_yellow<='0';
elsifcount_num<=33then
display_num<=red_time-count_num;
led_red<='1';
led_green<='0';
led_yellow<='0';
elsifcount_num<=63then
display_num<=green_time+red_time-count_num;
led_red<='0';
led_green<='1';
led_yellow<='0';
elsifcount_num<=67then
display_num<=loop_time-count_num;
led_red<='0';
led_green<='0';
led_yellow<='1';
endif;
endif;
endprocess;
process(clock_out,count_num1)--交通灯显示
begin
ifclock_out'eventandclock_out='0'then
ifhold_state1='1'then
led_red1<='1';
led_green1<='0';
led_yellow1<='0';
elsifcount_num1<=29then
display_num1<=green_time-count_num1;
led_red1<='0';
led_green1<='1';
led_yellow1<='0';
elsifcount_num1<=33then
display_num1<=yellow_time+green_time-count_num1;
led_red1<='0';
led_green1<='0';
led_yellow1<='1';
elsifcount_num1<=67then
display_num1<=loop_time-count_num1;
led_red1<='1';
led_green1<='0';
led_yellow1<='0';
endif;
endif;
endprocess;
process(display_num)--分位进程
begin
ifdisplay_num<10then
display_shi<=0;
display_ge<=display_num;
display_shi1<=0;
display_ge1<=display_num;
elsifdisplay_num<20then
display_shi<=1;
display_shi1<=1;
display_ge<=display_num-10;
display_ge1<=display_num-10;
elsifdisplay_num<30then
display_shi<=2;
display_shi1<=2;
display_ge<=display_num-20;
display_ge1<=display_num-20;
elsifdisplay_num<40then
display_shi<=3;
display_shi1<=3;
display_ge<=display_num-30;
display_ge1<=display_num-30;
endif;
endprocess;
process(b)--数码管显示
begin
casebis
when0=>select_display<="0000001";
when1=>select_display<="1001111";
when2=>select_display<="0010010";
when3=>select_display<="0000110";
when4=>select_display<="1001100";
when5=>select_display<="0100100";
when6=>select_display<="0100000";
when7=>select_display<="0001111";
when8=>select_display<="0000000";
when9=>select_display<="0000100";
whenothers=>select_display<=null;
endcase;
endprocess;
process(a)
begin
caseais
when"00"=>led_selout<="0001";b<=display_shi;
when"01"=>led_selout<="0010";b<=display_ge;
when"10"=>led_selout<="0100";b<=display_shi1;
when"11"=>led_selout<="1000";b<=display_ge1;
whenothers=>null;
endcase;
endprocess;
end;
四.波形仿真及其编程下载
4.1仿真波形
4.2波形分析
由上述波形可知,刚开始,主道亮红灯,支道亮绿灯;当支道绿灯倒计34秒后,支道黄灯亮,主道红灯亮;而支道黄灯倒计时4秒后,支道红灯亮,主道绿灯亮;当主道绿灯倒计时30秒后,主道黄灯亮,支道红灯亮;当主道黄灯倒计时4秒后,主道红灯亮,支道绿灯亮。
各时间段每个交通灯的状态都符合,所有,仿真波形正确。
4.3编程下载
因为有主干道和支干道,所以我选择了两个重置键和保持键,而六个信号灯分别为主道的红绿黄和支道的红绿黄,锁好引脚后,两个方向上的数码管显示时间完全吻合,按两个干道上的重置键时,会恢复原状态,继续计时,当按下两个干道的保持键时,时间保持不变,结果证实调试成功。
四、引脚分配
引脚分配如表——1所示:
表——1
引脚名称
引脚编号
连接网络
引脚名称
引脚编号
连接网络
clock_in
PIN_J3
select_display[0]
PIN_L3
E_7SEG-A
hold_state
PIN_M3
FPGA_M1
select_display[1]
PIN_L4
E_7SEG-B
reset_state
PIN_M4
FPGA_M2
select_display[2]
PIN_H3
E_7SEG-C
hold_state1
PIN_N1
FPGA_M3
select_display[3]
PIN_H4
E_7SEG-D
reset_state1
PIN_N2
FPGA_M4
select_display[4]
PIN_H1
E_7SEG-E
led_green
PIN_U11
LED2
select_display[5]
PIN_L2
E_7SEG-F
led_green1
PIN_R12
LED5
select_display[6]
PIN_K4
E_7SEG-G
led_red
PIN_R10
LED1
led_selout[0]
PIN_G4
E_7SEG-A1
led_red1
PIN_R11
LED4
led_selout[1]
PIN_G3
E_7SEG-A2
led_yellow
PIN_N15
LED3
led_selout[2]
PIN_E2
E_7SEG-A3
led_yellow1
PIN_U12
LED6
led_selout[3]
PIN_F2
E_7SEG-A4
五、心得与体会
通过这次课程设计,我们可以更好的熟悉和理解QuartusⅡ集成环境下EDA技术,它是用VHDL对数字系统进行抽象的行为与功能描述到具体的内部线路结构,从而可以在电子设计的各个阶段、各个层次进行计算机模拟验证,保证设计过程的正确性,我这次做的课题是交通灯信号控制器的设计。
这次课程设计对于我是个很大的挑战,并且遇到了很多困难,这是因为在做课程设计之前,只做了一些比较简单的电路图设计,没有做过比较复杂的设计,所以有很多的语法和整体结构的设计没有掌握和理解,所以在编写程序时我大量参考了在图书馆借阅的资料,还借助了网络的帮助,我基本上掌握了VHDL语言的基本语法。
在这几天课程设计的时间里,实验室的氛围对我影响很大,大家一起努力,这也是我们完成课程设计的动力。
这次课程设计也多亏了我这一组的同学与老师的帮助,在老师的提点下,我理清了思路,交通灯原来有五种状态,沿着这条思路,把程序编出来,所以我明白了独立思考与不懂就问的重要性。
还有一点是我们做任何事情都无法缺少的,那就是细心认真,此次设计我就深深体会到了,由于编程时没有做到足够的细心,调试时总出现问题,但需要好长时间才能找出问题的所在,这也让我真正明白了科学的严谨性,它不允许出半点差错,否则后果会比较麻烦。
这次课程设计让我看到了自身的不足,不够严谨细心,并且太急躁,我会努力克服的。
这次课程设计必定成为我人生旅途上一个非常美好的回忆!
参考文献:
《EDA技术与VHDL》第3版潘松,黄继业:
华大学出版社
《EDA教程》孟庆辉,刘辉,程继航,石静苑:
防工业出版社,2008
《电子技术EDA实践教程》杨晓慧等著编:
国防工业出版社,2005
《EDA技术可编程器件的应用》包明编著:
北京航空航天大学出版社,2007