EDA课程设计报告.docx
《EDA课程设计报告.docx》由会员分享,可在线阅读,更多相关《EDA课程设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
![EDA课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-11/28/ffd54a02-b31f-4340-acb3-bbc04de0cdbe/ffd54a02-b31f-4340-acb3-bbc04de0cdbe1.gif)
EDA课程设计报告
东莞理工学院城市学院
《EDA技术基础与实验教程》课程设计报告
题目:
交通灯控制器的设计
班级:
08电子信息工程
学生姓名:
学号:
200840703
指导老师:
日期:
2011-06-03至2011-06-10
交通灯控制器的设计
摘要:
本设计是基于EDA技术的交通灯控制器的设计。
该设计通过用数字信号自动控制十字路口交通灯状态转换的方法,指挥各种车辆和行人安全通行,实现十字路口交通管理的自动化。
在本次课程设计里,用VHDL语言为基础来实现设计交通控制信号灯,在QuartusII软件完成其仿真,实现主干和枝干道上的红绿灯转换。
关键词:
交通信号灯,VHDL,仿真
目录
一、绪论…………………………………………………………………1
1.1设计背景…………………………………………………………………………1
1.2设计目标…………………………………………………………………………1
二、总体方案设计………………………………………………………2
2.1方案比较…………………………………………………………………………2
2.2方案论证…………………………………………………………………………7
2.3方案选择…………………………………………………………………………7
三、单元模块设计………………………………………………………8
3.1时钟脉冲发生电路………………………………………………………………8
3.2计时/倒计时设计电路…………………………………………………………9
3.3红绿灯信号控制电路…………………………………………………………13
3.4建立程序包及模块……………………………………………………………15
四、系统调试…………………………………………………………17
4.1硬件实验方案…………………………………………………………………17
4.2调试过程及结果………………………………………………………………18
五、结论………………………………………………………………19
六、总结与体会………………………………………………………20
七、参考文献…………………………………………………………21
绪论
不同的城市有不同城市的问题,但共性就是混合交通流问题。
在交叉口如何解决混合交通流中的相互影响或彼此的相互影响,就是解决问题的关键!
随着我国城市化建设的发展,越来越多的新兴城市的出现,使得城市的交通成为了一个主要的问题。
同时随着我国经济的稳步发展,人民的生活水平日渐提高,越来越多的汽车进入寻常老百姓的家庭,再加上政府大力发展的公交、出租车,车辆越来越多了。
这不仅要求道路要越来越宽阔,而且要求有新的交通管理模式的出台。
旧有的交通控制系统的弊病和人们越来越高的要求激化了矛盾,使原来不太突出的交通问题被提上了日程。
现在有关部门愈来愈多的注重在交通管理中引进自动化、智能化技术,比如“电子警察”、自适应交通信号灯以及耗资巨大的交通指挥控制系统等。
随着经济的发展和社会的进步,道路交通已愈来愈成为社会活动的重要组成部分。
对交通的管控能力,也就从一个侧面体现了这个国家对整个社会的管理控制能力,因此各国都很重视用各种高科技手段来强化对交通的管控能力。
1.1设计背景
随着城市机动车量的不断增加,许多大城市如北京、上海、南京等出现了交通超负荷运行的情况,因此,自80年代后期,这些城市纷纷修建城市高速道路,在高速道路建设完成的初期,它们也曾有效地改善了交通状况。
然而,随着交通量的快速增长和缺乏对高速道路的系统研究和控制,高速道路没有充分发挥出预期的作用。
而城市高速道路在构造上的特点,也决定了城市高速道路的交通状况必然受高速道路与普通道路耦合处交通状况的制约。
因此,开发一套能够社会服务的交通灯控制器将是非常必要的,也是十分及时的。
1.2设计目标
通过采用VHDL语言对交通灯控制器的设计,使交通灯控制电路用数字信号自动控制十字路口两组红、黄、绿交通灯的状态转换的方法,指挥各种车辆和行人安全通行,实现十字路口交通管理的自动化。
绿灯亮时,准许车辆通行,但转弯的车辆不得妨碍被放行的直行车辆、行人通行,黄灯亮时,已越过停止线的车辆可以继续通行,红灯亮时,禁止车辆通行
总体方案设计
通过查阅大量相关技术资料,并结合自己的实际知识,主要提出了三种技术方案来实现系统功能。
下面我将首先对这三种方案的组成框图和实现原理分别进行说明,并分析比较它们的特点,然后阐述最终选择方案的原因。
2.1方案比较
城市路口交通信号控制系统大体上分为三种类型:
传统数字逻辑电路、可编程序控制器和单片机等方案来实现。
具体采用哪种类型,应根据其应用场合及特点加以确定。
方案一
用传统的数字电路设计并制作,方案一原理框图如图2-1所示。
图2-1传统数字逻辑电路系统框图
系统主要由控制器、定时器、秒脉冲信号发生器、译码器、信号灯组成。
其中控制器是核心部分,由它控制定时器和译码器的工作,秒脉冲信号发生器产生定时器和控制器所需的标准时钟信号,译码器输出两条信号灯的控制信号。
方案二
由软件设置交通灯的初始时间,南北方向和东西方向通行时间,数码管的段码用不同的口线,东西方向的是用的P0口,南北的使用P3口,用单片机来控制各种信号灯的燃亮时间,通过单片机的P2口控制。
由软件设置交通灯的初始时间,南北方向和东西方向各25秒,数码管的段码用不同的口线,东西方向的是用的P0口,南北的使用P3口,用单片机来控制各种信号灯的燃亮时间,通过单片机的P2口控制。
图2-2用单片几实现控制的系统框图
方案三
交通灯的电路由下载电路及外围电路组成,所用到的器件有EMP7064SLC44芯片、钟振、发光二极管、电阻和导线。
EDA流程图如图2-3所示:
图2-3用EDA技术实现交通灯控制器
该方案采用VHDL硬件描述语言实现交通灯的控制电路设计。
设计思路为根据交通控制器要实现的功能,考虑用两个并行执行的awlays模块来分别控制A和B两个方向的四盏灯,这两个always模块使用同一个时钟信号,以进行同步。
也就是说,两个always模块的敏感信号是同一个,每个always模块控制一个方向的四种灯按如下顺序点亮,并往复循环:
绿灯—黄灯—左拐灯—黄灯—红灯。
每种灯亮的时间采用一个减法计数器进行计数,计数器用同步预置法设计,这样只需改变预置数据,就能改变计数器的模,因此每个方向只要一个计数器进行计时即可。
为便于显示灯亮的时间,计数器的输出均采用BCD码,显示由4个数码管来完成,A方向和B方向各用两个数码管。
2.2方案论证
实现路口交通灯系统的控制方法很多,如上述方法,可以用传统数字逻辑电路、可编程序控制器和单片机等方案来实现。
方案一中,用传统数字逻辑电路实现,
、
为定时器的输出信号,
为控制器的输出信号。
当某车道绿灯亮时,允许车辆通行,同时定时器开始计时,当计时到45S时,则
输出为1,否则,
=0;当某车道黄灯亮后,定时器开始计时,当计时到5S时,
输出为1,否则
=0。
为状态转换信号,当定时器计数到规定的时间后,由控制器发出状态转换信号,定时器开始下一个工作状态的定时计数。
方案二中,若用单片机方案来实现的话,模型可以由电源电路、单片机主控电路、无线收发控制电路和显示电路四部分组成。
在电源电路中,需要用到+5V的直流稳压电源,无线收发控制电路和显示电路应由编码芯片和数据发射模块两部分组成,主控电路的主要元件为AT89C51。
硬件设计完成后还要利用计算机软件经行软件部分的设计才能够实现相应的功能。
方案三中,与传统的电子设计方法相比,EDA技术对于复杂电路的设计和调试都比较简单,如果某一过程存在错误,查找和修改起来比较方便,而且EDA技术的可移植性很强。
2.3方案选择
通过这三个方案的对比,传统数字逻辑电路电路复杂,所用期间繁琐。
利用单片机系统设计的交通灯控制器相对来说较稳定,能够完成较多功能的实现,但这些控制方法的功能修改及调试都需要硬件电路的支持,在一定程度上增加了功能修改及系统设计与调试的困难。
相反,使用基于EDA的设计方法具有周期短,设计灵活,易于修改等明显的的优点。
而且,随着可编程逻辑器件、设计语言和电子设计自动化工具的发展和改进,越来越多的电子系统采用可编程逻辑器件来设计。
未来,使用可编程逻辑器件设计的产品将出现在各个领域里。
因此,此次的交通信号灯控制器的设计将采用基于EDA的设计方案来实现所要求的功能。
单元模块设计
本章主要介绍系统各单元模块的具体功能,主要包括:
时钟发生电路;计数秒数选择电路;倒计时控制电路;红绿灯信号控制电路。
系统大体的工作程序是:
首先由时钟发生电路产生稳定的时钟信号,为下面三个子电路提供同步工作信号。
接收到时钟信号的红绿灯信号控制电路开始工作,并将产生的重新计数的输出使能控制信号发送给计数秒数选择电路和倒计时控制电路,同时还会将目前电路产生的状态信号发送给前者。
接收到重新计数的信号后计数秒数选择电路就会负责产生计数器所需要的计数值,并将这一数值发送给倒计时控制电路,由它利用发光二极管显示倒计时的状态。
当计数器计时完毕,倒计时控制器就会负责产生一个脉冲信号发送给红绿灯信号控制电路进入下一个状态,之后循环这一过程。
3.1时钟脉冲发生电路
在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通的。
因此,为了避免意外事件的发生,电路必须给出一个稳定的时钟(clock)才能让系统正常的工作。
因此,hld1时钟发生电路最主要的功能就是产生一些稳定的输出信号,并将其用做后面几个电路的使能控制与同步信号。
图4-1时钟发生电路图
图4-1时钟发生电路图中:
reset:
系统内部自复位信号。
系统输出信号:
ena_scan:
将外部的时钟信号进行分频处理;
ena_1hz:
产生每秒一个的脉冲信号;
flash_1hz:
产生每秒一个脉冲的时钟信号。
经仿真后得到的时序图如图4-2和4-3所示。
图4-2将clk经分频处理后得到的ena_scan信号
图4-3时钟发生电路时序图
从图4-2中可以看出,当外部信号发生器提供了1kHZ的时钟信号后,系统输出信号ena_scan就将时钟信号进行了4分频。
从图4-3又可以看出,当加入1kHZ的时钟信号后,ena_1hz产生了周期为一秒的脉冲信号,给予图4-8红绿灯信号控制电路。
flash_1hz产生了周期为一秒的脉冲时钟信号,图4-8红绿灯信号控制电路。
在这段程序的设计过程中最大的特点就是引用了参数化的概念,即使用了常数(constant)。
常数的定义和设置主要是为了使程序更容易阅读和修改,只要改变了常量的数值,使用到该常数的地方都会随着更新而使用新的常数值。
这就使设计的灵活性增强了。
例如程序中用到的:
constantscan_bit:
positive:
=2;signalclk_scan_ff:
std_logic_vector(scan_bit-1downto0);第一句就是将scan_bit设为常数‘2’,这个数值是可以根据设计的需要任意设定的。
第二句是定义一个信号,它的位数就是(scan_bit-1),因为之前scan_bit设定的值为2,所以信号的位数就是2位。
如果想增减信号的位数,只需要改动常数的赋值就可以了。
3.2计时/倒计数电路
3.2.1计数秒数选择电路
当通过交通路口时,如果能在一个方向增添一个倒计时显示器对车辆、行人加以提示,可能会有更好的效果。
因此,hld2计数秒数选择电路(见图4-4)最主要的功能就是负责输出显示器需要的数值(即倒数的秒数值),作为倒计时显示器电路的计数秒数。
图4-4计数秒数选择电路
系统输入信号:
clk:
由外部信号发生器提供1kHZ的时钟信号;
reset:
系统内部自复位信号;
ena_scan:
接收由时钟发生电路提供的250Hz的时钟脉冲信号;
recount:
接收由交通灯信号控制电路产生的重新计数的使能控制信号;sign_state:
接收由交通灯信号控制电路产生的状态信号。
系统输出信号:
load:
负责产生计数器所需要的计数数值。
经仿真后的时序图(见图4-5):
图4-5计数秒数选择电路时序图
由计数描述选择电路的时序图(见图7)可以看出这段程序中定义了在正常车流量情况下,东西及南北方向红灯、黄灯和绿灯需要维持的秒数分别是15s、5s和25s。
当外部信号发生器提供了1kHZ的时钟信号,并且重新计数信号(recount)为“1”时,load信号就会按照预先设置的数值逐1递减,直至减到零为止,当下一个重新计数信号(recount)再次为“1”时,会重复此过程。
在这段程序的设计中用到了conv_std_logic_vector(value,n)语句,它的用法就是将已经定义的数值(value)转换成n位(bit)的表示方法。
例如程序中:
when"000"=>load<=conv_std_logic_vector(greenew_time,8);就是将十进制的25转换成十六进制的19,这就使设计减少了很多不必要的麻烦。
3.2.2倒计时控制电路
通过日常生活中的观察,我发现在一些交通路口已经开始使用倒计时显示器,它们的作用就是用来提示车辆行人目前还有多长时间信号灯会发生变化,这样车辆行人就可以提前判断是否有足够的时间通过路口,进而就可以避免很多意外事故的发生。
例如:
南北方向绿灯,车辆处于正常行驶中,东西方向红灯,车辆处于等待中,若南北方向行驶的车辆看到倒计时显示器上可以通行的时间很短,可能就会放慢速度等待下一次通行,这样在东西方向绿灯时,车辆就能够正常行驶,不会为等待南北方向强行的车辆而耽误更多的时间。
如此循环下去,道路就会畅通无阻了。
考虑到有些路口的交通拥堵现象较为严重,车辆会在道路上排成很长的一队,这样排在较远距离的司机就很难看清楚倒计时显示器上变化的数字,有可能会影响到车辆之间的正常行驶。
因此,如果采用发光二极管作为倒计时的显示装置就会使司机和行人一目了然,同样也能够起到很好的提示作用。
所以,hld3倒计时控制电路(见图4-6)最主要的功能就是负责接收hld2电路输出的值,然后将其转换成BCD码,并利用发光二极管显示出来,让车辆行人能够清楚地知道再过多久信号灯就会发生变化。
图4-6倒计时控制电路
系统输入信号:
clk:
由外部信号发生器提供1kHz的时钟信号;
reset:
系统内部自复位信号;
ena_1hz:
接收由时钟发生电路提供的1Hz的脉冲信号;
recount:
重新计数的使能控制信号;
load:
负责接收计数器所需要的计数数值。
系统输出信号:
led:
负责将计数数值转换成BCD码,并利用发光二极管显示倒计时状态;
next_state:
当计数器计时完毕后,负责产生一个脉冲信号,作为下一个状态的触发信号。
经仿真后得到的时序图(见图4-7):
图4-7倒计时控制电路时序图
由倒计时控制电路的时序图(见图4-7)可以看出,当clk时钟信号来临后,在ena_1hz脉冲信号的同时激励下,led会按照预先设置好的时间开始逐1递减,进行倒计时显示。
process(clk,reset)
begin
if(reset='1')then
cnt_ff<="00000000";
led<="0000000000000000000000000";--当reset=1,则将cnt_ff与led清零。
elsif(clk'eventandclk='1')then
ifena_1hz='1'then
if(recount='1')then
cnt_ff<=load-1;--当reset=0,clk为上升沿触发,且ena_1hz与recount为1时,load将减1的数值赋给cnt_ff。
elsecnt_ff<=cnt_ff-1;--当reset=0,clk为上升沿触发,且ena_1hz为1时,recount为0时,cnt_ff减1。
endif;
endif;
caseconv_integer(cnt_ff)is
when0=>led(24downto0)<="1000000000000000000000000";
when1=>led(24downto0)<="1100000000000000000000000";
when2=>led(24downto0)<="1110000000000000000000000";
when3=>led(24downto0)<="1111000000000000000000000";
……
when23=>led(24downto0)<="1111111111111111111111110";
when24=>led(24downto0)<="1111111111111111111111111";
whenothers=>led(24downto0)<="0000000000000000000000000";
endcase;
这段程序是采用的就是查表的方法并且利用发光二极管进行倒计时显示,如图9所示:
当绿灯点亮开始计数后,load就会将减1后的值赋给cnt_ff,之后cnt_ff又会从case语句中查找到相对应的值再赋给led显示所剩余的时间。
在程序编写过程中运用到了conv_integer()语句,它可以将cnt_ff所赋的值转换成整数。
由图可知led是25位的系统输出信号,负责控制发光二极管的输出,所以25位的输出信号可以分成七组控制发光二极管的显示,其中“1”为点亮,“0”为熄灭。
3.3红绿灯信号控制电路
在红绿灯交通信号系统中,大多数的情况是通过自动控制的方式指挥交通。
但为了配合高峰时段,防止交通拥挤,有时还必须使用手动控制,即让交通警察自行指挥交通。
因此,hld4红绿灯信号控制电路(见图4-8)除了负责监控路口红绿灯之外,最主要的功能就是能够利用开关来切换手动与自动的模式,让交通警察能够通过外部输入的方式来控制红绿灯交通信号系统的运做。
图4-8红绿灯信号控制电路
系统输入信号:
clk:
由外部信号发生器提供1kHZ的时钟信号;
reset:
系统内部自复位信号;
ena_scan:
接收由时钟发生电路提供的250Hz的时钟脉冲信号;
ena_1hz:
接收由时钟发生电路提供的1Hz的脉冲信号;
flash_1hz:
接收由时钟发生电路提供的1Hz的脉冲时钟信号;
a_m:
手动、自动切换按钮(1:
自动、0:
手动);
st_butt:
红绿灯状态切换按钮(在手动操作下,每按一次按钮就变换一个状态);next_state:
接收由倒计时控制电路提供的下一个状态的触发信号。
系统输出信号:
recount:
产生重新计数的输出使能控制信号;
sign_state:
产生输出状态信号;
red:
负责红色信号灯的显示;
green:
负责绿色信号灯的显示;
yellow:
负责黄色信号灯的显示。
经仿真后得到的时序图(见图4-9).
图4-9红绿灯信号控制电路时序图
从图上可以看到:
当a_m=1,处于自动状态时,在next_state的触发下,
Red,Green,Yellow为01,10,00时,对应state.rewgsn=1,表明东西方向红灯亮(red=01),南北方向绿灯亮(green=10)
Red,Green,Yellow为01,00,10时,对应state.rewysn=1,表明东西方向红灯亮(red=01),南北方向黄灯亮(yellow=10)
Red,Green,Yellow为10,01,00时,对应state.gewrsn=1,表明东西方向绿灯亮(Green=01),南北方向红灯亮(red=10)
当st_butt=1时,由自动状态切换到手动状态(a_m=0),
因为reset=1,Red,Green,Yellow由10,01,00变为01,10,00(即东西方向红灯亮,南北方向绿灯亮,初始状态)
3.4建立程序包及连接模块
3.4.1建立程序包
在程序设计语言中,程序的开始总会调用库(library)来提供设计程序时所需要的基本命令。
但是,如果要进一步设计较为复杂的程序时,库中的命令可能就无法支持了。
因此,可以设计一个子程序来满足程序设计的需求。
上述问题在硬件描述语言的设计中也存在,在VHDL程序中的第一行(libraryieee;)就是要使用IEEE设计好的库文件,但如果需要使用的元器件并不在库中时,就只能自己定义了。
一个程序包中至少应该包含以下结构中的一种:
⑴常数说明:
如定义系统数据总线通道的宽度。
⑵VHDL数据类型说明:
主要用于在整个设计中通用的数据类型。
⑶元件定义:
元件定义主要规定在VHDL设计中参与文件例化的文件接口界面。
⑷子程序:
并入程序包的子程序有利于在设计中任一处进行方便地调用。
3.4.2连接各个模块
light电路的工作就是将所有的子电路全部连接起来,进行时序分析,当程序完成后,再下载到FPGA,以便硬件电路的验证工作。
图4-10子模块连接后电路
经仿真后得到的时序图(见图4-11):
图4-11连接各个模块后的时序图
开始时,支干道没有车辆行驶。
主干道处于常通行状态,支干道处于禁止状态;当支干道有车来时,主干道亮绿灯,经行45秒倒计时,支干道亮红灯,经行50秒倒计时;
主干道45秒倒计时结束后跳变到黄灯,进行5秒倒计时,支干道继续亮红灯,进行倒计时;
主干道5秒倒计时结束后跳变到红灯,经行30秒倒计时,支干道跳变到绿灯,进行25秒倒计时;
支干道25秒倒计时结束后跳变到黄灯,进行5秒倒计时,主干道继续亮红灯,进行倒计时;
支干道5秒倒计时结束后,判断支干道是否有车,若有车跳变到S1状态,没有车跳变到S0状态。
系统调试
将程序进行编译后,就可以把管脚绑定后把程序下载到实验板上进行调试了。
图5-1实验开发板
4.1硬件实验方案
管脚绑定如表5-1所示:
表5-1管脚绑定表
序号
TO
Location
I/OBank
1
CLK
PIN_152
3
2
CAR
PIN_160
3
3
SEG[0]
PIN_175
3
4
SEG[1]
PIN_176
3
5
SEG[2]
PIN_177
3
6
SEG[3]
PIN_178
3
7
SEG[4]
PIN_179
3
8
SEG[5]
PIN_180
3
9
SEG[6]
PIN_1
1
10
SEL[0]
PIN_3
1
11
SEL[1]
PIN_4
1
12
SEL[2]
PIN_5
1
13
LED[0]
PIN_170
3
14
LED[1]
PIN_173
3
15
LED[2]
PIN_174
3
16
LED[3]
PIN_165
3
17
LED[4]
PIN_166
3
18
LED[5]
PIN_167
3
备注:
CLK绑定时钟1KHZ;CAR绑定DK4
LED[0]绑定LED6;--支干道红灯
LED[1]绑定LED7;--支干道黄灯
LED[2]绑定LED8;--支干道绿灯
LED[3]绑定LED1;--主干道红灯
LED[4]绑定LED2;--主干道黄灯
LED[5]绑定LED3;--主干道绿灯
SEL[0]绑定LI0;SEL[1]绑定LI1;SEL[2]绑定LI2。