有关汽车尾灯的完整数字逻辑课程设计报告.docx

上传人:b****8 文档编号:9574904 上传时间:2023-02-05 格式:DOCX 页数:15 大小:75.52KB
下载 相关 举报
有关汽车尾灯的完整数字逻辑课程设计报告.docx_第1页
第1页 / 共15页
有关汽车尾灯的完整数字逻辑课程设计报告.docx_第2页
第2页 / 共15页
有关汽车尾灯的完整数字逻辑课程设计报告.docx_第3页
第3页 / 共15页
有关汽车尾灯的完整数字逻辑课程设计报告.docx_第4页
第4页 / 共15页
有关汽车尾灯的完整数字逻辑课程设计报告.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

有关汽车尾灯的完整数字逻辑课程设计报告.docx

《有关汽车尾灯的完整数字逻辑课程设计报告.docx》由会员分享,可在线阅读,更多相关《有关汽车尾灯的完整数字逻辑课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。

有关汽车尾灯的完整数字逻辑课程设计报告.docx

有关汽车尾灯的完整数字逻辑课程设计报告

石家庄经济学院

信息工程学院

数字逻辑课程设计报告

题目汽车尾灯控制器的设计

成绩

2010年6月

1.功能描述02

2.开发工具选择02

3.设计方案02

4.模块描述04

5.VHDL实现07

6.调试仿真12

7.课程设计回顾总结13

参考文献14

附录14

一、功能描述

设计功能描述:

存在6盏汽车尾灯(汽车尾部左、右各3盏),用两个开关作为转弯和刹车控制信号(一个开关控制右转弯,另一个开关控制左转弯),用一个开关作为汽车车锁开启控制,打开汽车时车灯闪烁3秒钟,才能行驶。

当汽车往前行驶时(此时两个开关都未接通),6盏灯全灭。

当汽车转弯时,若右转弯(即右转开关接通),右边的3盏尾灯从左至右顺序亮灭,左边3盏灯全灭;若左转弯(即左转开关接通),左边的3盏尾灯从右至左顺序亮灭,右边3盏灯全灭。

当左、右两个开关同时接通时,6盏尾灯同时明、暗闪烁。

二、开发工具选择

采用硬件描述语言VHDL进行描述,依靠计算机,借助EDA开发工具,实现系统功能。

三、设计方案

(1)、以Opencarcar作为总控制开关,当Opencarcar为1时,汽车解锁,汽车启动,此时车灯闪烁以两个开关L、R为控制信号,分别控制汽车的行驶、刹车、左转以及右转。

如下图:

当总控制开关Opencarcar为1,汽车启动,车灯闪烁3秒。

车灯

脉冲

L[0]

L[1]

L[2]

R[0]

R[1]

R[2]

1

0

0

0

0

0

0

2

1

1

1

1

1

1

(2)、当总控制开关Opencarcar为1,汽车向前行驶,LR=00,6盏灯全灭,即L[0]L[1]L[2]=000,R[0]R[1]R[2]=000;

如下图:

当总控制开关Opencarcar为0,汽车向前行驶时,车灯全灭。

车灯

脉冲

L[0]

L[1]

L[2]

R[0]

R[1]

R[2]

1

0

0

0

0

0

0

2

0

0

0

0

0

0

(3)、当总控制开关Opencar为1,汽车刹车,LR=11,6盏灯闪烁,即L[0]L[1]L[2]=000←->111,R[0]R[1]R[2]=000←->111;

如下图:

当总控制开关Opencarcar为0,汽车刹车时,车灯闪烁。

车灯

脉冲

L[0]

L[1]

L[2]

R[0]

R[1]

R[2]

1

0

0

0

0

0

0

2

1

1

1

1

1

1

(4)、当总控制开关Opencarcar为1,汽车左转,LR=10,左边的3盏尾灯从右至左顺序亮灭,右边3盏灯全灭;

如下图:

当总控制开关Opencarcar为1,汽车左转时左边的3盏尾灯从右至左顺序亮灭,右边3盏灯全灭。

车灯

脉冲

L[0]

L[1]

L[2]

R[0]

R[1]

R[2]

1

0

0

0

0

0

0

2

0

0

1

0

0

0

3

0

1

0

0

0

0

4

1

0

0

0

0

0

(5)、当总控制开关Opencarcar为1,汽车右转,LR=01,右边的3盏尾灯从左至右顺序亮灭,左边3盏灯全灭;

如下图:

当总控制开关Opencarcar为1,汽车右转时右边的3盏尾灯从左至右顺序亮灭,左边3盏灯全灭。

