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

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

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

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

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

1.基本功能:

(1)南北和东西方向各有一组绿,红,黄灯,各自的持续时间分别为20s,25s,5s;

(2)当有特殊情况时,两个方向均为红灯,计时暂停,当特殊情况结束后,控制器恢复原来状态,继续正常工作。

(3)用两组数码管,以倒计时方式显示两个方向允许通行或禁止通行的剩余时间。

2.扩充功能:

当绿大灯亮时,允许左拐

第2章交通灯控制器的设计思想

2.1硬件描述

2.1.1输入电路

(1)在开始计时之前的等待状态,复位键reset接低电位,接通电源后,首先要将它接高电位,表示计时开始。

(2)当按一下(on_off)键,表示紧急情况发生,两个方向均为红灯亮,计时停止,当再次按下(on_off)键时,控制器恢复原来状态,正常工作。

2.1.2输出电路

(1)由于东西和南北方向都要显示时间,因此需要4个数码管,这样在设计中就需要四条输出线choose4,用来选通指定一个LED七段显示数码管。

(2)显示器的每一位都采用LED七段显示数码管进行显示,每一个LED七段显示数码管都要有七条输出线控制,一共使用4个七段数码管,故输出电路使用四个七位输出信号:

showtime1,showtime2,showtime3,showtime4。

(3)东西和南北方向都有交通灯亮的情况,故输出电路中要有两个状态控制信号state1,state2分别控制东西和南北的灯,每个方向上有4个灯(增加了左、右转弯显示控制功能),所以state1,state2的类型应该是4位数组型的。

外部电路图如下:

2.2软件描述

(1)在VHDL设计描述中,采用自顶向下的设计思路,该思路,首先要描述顶层的接口,上面的描述已经规定了交通灯控制的输入输出信号:

输入信号:

复位开关信号reset;

紧急情况控制信号on_off;

外部时钟信号clk。

输出信号:

LED七段显示数码管的选通信号choose4(3downto0);

LED七段显示数码管的输出信号showtime1(6downto0),showntime2(6downto0),showtime3(6downto0),showtome4(6downto0);

交通灯状态控制信号state1(3downto0),state2(3downto0)。

(2)由于紧急情况控制信号是采用按键的输入方式,其产生时刻和持续时间的长短是随机不定的,且存在因开关簧片反弹引起的电平抖动现象,因此必须在每个开关后面安排一个消抖和同步化电路模块,以保证系统能捕捉到输入脉冲,故需要有防抖动的模块。

由于外部时钟信号clk的频率为1MHz,而实际需要的内部计时时钟频率为1Hz,提供给消抖同步电路的频率为50Hz(满足按键)和提供给产生选通信号电路的时钟频率为200Hz(满足视觉暂留效应)。

当正常计时开始后,需要进行定时计数操作,由于东西和南北两个方向上的时间显示器是由两个LED七段显示数码管组成的,因此需要产生两个2位的计时信息:

2个十位信号,2个个位信号,这个定时计数操作可以由一个定时计数器来完成,又因为交通灯的状态变化是在计时为0的情况下才能进行的,因此需要一个计时电路来产生使能信号,因此定时计数的功能就是用来产生2个2位计时信息和使能信号。

另外还需要将时间显示出来,为了节省资源,我采用了循环点亮LED七段显示数码管的方法来显示计时输出。

通过信号choose4(3downto0)来对4个LED七段显示数码管进行选择。

由于不能使用7448自动译码集成电路,故在LED七段显示数码管显示时间时,要把计时结果转换为七段码输出到相应的LED七段显示数码管上,因此还需要一个转换电路。

交通灯状态控制也需要一个电路,当有使能信号及无紧急情况下,交通灯状态不发生变化,有紧急情况时,两个方向上均为红灯亮,紧急情况消除后,回到原来状态,无使能信号时,交通灯状态不变。

第3章程序模块及仿真波形

3.1总体电路图

3.2各模块详细说明

(1)键输入模块(keyin)

紧急情况on_off;

用来消除抖动的时钟信号clk1,由时钟分频模块提供。

