EDA交通灯课程设计.docx

上传人:b****8 文档编号:12865798 上传时间:2023-06-08 格式:DOCX 页数:23 大小:398.81KB
下载 相关 举报
EDA交通灯课程设计.docx_第1页
第1页 / 共23页
EDA交通灯课程设计.docx_第2页
第2页 / 共23页
EDA交通灯课程设计.docx_第3页
第3页 / 共23页
EDA交通灯课程设计.docx_第4页
第4页 / 共23页
EDA交通灯课程设计.docx_第5页
第5页 / 共23页
EDA交通灯课程设计.docx_第6页
第6页 / 共23页
EDA交通灯课程设计.docx_第7页
第7页 / 共23页
EDA交通灯课程设计.docx_第8页
第8页 / 共23页
EDA交通灯课程设计.docx_第9页
第9页 / 共23页
EDA交通灯课程设计.docx_第10页
第10页 / 共23页
EDA交通灯课程设计.docx_第11页
第11页 / 共23页
EDA交通灯课程设计.docx_第12页
第12页 / 共23页
EDA交通灯课程设计.docx_第13页
第13页 / 共23页
EDA交通灯课程设计.docx_第14页
第14页 / 共23页
EDA交通灯课程设计.docx_第15页
第15页 / 共23页
EDA交通灯课程设计.docx_第16页
第16页 / 共23页
EDA交通灯课程设计.docx_第17页
第17页 / 共23页
EDA交通灯课程设计.docx_第18页
第18页 / 共23页
EDA交通灯课程设计.docx_第19页
第19页 / 共23页
EDA交通灯课程设计.docx_第20页
第20页 / 共23页
亲,该文档总共23页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

EDA交通灯课程设计.docx

《EDA交通灯课程设计.docx》由会员分享,可在线阅读,更多相关《EDA交通灯课程设计.docx(23页珍藏版)》请在冰点文库上搜索。

EDA交通灯课程设计.docx

EDA交通灯课程设计

 

EDA技术实用教程

课题名称:

EDA课程设计

学院:

大数据与信息工程学院

专业:

通信工程

年级:

通信121

任课教师:

2015年5月27日

 

前言

伴随着社会的发展以及人类生活水平的提高,汽车的数量在D的DEA技术的发展和应用领域的扩大与深入,EDA技术在电子信息,通信,自动,控制及计算机应用等领域的重要性日益突出。

随着技术市场与人才市场对DEA的不断的增加,交通的问题日益突出,单单依靠人力来指挥交通已经不可行了,所以,设计交通灯来完成这个需求就显的越加迫切了.为了确保十字路口的行人和车辆顺利、畅通地通过,往往采用电子控制的交通信号来进行指挥。

以下就是运用数字电子设计出的交通灯:

其中红灯亮,表示该条路禁止通行;黄灯亮表示停车;绿灯亮表示允许通行。

交通管理器工作流程图:

1、设计任务

设计一个十字路口的交通灯控制系统,用实验平台上的LED发光二极管显示车辆通过的方向(甲车道和乙车道各一组),用数码管显示该方向的亮灯时间。

要求:

交通灯按正常状态依次点亮红、黄、绿灯,交警可以根据路口车流量的情况分别设置红、绿、黄灯持续点亮的时间。

在红、绿灯点亮时,能够显示其点亮持续的时间。

2、题目分析与整体构思

2.1交通灯控制器应具备的功能

