数字逻辑设计交通灯控制器.docx

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

数字逻辑设计交通灯控制器.docx

《数字逻辑设计交通灯控制器.docx》由会员分享,可在线阅读,更多相关《数字逻辑设计交通灯控制器.docx(16页珍藏版)》请在冰豆网上搜索。

数字逻辑设计交通灯控制器.docx

数字逻辑设计交通灯控制器

数字逻辑课程设计报告

 

班级:

姓名:

学号:

完成时间:

 

目录

一、实验目的-------------------------------------3

二、预习要求-------------------------------------3

三、实验要求-------------------------------------3

四、仪器与器材-----------------------------------4

五、层次化设计结构-------------------------------4

1)分频器-------------------------------------4

2)计数器-------------------------------------5

3)控制器-------------------------------------6

4)分位译码器---------------------------------9

5)数码管驱动--------------------------------11

6)七段数字显示------------------------------13

7)顶层模块----------------------------------14

六、系统实现电路---------------------------------17

七、设计过程中出现的问题-------------------------17

八、设计体会总结---------------------------------17

 

一、实验目的

1、学会应用数字系统方法进行电路设计;

2、进一步提高MaxplusⅡ软件开发应用能力;

3、培养综合实验的能力;

二、预习要求

1、层次化方法设计该交通灯控制器电路;

2、编写VHDL源程序,生成元器件;

3、将各个器件进行组合连线,验证设计交通灯的控制器;

三、实验要求

设计一个交通灯控制器

1、能显示十字路口东西、南北两个方向的红、黄、绿的指示状态

(1)用L16、L15、L14作为东西方向的绿、黄、红灯;

(2)用L1、L2、L3作为南北方向的绿、黄、红灯。

2、能实现正常的倒计时功能

(1)用M6、M5作为东西方向的倒计时显示器,显示时间为红灯35秒、绿灯50秒、黄灯5秒;

(2)用M2、M1作为南北方向的倒计时显示器,实现时间为红灯55秒、绿灯30秒、黄灯5秒。

3、能实现特殊状态的功能

(1)按S1后,能实现特殊状态功能;

(2)显示器M6M5、M2M1闪烁;

(3)计数器停止计数并保持在原来的状态;

(4)东西、南北路口均显示红灯状态;

(5)特殊状态解除后能继续计数;

4、能实现总体清零功能

按下SB后,系统实现总清零,计数器由初始状态计数,对应状态的指示灯亮。

5、使用MaxPlusII10.0软件设计符合以上功能要求的交通灯控制器,并用层次化设计方法设计该电路。

6、控制器、置数器的功能用功能仿真的方法验证,可通过观察有关波形确认电路设计是否正确。

7、完成全部电路设计后在SE-3实验系统上下载,验证设计课题的正确性。

四、仪器与器材

1、开发软件:

MaxPlusII

2、微机

3、ISP实验板

五、层次化设计结构

1、分频器

在实际的电路板上,计数的数码管电路采用了1464赫兹的频率,而这个频率对于计数器和控制器来讲太高了。

为了让显示计数与灯的亮灭保持同步,我使用了一个1464频率的时钟脉冲,同时使用该分频器将高频时钟信号分成低频脉冲,赋予控制器。

程序如下:

LIBRARYIEEE;

USEIEEE.Std_Logic_1164.ALL;

ENTITYFreDeviderIS

PORT

(Clkin:

INStd_Logic;

Clkout:

OUTStd_Logic);

END;

ARCHITECTUREDeviderOFFreDeviderIS

CONSTANTN:

Integer:

=499;

signalcounter:

Integerrange0toN;

signalClk:

Std_Logic;

BEGIN

PROCESS(Clkin)

begin

IFclkin'eventandclkin='1'THEN

IFCounter=Nthen

counter<=0;

Clk<=notclk;

else

counter<=counter+1;

endif;

endif;

endprocess;

clkout<=clk;

end;

2、计数器

计数范围为0-90。

计满90后回到0,开始下一轮计数。

如遇hold=1时,停止计数,红灯闪烁;如遇reset=1时,计数清零,回到初始状态。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcounterIS

PORT(clock:

INSTD_LOGIC;

reset:

instd_logic;

Hold:

instd_logic;

countNum:

BuFFeRINTEGERRANGE0TO90);

END;

ARCHITECTUREbehaviorOFcounterIS