去抖后的提示信号on_off0。

(2)时钟分频模块(clk_div)

外部时钟信号clk;

消除抖动的时钟信号clk1;

计时内部时钟信号clk2;

产生选通信号的时钟信号clk0。

(3)计时模块(time):

定时计时时钟clk2,由时钟分频模块提供;

去抖动后的提示信号on_off0;

复位信号reset;

状态提示信号state(1downto0);

东西方向的十位信号eq1(3downto0);

东西方向的个位信号eq0(3downto0);

南北方向的十位信号sq1(3downto0);

南北方向的个位信号sq0(3downto0);

使能信号timel,times。

(4)选通模块(choose):

选通时钟信号clk0,由时钟分频模块提供。

选通信号choose4(3downto0)。

(5)显示模块(display):

计时的十位或个位信号;

控制LED七段显示数码管的七位数组型信号。

(6)控制模块(keep):

去抖后的紧急情况提示信号on_off0;

定时计时时钟信号clk2;

使能信号timel,times;

东西方向交通灯状态控制信号state1(3downto0);

南北方向交通灯状态控制信号state2(3downto0);

交通灯状态提示信号state(1downto0)。

3.3仿真波形

选通模块图

去抖模块图

分频模块图

计时模块图

控制模块图

第4章心得体会及故障问题分析

体会:

这次综合实验要求很高,我在思考和设计上花了不少时间,其中收获也是不少。

(1)拿到一个project后,不要急于写程序,首先要搞清楚要干什么,完成什么功能,分几部分完成,每部分完成什么功能,各部分之间的联系。

如果采用的是自顶向下的设计思想,那么顶层的设计就很重要,顶层设计好后,下面各部分写起来就比较清楚容易了。

一旦出现问题,也好检查错误出在什么地方,哪一部分有问题,就进行相应的改动。

(2)在编程过程中,思路要清楚,明白要实现的功能,然后根据实现的功能一步一步的编写。

而且要采用各个击破的办法,先实现下层部分,再整体实现。

(3)编下层时,不用急于仿真,等整体编译成功后,先进行总体仿真,看出现的错误在什么地方,这个地方是由哪个部分控制的,然后再对该部分进行仿真,看有没有问题。

(4)编译成功后,不要急于下载,一定要先仿真,根据仿真波形判断是否达到要求。

一般仿真成功后,只要电路连接没问题,下载后就没什么问题了。

参考文献

[l]《基于QuartusⅡ的FPGA/CPLD设计》电子工业出版社

[2]《CPLD系统设计技术入门与应用》电子工业出版社

[3]《EDA技术基础》湖南大学出版社

[4]沈明山《EDA技术及可编程器件应用实训》科学出版社

[5]朱正伟《EDA技术及应用》清华大学出版

程序清单:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_arith.all;

useieee.std_logic_unsigned.all;

entitytracficis

port(reset:

instd_logic;

clk:

showtime1,showtime2,showtime3,showtime4:

outstd_logic_vector(6downto0);

choose4:

outstd_logic_vector(3downto0);

on_off:

state1,state2:

outstd_logic_vector(3downto0));

endtracfic;

architecturesystemoftracficis

componentkeyin

port(a,b:

instd_logic;

c:

outstd_logic);

endcomponent;

componenttime

port(a,b,k:

c:

instd_logic_vector(1downto0);

d,e,f,g:

outstd_logic_vector(3downto0);

j,h:

componentchoose

port(a:

b:

outstd_logic_vector(3downto0));

componentdisplay

instd_logic_vector(3downto0);

outstd_logic_vector(6downto0));

componentclk_div

b,c,d:

componentkeep

port(a,b,c,g,j:

d,e:

f:

outstd_logic_vector(1downto0));

signalon_off0:

std_logic;

signalstate:

std_logic_vector(1downto0);

signalclk0,clk1,clk2:

signaleq0,sq0:

std_logic_vector(3downto0);

signaleq1,sq1:

signaltimel,times:

begin

u1:

keyinportmap(clk1,on_off,on_off0);

u3:

timeportmap(clk2,on_off0,reset,state,eq0,eq1,sq0,sq1,timel,times);

u4:

chooseportmap(clk0,choose4);

u5:

displayportmap(eq0,showtime1);

u6:

displayportmap(eq1,showtime2);

u7:

displayportmap(sq0,showtime3);

u8:

displayportmap(sq1,showtime4);

u9:

keepportmap(on_off0,timel,times,clk2,reset,state1,state2,state);

u10:

clk_divportmap(clk,clk0,clk1,clk2);

endsystem;

entitykeyinis

port(A,B:

C:

endkeyin;

architecturekeyin_arcofkeyinis

componentkand2

endcomponent;

componentkdf

C,D:

componentknand2

signalTMP1,TMP2,TMP3,TMP4,TMP5,TMP6:

begin

u0:

knand2portmap(A,TMP1,TMP2);

knand2portmap(TMP2,TMP3,TMP1);

U2:

kdfportmap(TMP2,B,TMP4,TMP3);

U3:

kdfportmap(TMP4,B,TMP6,TMP5);

kand2portmap(TMP4,TMP5,C);

endkeyin_arc;

---twoinputsandgatedescription

entitykand2is

endkand2;

architecturekand2_arcofkand2is

C<

=AandB;

endkand2_arc;

---endoftwoinputsandgatedescription

---twoinputsand_notgatedescription

entityknand2is

endknand2;

architectureknand2_arcofknand2is

=not(AandB);

endknand2_arc;

---endoftwoinputsand_notgatedescription

---Dtriggerdescription

entitykdfis

endkdf;

architecturekdf_arcofkdfis

process(B)

if(B'

eventandB='

1'

)thenC<

=A;

D<

=notA;

endif;

endprocess;

endkdf_arc;

entitychooseis

endchoose;

architecturechoose_arcofchooseis

signalm:

integerrange0to3;

process(a)

begin

if(a'

eventanda='

)then

if(m=3)thenm<

=0;

elsem<

=m+1;

casemiswhen0=>

b<

="

0111"

;

when1=>

1011"

when2=>

1101"

when3=>

1110"

endcase;

endprocess;

endchoose_arc;

useieee.std_logic_1164.all;

entityclk_divis

outstd_logic;

d:

endclk_div;

architectureclk_div_arcofclk_divis

signalclk_10k:

signalclk_200:

signalclk_10:

signalclk_1:

signalm:

integerrange0to100;

signaln:

integerrange0to50;

signall:

integerrange0to20;

signalg:

integerrange0to10;

p1:

process(a)

ifm=99thenm<

if(m<

=49)thenclk_10k<

='

0'

elseclk_10k<

p2:

process(clk_10k)

if(clk_10k'

eventandclk_10k='

ifn=49thenn<

elsen<

=n+1;

ifn<

=24thenclk_200<

elseclk_200<

=clk_200;

p3:

process(clk_200)

if(clk_200'

eventandclk_200='

ifl=19thenl<

elsel<

=l+1;

ifl<

=9thenclk_10<

elseclk_10<

c<

=clk_10;

p4:

process(clk_10)

if(clk_10'

eventandclk_10='

ifg=9theng<

elseg<

=g+1;

ifg<

=4thenclk_1<

elseclk_1<

endif;

d<

=clk_1;

endclk_div_arc;

useieee.std_logic_signed.all;

entitydisplayis

enddisplay;

architecturedisplay_arcofdisplayis

signala0:

process(a0)

a0<

=a;

casea0iswhen"

0000"

=>

0111111"

when"

0001"

0000110"

0010"

1011011"

0011"

1001111"

0100"

1100110"

0101"

1101101"

0110"

1111101"

0000111"

1000"

1111111"

1001"

1101111"

whenothers=>

ZZZZZZZ"

enddisplay_arc;

entitykeepis

port(a,b,c,g,j:

d,e:

f:

outstd_logic_vector(1downto0));

endkeep;

architecturekeep_arcofkeepis

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

signalcurrent_state:

state_type;

signalnew_state:

b

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

当前位置:首页 > PPT模板 > 其它模板

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

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