设甲车道和乙车道方向的车流量大致相同,因此红、黄、绿灯的时长也相同,考虑到黄灯的作用是警示已过停车线的司机尽快离开路口,而路口总宽度不变,因此将其固定为5秒,而红灯亮的时间等于绿灯亮的时间加上黄灯亮的时间,因此紧对绿灯点亮时间进行设置就可以同时改变红灯亮的时间,这里将绿灯所能设置的最长时间设置为40秒即(0

同时用数码管正计时指示当前状态(红、黄、绿)所亮的时间。

2.2实现方案

2.2.1从题目中计数值与交通灯的亮灭的关系如图

(1)所示:

图一

2.2.2交通灯控制器系统框图如图2所示:

3、硬件电路设计

3.1分频器的设计

分频器实现的是将高频时钟信号转换成低频的时钟信号,用于触发控制器和计数器。

该分频器实现的是一千分频,将一千赫兹的时钟信号分频成一赫兹的时钟信号。

生成的Symbol文件如图3和仿真波形如图4所示。

图三

图四

3.2控制器的设计

控制器的作用是根据计数器的计数值及t1的输入数据控制发光二极管的亮、灭,以及输出正计时数值给七段数码管的分位译码电路。

本控制器是利用时钟沿的下降沿读取前级计数器的计数值,然后作出反应;生成的实体模块如图5和仿真波形如图6所示。

图五

图六

3.3计数器的设计

计数器1的计数范围为由t1引脚输入。

计到t1后,下一个时钟沿恢复到0,开始下一轮计数。

仿真波形如图当t1取7时,计数器计数到7后清零。

实体模块如图7和仿真波形如图8。

计数器2和计数器3的实体模块如图9和图10所示。

图7

图9

图10

图8

3.4分位译码电路的设计--1

由于控制器输出的正计时数值可能是1位或者2位十进制数,因此在七段数码管的译码电路前要加上分位电路(即将其分成2个1位的十进制数,如40分成4和0,5分为0和5)。

与控制器一样,分位电路同样可以由时钟驱动,也可以设计成纯组合逻辑电路。

控制器中,引入了寄存器。

本电路中分位电路使用组合逻辑电路实现。

生成的实体模块如图11及仿真波形如图12。

图11

图12

3.5分位译码电路的设计—2

分位译码电路2和分位译码电路1的功能是一样的,为了区别两个不同的引脚

图(8)

图(11)

图(12)

NumC[3..0]和NumD[3..0]因此再设计一个电路,只是引脚名的名称不同,如图13。

3.6数码管驱动的设计——绿灯和红灯驱动

要求数码管共阳极连接(共阳极的公共端为低电平时,LED不亮),在设计中为每个数码管都添加了一个驱动电路,在使用时通过调用模块来实现。

本模块设计为时序逻辑电路,采用下降沿触发。

实体模块如图14和仿真波形如图15。

图14

图15

3.7数码管驱动的设计——黄灯驱动

由于黄灯固定时间是5秒,因此变化范围是0至5秒,七段数码管只要能显示0-5的数就行了,所以单独用一个数码管驱动。

实体模块如图16和仿真波形如图17。

图16

图17

3.8顶层连接及其仿真

交通灯控制器的顶层文件连接图如图18和仿真波形如图19。

图18

图19

对图18和19的解释:

在图18中,绿灯计数器直接接分位译码器1,红灯计数器直接接分位译码器2,每个译码器分别接两个驱动电路,然后接输出。

左边5个驱动器接的数码管显示的是甲车道各个灯亮的时间,右边5个驱动器接的数码管显示的是乙车道各个灯亮的时间。

在19图中可以看出甲、乙车道绿灯亮的时间加上黄灯亮的时间等于甲车道红灯灭的时间。

同时我们可以看出该系统满足我们所需的要求。

4、程序设计

4.1分频器的设计

libraryieee;

useieee.std_logic_1164.all;

entityfredevideris----------分频器

port

(clkin:

instd_logic;

clkout:

outstd_logic);

end;

architecturedevideroffredevideris

constantN:

integer:

=499;

signalcounter:

integerrange0toN;

图(1

signalClk:

std_logic;

begin

process(clkin)

begin

ifrising_edge(clkin)then

ifCounter=Nthen

counter<=0;

clk<=notclk;

else

counter<=counter+1;

endif;

endif;

endprocess;

clkout<=clk;

end;

4.2控制器的设计

控制器的作用是根据计数器的计数值控制发光二极管的亮、灭,以及输出正计时数值给七段译码管的分译码电路。

libraryieee;

useieee.std_logic_1164.all;

entitycontrolis-----------控制器

port(clk:

instd_logic;

c1,c2,c3:

outstd_logic;------计数器工作时能信号,为1时计数

w1,w2,w3:

instd_logic;------计数器指示信号,在计数过程中,相应的指示信号为0,计数结束时为1

r1,r2:

outstd_logic;------分别为甲乙车道红灯

y1,y2:

outstd_logic;-------分别为甲乙车道黄灯

g1,g2:

outstd_logic;------分别为甲乙车道绿灯

reset:

instd_logic);-------复位信号,高电平有效

endcontrol;

architectureaofcontrolis

typestate_spaceis(s3,s2,s1,s0);-----四种状态

signalstate:

state_space;

begin

process(clk)

begin

ifreset='1'then

state<=s0;--------复位时状态为S0

elseif(clk'eventandclk='1')then-------时钟上升沿到来

casestateis

whens0=>

ifw1='1'then

state<=s1;

endif;

whens1=>

ifw2='1'then

state<=s2;

endif;

whens2=>

ifw3='1'then

state<=s3;

endif;

whens3=>

ifw2='1'then

state<=s0;

endif;

endcase;

endif;

endif;

endprocess;

c1<='1'whenstate=s0else'0';

c2<='1'whenstate=s1orstate=s3else'0';

c3<='1'whenstate=s2else'0';

r1<='1'whenstate=s1orstate=s0else'0';

y1<='1'whenstate=s3else'0';

g1<='1'whenstate=s2else'0';

r2<='1'whenstate=s2orstate=s3else'0';

y2<='1'whenstate=s1else'0';

g2<='1'whenstate=s0else'0';

enda;

4.3计数器的设计

4.3.1绿灯计数器

libraryieee;

useieee.std_logic_1164.all;

entitycounter1is

port(clk:

instd_logic;

enable:

instd_logic;

t1:

inintegerrange0to40;-------绿灯可设置亮的时间

c1:

outstd_logic);

endcounter1;

architectureaofcounter1is

begin

process(clk)

variablecnt:

integerrange0to40;-----变量cnt定义为常数,取值范围为0

到40

begin

if(clk'eventandclk='1')then-----时钟上升沿到来

ifenable='1'andcnt

cnt:

=cnt+1;------加计数

else

cnt:

=0;

endif;

ifcnt=t1then

c1<='1';---------乙道开始通行,S0状态

else

c1<='0';

endif;

endif;

endprocess;

enda;

4.3.2红灯计数器

libraryieee;

useieee.std_logic_1164.all;

entitycounter2is

port(clk:

instd_logic;

enable:

instd_logic;

t1:

inintegerrange0to40;

c2:

outstd_logic);

endcounter2;

architectureaofcounter2is

constanty:

Integer:

=5;---------黄灯固定时间为5秒

signalt2:

integerrange0to45;-------红灯亮的时间

begin

process(clk)

variablecnt:

integerrange0to45;----------变量cnt定义为常数,取值范围为0

到45

begin

t2<=t1+y;

if(clk'eventandclk='1')then-------时钟上升沿到来

ifenable='1'andcnt

cnt:

=cnt+1;

else

cnt:

=0;

endif;

ifcnt=t2then

c2<='1';-------工作在S1或S3状态

else

c2<='0';

endif;

endif;

endprocess;

enda;

4.3.3黄灯计数器

libraryieee;

useieee.std_logic_1164.all;

entitycounter3is

port(clk:

instd_logic;

enable:

instd_logic;

c3:

outstd_logic;

m3:

outintegerrange0to5);

endcounter3;

architectureaofcounter3is

begin

process(clk)

variablecnt:

integerrange0to5;-------变量cnt定义为常数,取值范围为0

到5

begin

if(clk'eventandclk='1')then-----时钟上升沿到来

ifenable='1'andcnt<5then-----使能信号为1,并且cnt小于5时

cnt:

=cnt+1;------加计数

else

cnt:

=0;

endif;

ifcnt=5then

c3<='1';---------工作在S2状态

else

c3<='0';

endif;

endif;

m3<=cnt;

endprocess;

enda;

4.4分位译码电路设计--1

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFenwei1IS

PORT

(Numin:

INintegerRANGE0TO45;

NumA,NumB:

OUTIntegerRANGE0to9-------绿灯亮的时间,十位和个位数字

);

END;

ARCHITECTUREbehaviorOFFenwei1IS

BEGIN

process(Numin)

BEGIN

IFNumin>=40THEN-------输入计时数据大于40

NumA<=4;-------把十位数字送给A

NumB<=Numin-40;-------把个位数字送给B

ELSIFNumin>=30THEN

NumA<=3;

NumB<=Numin-30;

ELSIFNumin>=20THEN

NumA<=2;

NumB<=Numin-20;

ELSIFNumin>=10THEN

NumA<=1;

NumB<=Numin-10;

ELSE

NumA<=0;

NumB<=Numin;

ENDIF;

ENDPROCESS;

END;

4.5分位译码电路的设计—2

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFenwei2IS

PORT

(Numin:

INintegerRANGE0TO45;

NumC,NumD:

OUTIntegerRANGE0to9-----红灯亮的时间,十位和个位

);

END;

ARCHITECTUREbehaviorOFFenwei2IS

BEGIN

process(Numin)

BEGIN

IFNumin>=40THEN

NumC<=4;

NumD<=Numin-40;

ELSIFNumin>=30THEN

NumC<=3;

NumD<=Numin-30;

ELSIFNumin>=20THEN

NumC<=2;

NumD<=Numin-20;

ELSIFNumin>=10THEN

NumC<=1;

NumD<=Numin-10;

ELSE

NumC<=0;

NumD<=Numin;

ENDIF;

ENDPROCESS;

END;

4.6数码管驱动的设计

4.6.1红绿灯驱动

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYqudongIS

PORT

(clk:

inSTD_LOGIC;

enable:

instd_logic;

data:

INintegerRANGE0TO9;------输入数字

segout:

outSTD_LOGIC_VECTOR(6downto0));-------七段显示器输出

END;

ARCHITECTUREbehaviorOFqudongIS

BEGIN

process(Clk,data)

BEGIN

IFfalling_edge(Clk)andenable='1'then------下降沿到来和使能信号为1时

casedatais

when0=>segout<="1111110";

when1=>segout<="0110000";

when2=>segout<="1101101";

when3=>segout<="1111001";

when4=>segout<="0110011";

when5=>segout<="1011011";

when6=>segout<="0011111";

when7=>segout<="1110000";

when8=>segout<="1111111";

when9=>segout<="1110011";

whenothers=>null;

ENDCASE;

ENDIF;

ENDPROCESS;

END;

4.6.2黄灯驱动

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYHDqudongIS---------黄灯驱动

PORT

(clk:

inSTD_LOGIC;

enable:

instd_logic;

data:

INintegerRANGE0TO5;------黄灯变化范围

segout:

outSTD_LOGIC_VECTOR(6downto0));

END;

ARCHITECTUREbehaviorOFHDqudongIS

BEGIN

process(Clk,data)

BEGIN

IFfalling_edge(Clk)andenable='1'then

casedatais

when0=>segout<="1111110";

when1=>segout<="0110000";

when2=>segout<="1101101";

when3=>segout<="1111001";

when4=>segout<="0110011";

when5=>segout<="1011011";

whenothers=>null;

ENDCASE;

ENDIF;

ENDPROCESS;

END;

5﹑硬件测试

把顶层文件连接图进行编译仿真后就可以进行硬件测试了,我们所用的仿真实验箱是GW48系列SOPC/EDA实验开发系统(杭州康芯电子有限公司现代DSP实验开发系统)。

在实验箱中因为有1HZ的频率并且自带译码器,所以在下载时用的顶层文件连接图就把分频器和译码器驱动电路给去掉了,如图(20),在实验过程中由于数码管不够,图中5个数码管显示的是一个车道的绿、红、黄灯时间。

图20

6、引脚锁定

在下载之前,要进行引脚的锁定,我们用的是模式5,各个端口的引脚锁定如图21。

图21

在确定引脚锁定正确后再编译一次,然后下载到实验箱中。

首先对绿灯时间t1进行置数,可在0到40任意置数,不妨设为7秒,然后系统开始工作,绿灯从0开始正计时到7再跳到黄灯从0开始正计时到5然后再跳到红灯从0开始正计时到12。

相应的另一车道的红、绿、黄灯会变化只是没有显示相应的时间。

7、心得体会

EDA课程设计,使我对EDA的认识有提高了一个层次,现在能够熟练的使用QuartsII,能够用VHDL语言编写简单的、实用的小程序,这次EDA课程设计重点学习了交通灯部分程序的编写、调试、还有硬件下载、操作等过程。

在整个课程设计的过程中,我查阅了大量的关于EDA的资料,特别是在网上和图书馆我找到了大量的关于硬件编程的资料。

另外,图(21)-22-在课程设计的过程中我认为调试程序是很重要的,要有耐心。

我在第一次编译时有三十几个错误,其中有输入错误、语法错误,如:

工程名和实体名不一致,少了分号或者少了ENDIF等错误。

发现错误之后就要一遍一遍的仔细查错,直到没有错误,然后可以进行波型仿真了。

8﹑参考文献

(1)潘松,黄继业.EDA技术实用教程.科学出版社.2006.9

(2)李辉.PLD与数字系统设计.西安电子科技大学出版社.2005

(3)蒋璇.臧蠢华.数字系统设计与PLD应用(第二版).电子工业出

版社.2005

(4)刘笃仁、杨万海编著.在系统可编程技术及其器件原理与应用.

西安:

电子科技大学出版社.2001

(5)张原编著.可编程逻辑器件设计及应用.北京:

机械工业出版

社.2001

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 文化宗教

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2