交通灯控制器的设计Word文档格式.docx

上传人:b****5 文档编号:19935355 上传时间:2023-01-12 格式:DOCX 页数:13 大小:146.27KB
下载 相关 举报
交通灯控制器的设计Word文档格式.docx_第1页
第1页 / 共13页
交通灯控制器的设计Word文档格式.docx_第2页
第2页 / 共13页
交通灯控制器的设计Word文档格式.docx_第3页
第3页 / 共13页
交通灯控制器的设计Word文档格式.docx_第4页
第4页 / 共13页
交通灯控制器的设计Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

交通灯控制器的设计Word文档格式.docx

《交通灯控制器的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《交通灯控制器的设计Word文档格式.docx(13页珍藏版)》请在冰豆网上搜索。

交通灯控制器的设计Word文档格式.docx

表9-1交通灯控制器状态转换表

当前状态

下一状态

转换条件

St0

St1

主路绿灯亮了40秒

St2

主路黄灯亮了5秒

St3

主路绿灯亮了40秒

支路黄灯亮了5秒

1.3、根据状态转换表得到交通灯控制器的状态转移图如图所示。

交通灯控制器的状态转移图

(二)各个模块设计

2.1、控制器模块

控制器模块示意图

其中,clk为时钟信号,时钟上升沿有效。

hold为紧急制动信号,低电平有效。

ared,agreen,ayellow分别表示东西方向的红灯,黄灯,绿灯显示信号,高电平有效。

bred,bgreen,byellow分别表示南北方向的红灯,黄灯,绿灯显示信号,高电平有效。

用于控制红绿黄灯的亮暗情况。

2.2、45秒倒计时计数器模块

45秒倒计时计数器模块示意图

其中,CLK为时钟信号,时钟上升沿有效。

EN为使能端,高电平有效。

CR为紧急制动信号低电平有效。

QL{3..0}是计数低位。

QH{3..0}是计数高位。

用于45秒的倒计时计数。

2.3、7位译码器模块

7位译码器模块示意图

其中dat{3..0}为要译码的信号。

a,b,c,d,e,f,g为译码后的信号。

用于将45秒倒计时计数的信号译码成数码管可以识别的信号。

2.4、50MHZ分频器模块

50MHZ分频器模块示意图

其中clk为50MHZ时钟信号,时钟上升沿有效。

输出clk_out为1HZ时钟信号,时钟上升沿有效。

用于将50MHZ的时钟信号转变成1HZ的时钟信号。

(三)结构图设计

(四)仿真电路

时序仿真图

从图中可看到首先进入st0状态,此时东西路绿灯亮,南北路红灯亮;

计数器计数到40秒时,交通灯控制器进入st1状态,此时东西路黄灯亮,南北路红灯亮;

在st1状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st2,此时东西路红灯亮,南北路绿灯亮;

在st2状态计数器又开始计数,计数器计数到40秒后,交通灯控制器状进入st3状态,此时东西路红灯亮,南北路绿灯亮;

在st3状态计数器又开始计数,计数器计数到5秒后,交通灯控制器状态进入st0状态,此时东西路绿灯亮,南北路红灯亮,如些循环反复,完成十字交通路口的红绿灯控制。

A0-G0,A1-G1分别为45到0的译码。

(五)分配引脚

为了对此工程进行硬件测试,应将编译成功后的程序下载到目标芯片上,并指定输入输出信号的管脚,以便添加激励信号和测试输出信号。

在下载编译成功的文件之前,需要制定器件的管脚,选择Assignments|Pins命令,在随后出现的下拉列表框中选择对应端口信号名的器件引脚号,如下图:

四、设计总结和心得

通过此次EDA设计,我系统性的学习了课本上相关的知识,对课堂上的知识更加了解。

通过认真研究课本,使我对EDA程序设计有了一定思路;

通过实验课的学习,在程序的设计,程序的调试方面都学到了很多东西,在这几天时间里,实验室的氛围对我们的影响很大,大家一起努力,这也是我们能完成课设的动力。

其中在编程中也出现了很多的问题,但通过老师和同学的帮助下,把问题一一解决。

其实只要我们自己认真看书,仔细分析,仔细调试,就一定会发下错误,在以后的学习中,要理论联系实际,把我们所学的理论知识用到实际当中,学习EDA更是如此,程序只有经常的写与读的过程中才能提高,这就是我在这次课程设计中的最大收获。

五、源代码

控制器模块:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycontrolis

port(clk,hold:

instd_logic;

ared,agreen,ayellow,bred,bgreen,byellow:

outstd_logic);

endcontrol;

architecturebehaviorofcontrolis

typestate_typeis(s0,s1,s2,s3,s4);

signalcurrent_state,next_state:

state_type;

signalcounter:

std_logic_vector(6downto0);

begin

synch:

process

waituntilclk'

eventandclk='

1'

;

ifhold='

0'

then

counter<

=counter;

else

ifcounter<

89then

=counter+1;

=(others=>

'

);

endif;

endprocess;

process

eventandclk='

current_state<

=next_state;

endprocess;

state_trans:

process(current_state)

casecurrent_stateis

whens0=>

next_state<

=s4;

39then

=s0;

=s1;

whens1=>

44then

=s2;

whens2=>

84then

=s3;

whens3=>

whens4=>

elsifcounter<

endcase;

output:

casecurrent_stateis

whens0=>

ared<

='

agreen<

ayellow<

bred<

bgreen<

byellow<

whens1=>

whens2=>

whens3=>

whens4=>

endcase;

endbehavior;

45秒倒计时计数器模块:

entitym45is

port(

CLK:

EN:

CR:

QL,QH:

outstd_logic_vector(3downto0);

OC:

outstd_logic

);

endm45;

architecturebehavofm45is

signalcouL,couH:

std_logic_vector(3downto0);

process(CR,CLK,EN)

begin

ifCR='

couL<

="

0000"

couH<

elsifclk'

ifEN='

if(couL=0andcouH=0)then

couL<

0100"

couH<

elsifcouL=0then

1001"

=couH-1;

else

=couL-1;

endif;

endif;

endif;

process(couL,couH)

if(couL=0andcouH=0)then

OC<

QL<

=couL;

QH<

=couH;

endbehav;

7位译码器模块:

entityseg7is

port(dat:

instd_logic_vector(3downto0);

a,b,c,d,e,f,g:

outstd_logic);

endseg7;

architecturearcofseg7is

signaltmp:

std_logic_vector(6downto0);

process(dat)

begin

casedatis

when"

=>

tmp<

0000001"

0001"

1001111"

0010"

0010010"

0011"

0000110"

1001100"

0101"

0100100"

0110"

0100000"

0111"

0001111"

1000"

0000000"

0000100"

1010"

0001000"

1011"

1100000"

1100"

0110001"

1101"

1000010"

1110"

0110000"

1111"

0111000"

whenothers=>

null;

endcase;

a<

=tmp(6);

b<

=tmp(5);

c<

=tmp(4);

d<

=tmp(3);

e<

=tmp

(2);

f<

=tmp

(1);

g<

=tmp(0);

endarc;

50MHZ分频器模块:

entitydevideis

clk:

clk_out:

enddevide;

architecturearc_devideofdevideis

process(clk)

variablecount:

integerrange0to49999999;

ifclk'

if(count=49999999)then

count:

=0;

clk_out<

else

=count+1;

endarchitecturearc_devide;

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

当前位置:首页 > 高等教育 > 理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1