车灯

脉冲

L[0]

L[1]

L[2]

R[0]

R[1]

R[2]

1

0

0

0

0

0

0

2

0

0

0

1

0

0

3

0

0

0

0

1

0

4

0

0

0

0

0

1

(6)、底层文件描述闪烁过程

用单独的实体实现计时模块,实现车灯闪烁和亮灭要求亮0.5秒灭1秒。

四、模块描述

总模块1:

顶层文件设计,实现汽车开启时解锁,车灯闪烁3秒;汽车向前行驶,车灯全灭,汽车刹车时车灯闪烁,汽车转弯时相应车灯闪烁.

总模块2:

底层文件设计,实现汽车开启时,解锁,车灯闪烁3秒.用模6计数原理.

IF(CP'EVENTANDCP='0')THEN--下降沿出触发

IFOpencarcar='1'THEN--汽车解锁,车灯闪烁。

IFQ<5THEN

caseQis

when"000"=>

L<="111";

R<="111";

when"001"=>

L<="000";

R<="000";

when"010"=>

L<="000";

R<="000";

when"011"=>

L<="111";

R<="111";

when"100"=>

L<="000";

R<="000";

when"101"=>

L<="000";

R<="000";

whenOTHERS=>

Q<="101";

endcase;

Q<=Q+1;

ELSEQ<="000";

ENDIF;

ENDIF;

ENDIF;

总模块3:

底层文件设计,实现汽车锁定,汽车行驶,车灯全灭,汽车刹车,车灯闪烁,汽车转弯车灯相应闪烁.

模块1:

当总控制开关Opencarcar为1,汽车向前行驶,LR=00,6盏灯全灭。

IFadder=”00”THEN

L<=”000”;

R<=”000”;

模块2:

总开关Opencarcar为1时,汽车刹车,LR=11,6盏灯闪烁。

ELSIFOpencarcar='0'ANDadder="11"THEN--汽车刹车

IFQ<5THEN

caseQis

when"000"=>

L<="111";

R<="111";

when"001"=>

L<="000";

R<="000";

when"010"=>

L<="000";

R<="000";

when"011"=>

L<="111";

R<="111";

when"100"=>

L<="000";

R<="000";

when"101"=>

L<="000";

R<="000";

whenOTHERS=>

Q<="000";

endcase;

Q<=Q+1;

ELSEQ<="000";

ENDIF;

模块3:

总开关Opencarcar为1时,汽车左转,LR=10,左边的3盏尾灯从右至左顺序亮灭,右边3盏灯全灭。

ifL="000"then

L<="001";

R<="000";

elsif(L="001")then

L<="010";

R<="000";

elsif(L="010")then

L<="100";

R<="000";

elseL<="001";R<="000";

endif;

模块4:

总开关Opencarcar为1时,汽车右转,LR=01,右边的3盏尾灯从左至右顺序亮灭,左边3盏灯全灭。

ifR="000"then

R<="100";

L<="000";

elsif(R="100")then

R<="010";

L<="000";

elsif(R="010")then

R<="001";

L<="000";

elseR<="100";L<="000";

endif;

5、VHDL实现

--利用原件例化方法

--顶层文件,汽车尾灯控制系统。

LIBRARYIEEE;--汽车尾灯控制器设计

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCARLIGHTIS--实体:

一个总控制开关,两个信号控制开关,两个输出信号

PORT(CP:

INSTD_LOGIC;

Opencarcar:

INSTD_LOGIC;

Lift,Right:

INSTD_LOGIC;

L:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

R:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

Q:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

END;

ARCHITECTURECARLIGHT1OFCARLIGHTIS

COMPONENTOpencarmond6--例化说明,汽车解锁,车灯闪烁,计时模块

PORT(CP:

INSTD_LOGIC;

Opencarcar:

INSTD_LOGIC;

L:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

R:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

Q:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

COMPONENTStopCarmond6--例化说明,汽车刹车,车灯闪烁,计时模块

PORT(CP:

INSTD_LOGIC;

Opencarcar:

INSTD_LOGIC;

Lift,Right:

INSTD_LOGIC;

L:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

R:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

Q:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

ENDCOMPONENT;

BEGIN

U1:

Opencarmond6PORTMAP(CP=>CP,Opencarcar=>Opencarcar,L=>L,R=>R,Q=>Q);

U2:

StopCarmond6PORTMAP(CP=>CP,Opencarcar=>Opencarcar,Lift=>Lift,Right=>Right,L=>L,R=>R,Q=>Q);

END;

--底层实体,汽车解锁,车灯闪烁,计时模块

--底层文件,模6计时器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYOpencarmond6IS

PORT(CP:

INSTD_LOGIC;

Opencarcar:

INSTD_LOGIC;

L:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

R:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

Q:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

END;

ARCHITECTUREONEOFOpencarmond6IS

BEGIN

PROCESS(CP)

BEGIN

IF(CP'EVENTANDCP='0')THEN--下降沿出触发

IFOpencarcar='1'THEN--汽车解锁,车灯闪烁。

IFQ<5THEN

caseQis

when"000"=>

L<="111";

R<="111";

when"001"=>

L<="000";

R<="000";

when"010"=>

L<="000";

R<="000";

when"011"=>

L<="111";

R<="111";

when"100"=>

L<="000";

R<="000";

when"101"=>

L<="000";

R<="000";

whenOTHERS=>

Q<="101";

endcase;

Q<=Q+1;

ELSEQ<="000";

ENDIF;

ENDIF;

ENDIF;

ENDPROCESS;

END;

--底层实体,汽车控制系统实现汽车行驶,转弯,汽车刹车,车灯闪烁,计时模块

--底层文件,模6计时器

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYStopCarmond6IS

PORT(CP:

INSTD_LOGIC;

Opencarcar:

INSTD_LOGIC;

Lift,Right:

INSTD_LOGIC;

L:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

R:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0);

Q:

BUFFERSTD_LOGIC_VECTOR(2DOWNTO0));

END;

ARCHITECTUREONE1OFStopCarmond6IS

SIGNALadder:

STD_LOGIC_VECTOR(1DOWNTO0);

BEGIN

adder<=Lift&Right;--中间信号

PROCESS(adder,CP,Q)--进程

BEGIN

IF(CP'EVENTANDCP='0')THEN--下降沿出触发

IFOpencarcar='1'ANDadder="00"THEN--汽车向前行驶

L<="000";

R<="000";

ELSIFOpencarcar='1'ANDadder="11"THEN--汽车刹车

IFQ<5THEN

caseQis

when"000"=>

L<="111";

R<="111";

when"001"=>

L<="000";

R<="000";

when"010"=>

L<="000";

R<="000";

when"011"=>

L<="111";

R<="111";

when"100"=>

L<="000";

R<="000";

when"101"=>

L<="000";

R<="000";

whenOTHERS=>

Q<="000";

endcase;

Q<=Q+1;

ELSEQ<="000";

ENDIF;

ELSIFOpencarcar='1'ANDadder="10"THEN--汽车左转

ifL="000"then

L<="001";

R<="000";

elsif(L="001")then

L<="010";

R<="000";

elsif(L="010")then

L<="100";

R<="000";

elseL<="001";R<="000";

endif;

ELSIFOpencarcar='1'ANDadder="01"THEN--汽车右转

ifR="000"then

R<="100";

L<="000";

elsif(R="100")then

R<="010";

L<="000";

elsif(R="010")then

R<="001";

L<="000";

elseR<="100";L<="000";

endif;

ENDIF;

ENDIF;

ENDPROCESS;

END;

六、调试仿真

七、课程设计回顾总结

通过这次设计,进一步加深了对EDA的了解,对它有了更加浓厚的兴趣。

特别是当每一个子模块编写调试成功时,心里特别的开心。

但是在编写程序时,遇到了不少问题,首先由于自己对于汽车的发动过程不是很了解,所以汽车解锁和汽车锁定方面存在误区,程序一直运行不成功,在上网查询汽车操作以及在同学帮助下,在细心的检查下,终于找出了错误,排除困难后,程序编译就通过了,仿真文件基本符合这次实验要求。

这次试验总的来说,进行的还算顺利,但在调试过程中,也遇到了一些自己不能解决的问题,通过请教同学,我明白解决的办法,在这次试验中,提高了整体设计和构思的能力,原来在学习过程中不明白的问题,在这次实习中通过自己操作有了进一步的理解,在解决困难的过程中,有点小小的成就感,终于觉得平时所学的知识有了实用的价值,达到了理论和实际相结合的目的,不仅学到了不少知识,而且锻炼了自己的能力,使自己对以后的路有了更加清楚的认识,同时,对未来有了更多的信心。

参考文献

张兴忠数字逻辑和数字系统科学出版社

李景华可编程逻辑器件和EDA技术东北大学出版社

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

当前位置:首页 > 总结汇报 > 学习总结

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

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