BEGIN

process(reset,Clock)

BEGIN

IFReset='1'THEN

countNum<=0;

ELSIFClock'eventandclock='1'THEN

IFHold='1'then

countNum<=countNum;

ELSE

IFcountNum=90THEN

countNum<=0;

ELSE

countNum<=countNum+1;

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

END;

3、控制器

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

此外,当检测到特殊情况(Hold=‘1’)发生时,无条件点亮红色的发光二极管,并且闪烁。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYcountrollerIS

PORT(Clock:

INSTD_LOGIC;

Hold:

instd_logic;

CountNum:

inINTEGERRANGE0TO89;

NumA,NumB:

outINTEGERRANGE0TO55;

RedA,GreenA,YellowA:

outstd_logic;

RedB,GreenB,YellowB:

outstd_logic);

END;

ARCHITECTUREbehaviorOFCountrollerIS

BEGIN

process(Clock)

BEGIN

IFClock'eventandClock='1'THEN

IFHold='1'THEN

RedA<='1';

RedB<='1';

GreenA<='0';

GreenA<='0';

YellowA<='0';

YellowB<='0';

ELSIFCountNum<=29THEN

NumA<=30-CountNum;

RedA<='0';

GreenA<='1';

YellowA<='0';

ELSIFCountNum<=34THEN

NumA<=35-CountNum;

RedA<='0';

GreenA<='0';

YellowA<='1';

ELSE

NumA<=90-CountNum;

RedA<='1';

GreenA<='0';

YellowA<='0';

ENDIF;

IFHold='1'THEN

RedA<='1';

RedB<='1';

GreenA<='0';

GreenA<='0';

YellowA<='0';

YellowB<='0';

elsIFCountNum<=34THEN

NumB<=35-CountNum;

RedB<='1';

GreenB<='0';

YellowB<='0';

ELSIFCountNum<=84THEN

NumB<=85-CountNum;

RedB<='0';

GreenB<='1';

YellowB<='0';

ELSe

NumB<=90-CountNum;

RedB<='0';

GreenB<='0';

YellowB<='1';

ENDIF;

ENDIF;

ENDPROCESS;

END;

4、分位译码器

因为控制器输出的倒计时数值要显示2位十进制数,所以在七段数码管的译码电路前要加上分位电路(即将其分为2个1位的十进制数,如56分为5和6,9分为0和9)。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFenweiIS

PORT

(Numin:

INintegerRANGE0TO55;

NumA,NumB:

OUTIntegerRANGE0to9

);

END;

ARCHITECTUREbehaviorOFFenweiIS

BEGIN

process(Numin)

BEGIN

IFNumin>=50THEN

NumA<=5;

NumB<=Numin-50;

ELSIFNumin>=40THEN

NumA<=4;

NumB<=Numin-40;

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;

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYFenwei2IS

PORT

(Numin:

INintegerRANGE0TO55;

NumC,NumD:

OUTIntegerRANGE0to9

);

END;

ARCHITECTUREbehaviorOFFenwei2IS

BEGIN

process(Numin)

BEGIN

IFNumin>=50THEN

NumC<=5;

NumD<=Numin-50;

ELSIFNumin>=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;

5、数码管驱动

控制公共端为高电平控制相应数码管的亮、灭(共阴极数码管的公共端为高电平时,LED不亮;共阳极的公共端为低电平时,LED不亮)。

程序如下:

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_unsigned.ALL;

ENTITYdtsmIS

PORT(clk:

inSTD_LOGIC;

hold:

instd_logic;

NumA,NumB,NumC,NumD:

inSTD_LOGIC_VECTOR(3downto0);

segout1:

outSTD_LOGIC_VECTOR(6downto0);

led_sel:

outSTD_LOGIC_VECTOR(3downto0));

ENDdtsm;

architecturebhvofdtsmis

componentbcd_datais

port(

clk:

instd_logic;

fin:

instd_logic;

bcd_data:

inSTD_LOGIC_VECTOR(3downto0);

segout:

outSTD_LOGIC_VECTOR(6downto0));

endcomponent;

signalx:

STD_LOGIC_VECTOR(3downto0);

signalq:

STD_LOGIC_VECTOR(1downto0);

begin

p2:

process(clk)

begin

ifclk'eventandclk='1'then

Q<=Q+'1';

endif;

