EDA课程设计.docx
- 文档编号:24710310
- 上传时间:2023-05-31
- 格式:DOCX
- 页数:28
- 大小:121.57KB
EDA课程设计.docx
《EDA课程设计.docx》由会员分享,可在线阅读,更多相关《EDA课程设计.docx(28页珍藏版)》请在冰豆网上搜索。
EDA课程设计
课程设计说明书
题目:
十字路口交通灯控制系统
系别:
计算机科学与技术
班级:
计科2
姓名:
指导老师:
同组成员:
目录
1、概述
设计任务与要求··········································3
2、系统分析
电路工作原理及设计思路··································4
3、总体和模块框图
总体框图················································6
具体模块框图············································6
4、功能模块设计
各模块原理及其程序······································9
5、程序代码设计与分析
程序代码················································12
6、运行仿真
························································19
7、心得体会
························································22
8、参考文献
························································22
1、概述
在熙熙攘攘的都市中,为了保证城市道路的畅通与行人的安全,交通灯是城市交通监管的重要组成部分。
但由于目前很多城市的交通灯实行的是定时控制,在时间和空间方面的应变性能较差,在一定程度上造成了交通资源的浪费,加重了道路交通压力。
而设计周全的交通灯考虑了车流量等因素,有较大的可变性。
在一定程度上改变了城市交通的现状,减少交通事故发生的概率。
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪60年代中期从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言VHDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
EDA技术的出现,极大地提高了电路设计的效率和可操作性,减轻了设计者的劳动强度。
设计任务与要求:
1.设计任务
设计一个十字路口交通控制器,分为手动操作、自动操作和复位系统,假设南北方向和东西方向,两个方向分别设置左拐、绿、黄和红四盏灯,每个方向设置一组倒计时显示器,用以指挥车辆和行人有序的通行。
红灯亮表示左转和直行车辆禁行;绿灯亮表示直行车辆可以通行;黄灯亮表示左转或直行车辆即将禁行;左拐灯亮表示左转车辆可以通行;倒计时显示器用来显示允许通行或禁止通行的时间。
2.设计要求
1)在十字路口南北和东西两个方向各设一组红灯、绿灯、黄灯和左拐灯。
显示顺序:
绿灯→黄灯→红灯→左拐→黄灯→红灯。
在南北和东西两个方向各设一组倒计时显示器。
2)自动控制:
设置一组数码管,以倒计时的方式显示允许通行或禁止通行的时间,南北方向为主干道,左拐、绿灯、黄灯和红灯显示时间分别是20s、20s、5s和20s。
东西方向为次干道,左拐、绿灯、黄灯和红灯显示时间分别为15s、15s、5s和25s。
3)手动控制:
按按钮依次执行以上显示状态,绿灯→黄灯→红灯→左拐→黄灯→红灯,倒计时显示为“0”。
4)系统设有总复位开关,可在任意时间内对系统进行复位。
5)通过开关按钮切换交通灯的工作状态。
2、系统分析
2.1交通灯工作流程分析
十字路口的交通灯指挥着行人和各种车辆的安全运行。
实现红绿灯的自动指挥是城市交通管理自动化的重要课题。
在一个具有主、支干道的十字路口,设计一个交通灯自动控制装置,实现如下功能:
1.由主干道和支干道汇合成十字路口,在入口处设置
红、绿、黄三色信号灯,红灯亮禁止通行,绿灯亮允许通行,黄灯亮则给行驶中的车辆有时间停在禁行线外。
2.当主干道与支干道均无车辆要求通行时,主干道应保持畅通,亮绿灯;支干道亮红灯。
3.如果主干道无车,支干道有车,则允许支干道通行,主干道亮红灯,支干道亮绿灯。
4.如果主干道和支干道均有车要求通行,则两者应交替通行,并要求主干道每次通行30秒钟,支干道每次通行20秒钟。
5.每次绿灯变红,黄灯应先亮5秒。
2.2设计思路:
1.硬件:
由设计任务要求可知,总体输入电路有:
(1)在开始计时之前的等待状态,复位键reset接低电位,接通电源后,首先要将它接高电位,表示计时开始。
(2)当按一下(on_off)键,表示紧急情况发生,两个方向均为红灯亮,计时停止,当再次按下(on_off)键时,控制器恢复原来状态,正常工作。
输出电路:
(1)由于东西和南北方向都要显示时间,因此需要4个数码管,这样在设计中就需要四条输出线choose4,用来选通指定一个LED七段显示数码管。
(2)显示器的每一位都采用LED七段显示数码管进行显示,每一个LED七段显示数码管都要有七条输出线控制,一共使用4个七段数码管,故输出电路使用四个七位输出信号:
showtime1,showtime2,showtime3,showtime4。
(3)东西和南北方向都有交通灯亮的情况,故输出电路中要有两个状态控制信号state1,state2分别控制东西和南北的灯,每个方向上有4个灯(增加了左、右转弯显示控制功能),所以state1,state2的类型应该是4位数组型的。
2.软件:
(1)在VHDL设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:
输入信号:
复位开关信号reset;紧急情况控制信号on_off;外部时钟信号clk。
输出信号:
LED七段显示数码管的选通信号choose4(3downto0);LED七段显示数码管的输出信号showtime1(6downto0),showntime2(6downto0),showtime3(6downto0),showtome4(6downto0);交通灯状态控制信号state1(3downto0),state2(3downto0)。
(2)在自顶向下的VHDL设计描述中,通常把整个设计的系统划分为几个模块,然后采用结构描述方式对整个系统进行描述。
根据实验设计的结构功能,来确定使用哪些模块以及这些模块之间的关系。
由于紧急情况控制信号是采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面安排一个消抖和同步化电路模块,以保证系统能捕捉到输入脉冲,故需要有防抖动的模块。
由于外部时钟信号clk的频率为1MHz,而实际需要的内部计时时钟频率为1Hz,提供给消抖同步电路的频率为50Hz(满足按键)和提供给产生选通信号电路的时钟频率为200Hz(满足视觉暂留效应)。
当正常计时开始后,需要进行定时计数操作,由于东西和南北两个方向上的时间显示器是由两个LED七段显示数码管组成的,因此需要产生两个2位的计时信息:
2个十位信号,2个个位信号,这个定时计数操作可以由一个定时计数器来完成,又因为交通灯的状态变化是在计时为0的情况下才能进行的,因此需要一个计时电路来产生使能信号,因此定时计数的功能就是用来产生2个2位计时信息和使能信号。
另外还需要将时间显示出来,为了节省资源,我采用了循环点亮LED七段显示数码管的方法来显示计时输出。
通过信号choose4(3downto0)来对4个LED七段显示数码管进行选择。
由于不能使用7448自动译码集成电路,故在LED七段显示数码管显示时间时,要把计时结果转换为七段码输出到相应的LED七段显示数码管上,因此还需要一个转换电路。
交通灯状态控制也需要一个电路,当有使能信号及无紧急情况下,交通灯状态不发生变化,有紧急情况时,两个方向上均为红灯亮,紧急情况消除后,回到原来状态,无使能信号时,交通灯状态不变。
通过上面的分析,不难得知可以把交通灯控制系统划分为6个模块:
键输入模块,时钟分频模块,计时模块,选通模块,显示模块,控制模块。
各个模块之间的连接关系如下:
3、总体和模块框图:
总体框图:
具体模块框图:
1.时钟分频模块
系统的动态扫描需要1HZ的脉冲,而系统时钟计时模块需要1HZ的脉冲。
分频模块主要为系统提供所需的时钟计时脉冲。
该模块将1kHZ的脉冲信号进行分频,产生1S的方波,作为系统时钟计时信号。
其实体模块如下:
将ENDTIME改为5S
CLK采用系统的1KHZ的时钟脉冲
2.交通灯控制及计时模块
控制模块根据外部输入信号和计时模块产生的输出信号,产生系统的状态机,控制其他部分协调工作。
计时模块用来设定主干道和支干道计时器的初值,并为扫描显示译码模块提供倒计时时间。
控制及计时模块采用状态机进行设计,可以定义出5种状态,分别为S0:
主干道绿灯,支干道红灯且没有车辆行驶;S1:
主干道绿灯,支干道红灯或支干道有车辆驶入;S2:
主干道黄灯,支干道红灯;S3:
主干道红灯,支干道绿灯;S4:
主干道红灯,支干道黄灯。
利用CASE语句定义状态的转换方式及时间的变换方式,达到主干道绿灯亮45秒,支干道绿灯亮25秒,黄灯亮5秒的设计要求。
其实体模块如下:
CAR为支干道车辆检测开关
在支干道有车的情况下,模块可以进行减计时
CLK1S为1S的时钟脉冲
TIME1H、TIME1L、TIME2H、TIME2L分别为主干道时钟高位、主干道时钟低位、支干道时钟高位、支干道时钟低位
LED为LED灯发光情况,分别为主干道绿灯、主干道黄灯、主干道红灯、支干道绿灯、主干道黄灯、主干道红灯
Count的总的系统时间,用来改变系统的状态
3.扫描显示译码模块
扫描显示译码模块可以根据控制信号,驱动交通信号灯以及倒计时数码管的显示,其中数码管的显示采用动态扫描显示。
其实体模块如下:
CLK为1KHZ的系统时钟脉冲
CLK1S为1S时钟脉冲
CAR为支干道车辆检测开关
SEL为数码管位码扫描
SEG为数码管段码
TIME1H、TIME1L、TIME2H、TIME2L为数码管计时的时间,由控制及计时模块为其赋值
4.顶层文件的编写
将以上各个单元模块仿真成功后,再进行顶层文件的编写。
将各个单元模块的变量赋值给顶层文件,从而将各个单元模块连接起来,统一调配。
得到顶层文件的实体模块:
CLK为1KHZ系统时钟脉冲
CAR为支干道车辆行驶情况,高电平为有车行驶,低电平为无车行驶
LED为交通灯发光情况
SEL为数码管位码扫描
SEG为数码管段码
4、功能模块设计:
各模块的原理及其程序
1.分频模块设计
a.实体:
entityclk_10is
port(clk:
instd_logic;
clk_div10:
outstd_logic);
endclk_10;
b.功能:
实现十分频
c.接口:
clk—脉冲输入
clk-div10—十分频后脉冲输出
2.计数模块设计
a.实体:
entitycounteris
port(clk0:
instd_logic;
con:
instd_logic;
reset:
instd_logic;
countnum:
bufferintegerrange0to89);
endcounter;
b.功能:
实现0到89的计数
clk0—脉冲输入
con—手动控制信号
reset—复位信号
countnum—计数输出
3.控制模块设计
a.实体:
entitycontrolleris
port(clk1:
instd_logic;
con1:
instd_logic;
con2:
instd_logic;
countnum:
inintegerrange0to89;
numa,numb:
outintegerrange0to25;
ra,ga,ya,ga1:
outstd_logic;
rb,gb,yb,gb1:
outstd_logic);
endcontroller;
b.功能:
控制发光二极管的亮、灭,以及输出倒计时数值给七段译码管的分位译码电路。
clk1—脉冲信号输入
con1—手动控制信号
con2—状态控制信号
countnum—计数输入
numa,numb—两个方向的倒计时数值输出
ra,ga,ya,ga1,rb,gb,yb,gb1—发光二极管输出
4.分位模块设计
a.实体:
entityfenweiis
port(numin:
inintegerrange0to25;
numa,numb:
outintegerrange0to9);
endfenwei;
b.功能:
把倒计时的数值分成2个1位的十进制数。
numin:
倒计时数值输入
numa,numb—将数值分为2个1位的十进制输出
5.译码模块设计
a.实体:
entitydisplayis
port(clk2:
instd_logic;
bb:
instd_logic_vector(3downto0);
ya:
outstd_logic;
yb:
outstd_logic;
yc:
outstd_logic;
yd:
outstd_logic;
ye:
outstd_logic;
yf:
outstd_logic;
yg:
outstd_logic);
enddisplay;
b.功能:
根据控制电路的控制信号,驱动交通灯的显示,通过输入二进制数值,输出信号点亮二极管。
bb[3..0]--BCD码输入
clk2—脉冲输入
ya,yb,yc,yd,ye,yf,yg—七段数码管显示输出
6.顶层模块的设计
a.实体:
entitydingcengis
port(clkd,resetd,cond,con1d:
instd_logic;
count1:
outstd_logic_vector(6downto0);
count2:
outstd_logic_vector(6downto0);
count3:
outstd_logic_vector(6downto0);
count4:
outstd_logic_vector(6downto0);
reda,greena,yellowa,greena1:
outstd_logic;
redb,greenb,yellowb,greenb1:
outstd_logic);
endentitydingceng;
b.功能:
clkd—脉冲输入
resetd—复位信号
con—手动控制信号
con1d—状态控制信号
count1,count2,count3,count4—七段数码管显示
reda,greena,yellowa,greena1,redb,greenb,yellowb,greenb1—发光二极管输出
5、程序代码设计与分析:
程序代码:
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
entitydingcengis
port(clkd,resetd,cond,con1d:
instd_logic;
count1:
outstd_logic_vector(6downto0);
count2:
outstd_logic_vector(6downto0);
count3:
outstd_logic_vector(6downto0);
count4:
outstd_logic_vector(6downto0);
reda,greena,yellowa,greena1:
outstd_logic;
redb,greenb,yellowb,greenb1:
outstd_logic);
endentitydingceng;
architectureoneofdingcengis
componentclk_10
port(clk:
instd_logic;
clk_div10:
outstd_logic);
endcomponent;
componentcounter
port
(clk0:
instd_logic;
con:
instd_logic;
reset:
instd_logic;
countnum:
bufferintegerrange0to89);
endcomponent;
componentcontroller
port
(clk1:
instd_logic;
con1:
instd_logic;
con2:
instd_logic;
countnum:
inintegerrange0to89;
numa,numb:
outintegerrange0to25;
ra,ga,ya,ga1:
outstd_logic;
rb,gb,yb,gb1:
outstd_logic);
endcomponent;
componentfenwei
port(numin:
inintegerrange0to25;
numa,numb:
outintegerrange0to9);
endcomponent;
componentyima
port(clk2:
instd_logic;
bb:
inintegerrange0to9;
ya:
outstd_logic;
yb:
outstd_logic;
yc:
outstd_logic;
yd:
outstd_logic;
ye:
outstd_logic;
yf:
outstd_logic;
yg:
outstd_logic);
endcomponent;
signala,b,c:
std_logic;
signalww:
integerrange0to89;
signalyy1,yy2:
integerrange0to25;
signaltt1,tt2,tt3,tt4:
integerrange0to9;
begin
u0:
clk_10portmap(clk=>clkd,clk_div10=>a);
u1:
clk_10portmap(clk=>clkd,clk_div10=>b);
u2:
clk_10portmap(clk=>b,clk_div10=>c);
u3:
counterport
map(clk0=>c,con=>cond,reset=>resetd,countnum=>ww);
u4:
controllerportmap
(clk1=>c,con1=>cond,con2=>con1d,countnum=>ww,numa=>yy1,numb=>yy2,ra=>reda,ga=>greena,ya=>yellowa,ga1=>greena1,rb=>redb,gb=>greenb,yb=>yellowb,gb1=>greenb1);
u5:
fenweiportmap(numin=>yy1,numa=>tt1,numb=>tt2);
u6:
fenweiportmap(numin=>yy2,numa=>tt3,numb=>tt4);
u7:
yima
portmap(clk2=>b,bb=>tt1,ya=>count1(0),yb=>count1
(1),yc=>count1
(2),yd=>count1(3),ye=>count1(4),yf=>count1(5),yg=>count1(6));
u8:
yimaportmap(clk2=>b,bb=>tt2,ya=>count2(0),yb=>count2
(1),yc=>count2
(2),yd=>count2(3),ye=>count2(4),yf=>count2(5),yg=>count2(6));
u9:
yimaportmap(clk2=>b,bb=>tt3,ya=>count3(0),yb=>count3
(1),yc=>count3
(2),yd=>count3(3),ye=>count3(4),yf=>count3(5),yg=>count3(6));
u10:
yimaportmap(clk2=>b,bb=>tt4,ya=>count4(0),yb=>count4
(1),yc=>count4
(2),yd=>count4(3),ye=>count4(4),yf=>count4(5),yg=>count4(6));
endarchitectureone;
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_arith.all;
useieee.std_logic_unsigned.all;
entityclk_10is
port(clk:
instd_logic;
clk_div10:
outstd_logic);
endclk_10;
architectureoneofclk_10is
signalclk_temp:
std_logic;
begin
process(clk)
variablecounter:
std_logic_vector(2downto0);
constantmd:
std_logic_vector(2downto0):
="101";
begin
if(clk'eventandclk='1')then
if(counter=md)then
counter:
=(others=>'0');
clk_temp<=notclk_temp;
endif;
counter:
=counter+1;
en
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 课程设计
![提示](https://static.bdocx.com/images/bang_tan.gif)