资源描述
※※※※※※※※※
※※
※※
※※
※※※※※※※※※
级学生
EDA课程设计
EDA课程设计报告书
课题名称
汽车尾灯控制器
姓 名
学 号
院 系
专 业
指导教师
一、 设计任务及要求:
设计一个汽车尾灯控制器。要求:汽车尾部左右两侧各有多盏指示灯。汽车在夜间行驶时,左右两侧有指示灯同时一直亮,供照明使用汽车右转弯时,右侧的一盏指示灯亮。汽车刹车时,左右两侧的一盏指示灯同时亮。汽车左转弯时,左侧的一盏指示灯亮。汽车正常行驶时指示灯都不亮。
指导教师签名:
年 月 日
二、指导教师评语:
指导教师签名:
年 月 日
三、成绩
验收盖章
年 月 日
汽车尾灯控制器的设计
(湖南城市学院物理与电信工程系电子信息工程专业,湖南益阳,41300)
1、设计的目的
本次设计的目的就是通过实践深入理解状态机原理,了解EDA技术并掌握VHDL硬件描述语言的设计方法和思想。通过学习的VHDL语言结合电子电路的设计知识理论联系实际,掌握所学的课程知识和基本单元电路的综合设计应用。通过对实用汽车尾灯控制器的设计,巩固和综合运用所学知识,提高分析、解决EDA技术实际问题的独立工作能力。
2、设计的内容及要求
2.1设计内容
设计一个汽车尾灯控制器,利用EDA软件(Quartus II)进行编译及仿真,设计输入可采用VHDL硬件描述语言输入法和原理图输入法,通过仿真查看设计的可行性,因条件有限,只能进行简单的仿真实验。
2.2设计要求
(1)汽车尾部左右两侧各有多盏指示灯。
(2)汽车正常行驶时指示灯都不亮。
(3)汽车右转弯时,右侧的一盏指示灯亮。
(4)汽车左转弯时,左侧的一盏指示灯亮。
(5)汽车刹车时,左右两侧的一盏指示灯同时亮。
(6)汽车在夜间行驶时,左右两侧有指示灯同时一直亮,供照明使用。
3、整体设计方案
3.1汽车尾灯控制器的工作原理
汽车尾灯控制器就是一个状态机的实例。当汽车正常行驶时所有指示灯都不亮;当汽车向右转弯时,汽车右侧的指示灯ldright亮;当汽车向左侧转弯时,汽车左侧的指示灯ldleft亮;当汽车刹车时,汽车右侧的指示灯ldbrake1和汽车左侧的指示灯ldbrake2同时亮;当汽车在夜间行驶时,汽车右侧的指示灯ldnight1和汽车左侧的指示灯ldnight2同时一直亮;当于大雾天行驶时右侧指示灯ldfoggy1和左侧指示灯ldfoggy2同时亮。
通过设置系统的输入信号:系统时钟信号clk,汽车左转弯控制信号left,汽车右转弯控制信号right,刹车信号brake,夜间行驶信号night,雾灯信号foggy和系统的输出信号:汽车左侧4盏指示灯ldleft,dbrake1,dnight1,dfoggy1和汽车右侧4盏指示灯ldright,ldbrake2,ldnight2,ldfoggy2实现以上功能。
系统的整体组装设计原理如图所示:
汽车行驶信号
主控模块
左灯控制模块
右灯控制模块
显示
时钟
图3.1系统设计整体框图
3.2方案选择与论证
根据系统设计要求,系统设计采用自顶向下的设计方法,顶层设计采用原理图设计方案,它是由时钟分频模块、汽车尾灯主控模块、左边灯控制模块、右边灯控制模块四部分组成。
3.3系统设计详述
系统的输入信号包括:系统时钟信号CLK,汽车左转弯控制信号LEFT,汽车右转弯控制信号RIGHT,刹车信号BRAKE,夜间行驶信号NIGHT。
系统的输入信号包括:汽车左侧4 盏指示灯LLED1,LLED2,LLED3,LLED4和汽车右侧4 盏指示灯RLED1,RLED2,RLED3,RLED4。
当汽车正常行驶时所有的指示灯都不亮,当汽车向左转时,汽车左边的指示灯LLED1亮,当汽车向右转时,汽车右边的指示灯RLED1亮,当汽车刹车时,左右的LLED2、RLED2亮,当汽车夜间行驶时,汽车左右的LLED3、LLED4、RLED3 、RLED4一直亮。
4、模块电路设计
4.1 汽车尾灯主控模块设计
该模块用于对汽车尾灯进行整体控制,当输入为左转信号时,输出左侧灯控制信号;当输入为右转信号时,输出右侧灯控制信号;当同时输入LEFT和RIGHT信号时,输出错误控制信号。当输入为刹车信号时,输出刹车控制信号;当输入为夜间行驶信号时,输出为夜间行驶控制信号。
主控模块功能实现源程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY CTRL IS
PORT(LEFT,RIGHT,BRAKE,NIGHT: IN STD_LOGIC;
LP,RP,LR,BRAKE_LED,NIGHT_LED: OUT STD_LOGIC);
END ENTITY CTRL;
ARCHITECTURE one OF CTRL IS
BEGIN
NIGHT_LED<=NIGHT;
BRAKE_LED<=BRAKE;
PROCESS(LEFT,RIGHT)
VARIABLE TEMP:STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN
TEMP:=LEFT&RIGHT;
CASE TEMP IS
WHEN "00"=>LP<='0';RP<='0';LR<='0'; --当汽车直行时,左右灯都不亮
WHEN "01"=>LP<='0';RP<='1';LR<='0'; --当汽车右拐时,右拐指示灯亮
WHEN "10"=>LP<='1';RP<='0';LR<='0'; --当汽车左拐时,左指示灯亮
WHEN OTHERS=>LP<='0';RP<='0';LR<='1'; --当汽车刹车时,左右灯都亮
END CASE;
END PROCESS;
END;
原件封装图如下
图4.1.1主控模块封装图
RIGHT:右转信号;
LEFT:左转信号;
BRAKE:刹车信号;
NIGHT:夜间行驶信号;
LP:左侧灯控制信号;
RP:右侧灯控制信号;
LR:错误控制信号;
BRAKE_LED:刹车控制信号;
NIGHT_LED:夜间行驶控制信号;
主控模块仿真波形图
图4.1.2主控模块仿真波形图
4.2左边灯控制模块
本模块用于控制左侧灯的亮、灭和闪烁情况,当时钟上升沿信号和左侧灯控制信号或刹车控制信号或夜间行驶信号同时出现时,左侧相应的灯亮或出现闪烁。当错误控制信号出现时,LD1灯不亮
左边灯控制模块封装图
图4.2.1左边灯控制模块封装图
CLK:时钟控制信号;
LP:左侧灯控制信号;
LR:错误控制信号;
BRAKE:刹车控制信号;
NIGHT:夜间行驶控制信号;
LEDL:左侧LD1灯控制信号;
LEDB:左侧LD2灯控制信号;
LEDN:左侧LD3灯控制信号;
左边灯控制模块仿真波形图
图4.2.2左边灯控制模块仿真波形图
左边灯控制模块功能实现源程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY LC IS
PORT(CLK,LP,LR,BRAKE,NIGHT: IN STD_LOGIC;
LP,LR,BRAKE,NIGHT: IN STD_LOGIC;
LEDL,LEDB,LEDN: OUT STD_LOGIC);
END ENTITY LC;
ARCHITECTURE ART OF LC IS
BEGIN
LEDB<=BRAKE;
LEDN<=NIGHT;
PROCESS(CLK,LP,LR)
BEGIN
IF CLK'EVENT AND CLK='1' THEN --时钟上升沿有效
IF(LR='0') THEN --没有刹车信号时
IF(LP='0')THEN --没有左拐信号时
LEDL<='0'; --左信号灯不亮
ELSE --相反情况
LEDL<='1';
END IF;
ELSE
LEDL<='0';
END IF;
END IF;
END PROCESS;
END ARCHITECTURE ART;
4.3右边灯控制模块
本模块描述用于控制右侧灯的亮、灭和闪烁情况,当时钟上升沿信号和右侧灯控制信号或刹车控制信号或夜间行驶信号同时出现时,右侧相应的灯亮或出现闪烁。当错误控制信号出现时,RD1灯不亮。
右边灯控制模块封装图
图4.3.1右边灯控制模块封装图
CLK:时钟控制信号;
RP:右侧灯控制信号;
LR:错误控制信号;
BRAKE:刹车控制信号;
NIGHT:夜间行驶控制信号;
LEDR:右侧RD1灯控制信号;
LEDB:右侧RD2灯控制信号;
LEDN:右侧RD3灯控制信号;
右边灯控制模块仿真波形图
图4.3.2右边灯控制模块仿真波形图
右边灯控制模块功能实现源程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY RC IS
PORT(CLK,RP,LR,BRAKE,NIGHT: IN STD_LOGIC;
LEDR,LEDB,LEDN: OUT STD_LOGIC);
END ENTITY RC;
ARCHITECTURE ART OF RC IS
BEGIN
LEDB<=BRAKE;
LEDN<=NIGHT;
PROCESS(CLK,RP,LR)
BEGIN
IF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿
IF(LR='0') THEN
IF(RP='0') THEN
LEDR<='0';
ELSE
LEDR<='1';
END IF;
ELSE
LEDR<='0';
END IF;
END IF;
END PROCESS;
END ARCHITECTURE ART;
4.4时钟分频模块
这块的功能是对左右两边的LLED1、RLED1的闪烁时间间隔,以CLK为输入信号, CP为输出信号,在程序中定义一个八位节点信号COUNT来放计数值,当CLK的上升沿到来时就开始计数,最后将COUNT(3)给CP,实现对CLK的八分频。
再将CP的电平信号分别和LEDL、LEDR电平与,最后用输出的电平来控制汽车左右的LLED1、RLED1,实现左右转的指示功能。
时钟分频模块元件封装图
图4.4.1时钟分频模块封装图
时钟分频模块仿真波形图
图4.4.2时钟分频模块仿真波形图
时钟分频模块功能实现源程序如下
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY shizhong IS
PORT(CLK: IN STD_LOGIC; --时钟输入
CP: OUT STD_LOGIC);
END ENTITY shizhong;
ARCHITECTURE ART OF shizhong IS
SIGNAL COUNT:STD_LOGIC_VECTOR(7 DOWNTO 0);
BEGIN
PROCESS(CLK)
BEGIN
IF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿
COUNT<=COUNT+1;
END IF;
END PROCESS;
CP<=COUNT(3); --输出第五位
END ARCHITECTURE ART;
4.5总体功能原理图设计
4.5.1总体功能原理图
图4.5.1总体功能原理图
4.5.2顶层文件源程序如下
Library ieee;
Use ieee.std_logic_1164.all;
Use ieee.std_logic_unsigned.all;
Entity tp is
Port(clk:in std_logic;
Left:in std_logic;
Right:in std_logic;
Brake:in std_logic;
Night:in std_logic;
Ld1,ld2,ld3:out std_logic;
Rd1,rd2,rd3:out std_logic);
End;
Architecture bh of tp is
Component sz is
Port(clk:in std_logic;
Cp:out std_logic);
End component;
Component ctrl is
Port(left,right,brake,night:in std_logic;
Lp,rp,lr,brake_led,night_led:out std_logic);
End component;
Component lc is
Port(clk,lp,lr,brake,night:in std_logic;
Ledl,ledb,ledn:out std_logic);
End component;
Component rc is
Port(clk,rp,lr,brake,night:in std_logic;
Ledr,ledb,ledn:out std_logic);
End component;
Signal tmp0,tmp1,tmp2,tmp3,tmp4:std_logic;
Signal err0,err1,err2,err3,err4,err5:std_logic;
signal bm:std_logic;
Begin
U1:sz port map(clk,bm);
U2:ctrl port map(left,right,brake,night,tmp0,tmp1,tmp2,tmp3,tmp4);
U3:lc port map(clk,tmp0,tmp2,tmp3,tmp4,err0,err1,err2);
U4:rc port map(clk,tmp1,tmp2,tmp3,tmp4,err3,err4,err5);
Ld1<=err0 and bm;
Ld2<=err1;
Ld3<=err2;
Rd1<=err3 and bm;
Rd2<=err4;
Rd3<=err5;
End;
4.6整体功能仿真波形图
图4.6.1整体功能仿真波形图
分析整体仿真图:
输入刹车信号一直为高电平,输出LD2灯和RD2灯也为长亮;左转信号为高电平时,LD1灯闪烁,右转信号为高电平时,RD1灯闪烁;当左转信号和右转信号同时为高电平时,LD1灯和RD1灯都不亮;夜间行驶信号为高电平时,LD3灯和RD3灯同时亮。波形仿真结果满足预期的功能。
5.设计总结
通过本次课程设计,我们对EDA技术有了更深的了解,初步学会了采用自顶向下的系统设计方法设计系统,并熟练掌握了利用VHDL语言进行简单的电路模块设计。此外,我们还进一步熟悉了QuartusII这款软件的使用,深刻体会到了用软件实现硬件设计的便捷与优越。
本次课程设计不仅培养了我们实际操作能力,也培养了我们灵活运用课本知识,理论联系实际,分析问题和解决问题的能力。它不仅仅是一个学习新知识新方法的好机会,同时也是对我所学知识的一次综合的检验和复习,使我明白了自己的缺陷所在,从而查漏补缺。
本设计采用自顶向下设计方法,底层为一些具有独立功能的小模块,先完成小模块的设计,再将这些小模块合到一起完成顶层文件的设计。从局部到整体,不仅使得系统设计的思路清晰明了,减少了错误的产生,更方便了程序的调试以及系统功能的扩充。在设计过程中,能与同学相互交流讨论,不仅降低了设计难度,缩短了设计周期,更是进一步培养了我们的团队协助精神。
在此次设计过程中,不仅要求我们掌握扎实的理论知识,分析问题能从根本原理出发,联系实际解决问题,还要求我们要有耐心,毅力及细心。稍有不慎,一个小小的错误就会导致结果的不正确,而对错误的检查更要求我们要有足够的耐心,反复调试,直到程序顺利通过。
这次设计中我也遇到了一些问题,但通过相关资料的查询,在老师的指导和同学们的帮助下,都顺利得以解决。这些经历使我得以积累了一定的经验,相信对以后学习设计工作也会有一定的帮助!
6.参考文献
【1】邹彦、庄严等编.EDA技术与数字系统设计.北京:电子工业出版社,2008
【2】张庆双主编.实用电子电路200例.北京:机械工业出版社, 2005
【3】赵世强、许杰等编.电子电路EDA技术.西安:西安电子科技大学出版社,2000
【4】清华大学电子学教研组编.余孟尝主编.数字电子技术.第三版.北京:高等教育出版社,2006
【5】黄仁欣.EDA技术实用教程.北京:清华大学出版社,2006
【6】江国强.EDA技术与应用.北京:电子工业出版社,2004
展开阅读全文