endprocess;

p3:

process(Q)

begin

caseQis

when"00"=>led_sel<="0001";x<=NumD;

when"01"=>led_sel<="0010";x<=NumC;

when"10"=>led_sel<="0100";x<=NumB;

when"11"=>led_sel<="1000";x<=NumA;

whenothers=>null;

endcase;

endprocess;

u1:

bcd_dataPORTmap(clk,hold,bcd_data=>x,segout=>segout1);

end;

6、七段数字显示

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYbcd_dataIS

PORT

(clk:

instd_logic;

fin:

instd_logic;

bcd_data:

inSTD_LOGIC_VECTOR(3downto0);

segout:

outSTD_LOGIC_VECTOR(6downto0)

);

END;

ARCHITECTUREbehaviorOFbcd_dataIS

signaltime:

integerrange0to255;

begin

process(clk)

BEGIN

ifclk'eventandclk='1'then

if(fin='0')then

time<=0;

else

if(time=255)then

time<=0;

else

time<=time+1;

endif;

endif;

if(time<127)then

casebcd_datais

when"0000"=>segout<="1111110";

when"0001"=>segout<="0110000";

when"0010"=>segout<="1101101";

when"0011"=>segout<="1111001";

when"0100"=>segout<="0110011";

when"0101"=>segout<="1011011";

when"0110"=>segout<="1011111";

when"0111"=>segout<="1110000";

when"1000"=>segout<="1111111";

when"1001"=>segout<="1111011";

whenothers=>null;

ENDCASE;

else

segout<="0000000";

endif;

endif;

ENDPROCESS;

END;

7、顶层模快

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

entitydingcenis

port(

cp:

instd_logic;

reset,hold:

instd_logic;

ra,ga,ya,rb,yb,gb:

outstd_logic;

s:

outstd_logic_vector(6downto0);

l:

outstd_logic_vector(3downto0)

);

end;

Architectureaofdingcenis

componentcountroller

PORT(Clock:

INSTD_LOGIC;

Hold:

instd_logic;

CountNum:

inINTEGERRANGE0TO89;

NumA,NumB:

outINTEGERRANGE0TO55;

RedA,GreenA,YellowA:

outstd_logic;

RedB,GreenB,YellowB:

outstd_logic);

ENDcomponent;

componentcounter

PORT(clock:

INSTD_LOGIC;

reset:

instd_logic;

Hold:

instd_logic;

countNum:

BuFFeRINTEGERRANGE0TO90);

ENDcomponent;

componentdtsm

PORT(clk:

inSTD_LOGIC;hold:

instd_logic;

NumA,NumB,NumC,NumD:

inSTD_LOGIC_VECTOR(3downto0);

segout1:

outSTD_LOGIC_VECTOR(6downto0);

led_sel:

outSTD_LOGIC_VECTOR(3downto0));

ENDcomponent;

componentFenwei

PORT

(Numin:

INintegerRANGE0TO55;

NumA,NumB:

OUTIntegerRANGE0to9

);

ENDcomponent;

componentFenwei2

PORT

(Numin:

INintegerRANGE0TO55;

NumC,NumD:

OUTIntegerRANGE0to9

);

ENDcomponent;

componentFreDevider

PORT

(Clkin:

INStd_Logic;

Clkout:

OUTStd_Logic);

ENDcomponent;

signalcp1:

std_logic;

signalnuma1,numb1:

integer;

signalcNum:

integer;

signalND1:

STD_LOGIC_VECTOR(3downto0);

signalNa1:

STD_LOGIC_VECTOR(3downto0);

signalNb1:

STD_LOGIC_VECTOR(3downto0);

signalNC1:

STD_LOGIC_VECTOR(3downto0);

begin

u1:

countrollerportmap(cp1,hold,cNum,numa1,numb1,ra,ga,ya,rb,gb,yb);

u2:

counterportmap(cp1,reset,cNum);

u3:

dtsmportMap(cp,hold,Na1,Nb1,NC1,ND1,s,l);

u4:

FenweiportMap(numa1,Na1,Nb1);

u5:

Fenwei2portmap(numb1,NC1,ND1);

u6:

FreDeviderportmap(cp,cp1);

end;

 

六、系统实现电路

七、设计过程中出现的问题

八、设计体会总结

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

当前位置:首页 > 总结汇报 > 其它

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

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