EDA课程设计基于CPLD的汽车尾灯控制系统Word格式.docx
《EDA课程设计基于CPLD的汽车尾灯控制系统Word格式.docx》由会员分享,可在线阅读,更多相关《EDA课程设计基于CPLD的汽车尾灯控制系统Word格式.docx(23页珍藏版)》请在冰点文库上搜索。
4.1.1设计的汽车状态模块12
4.1.2汽车状态控制的程序代码12
4.2左尾灯控制模块与右尾灯控制模块13
4.2.1左尾灯控制模块13
4.2.2汽车左灯HDL语言如下14
4.2.3设计的右尾灯控制模块15
4.2.4汽车右灯HDL语言如下16
4.3时钟模块17
4.3.1时钟控制模块17
4.3.2周期为2s的时钟源程序18
4.3.3周期为500ms的时钟源程序18
4.4各模块流程图19
5系统的仿真与调试20
5.1汽车状态模块的仿真与分析20
5.2汽车尾灯左灯模块仿真及分析20
5.3汽车尾灯右灯模块仿真及分析21
5.4时钟模块仿真及分析21
5.5整个系统的仿真及分析22
5.6整个顶层设计电路图23
总结23
参考文献24
附图25
1前言
随着科学技术的全面发展,汽车制造工艺得到了不断的进步,使得汽车已经成为现代人们主要的交通工具。
人们了解到它们快捷、快速之于,也同时意识到汽车潜在的安全隐患,所以对具有汽车行驶状况提示作用的汽车尾灯进行研究是非常必要的。
1.1设计的目的
通过该课程设计,让学生掌握EDA的基本方法,熟悉VHDL语言和一种EDA软件(QUARTUSII),并能利用EDA软件设计一个电子技术综合问题,进一步培养学生分析解决工程实际问题的能力,为以后的毕业设计和进行工程实际问题的研究打下设计基础。
1.2设计要求
汽车尾灯左、右各有3个,从中间开始编号,分别用L1、L2、L3,R1、R2、R3表示。
当汽车转向时,按L1→L1L2→L1L2L3→全亮→L1(或R1→R1R2→R1R2R3→全亮→R1)次序循环亮,亮持续为2秒;
当汽车刹车时,所有尾灯同时以2Hz的频率闪烁;
正常行驶时,所有尾灯灭。
输入信号有左、右转向和刹车。
1.3功能分析
从以上设计要求,将本系统分成四个功能设计模块:
(1)汽车状态模块:
该模块接收左转、右转、刹车和正常行驶的控制信号,根据所接受的信号控制左尾灯控制模块和右尾灯控制模块。
(2)左尾灯控制模块:
接受汽车状态模块的控制信号对左边三个尾灯的亮与灭进行控制。
(3)右尾灯控制模块:
接受汽车状态模块的控制信号对右边三个尾灯的亮与灭进行控制。
(4)时钟模块:
由于当汽车转弯时尾灯按照一定顺序循环亮灭,亮持续时间为2s,而刹车时尾灯又以2Hz的频率闪烁,故该模块提供周期为2s和500ms的时钟信号供左尾灯控制模块和右尾灯控制模块控制尾灯的亮灭。
1.4EDA的介绍
1.4.1EDA技术的概念
EDA是电子设计自动化(ElectronicDesignAutomation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
EDA技术就是以计算机为工具,设计者在EDA软件平台上,用硬件描述语言HDL完成设计文件,然后由计算机自动地完成逻辑编译、化简、分割、综合、优化、布局、布线和仿真,直至对于特定目标芯片的适配编译、逻辑映射和编程下载等工作。
1.4.2EDA技术的特点
利用EDA技术进行电子系统的设计,具有以下几个特点:
①用软件的方式设计硬件;
②用软件方式设计的系统到硬件系统的转换是由有关的开发软件自动完成的;
③设计过程中可用有关软件进行各种仿真;
④系统可现场编程,在线升级;
⑤整个系统可集成在一个芯片上,体积小、功耗低、可靠性高。
因此,EDA技术是现代电子设计的发展趋势。
1.4.3EDA设计流程
典型的EDA设计流程如下:
1、文本/原理图编辑与修改。
首先利用EDA工具的文本或图形编辑器将设计者的设计意图用文本或图形方式表达出来。
2、编译。
完成设计描述后即可通过编译器进行排错编译,变成特定的文本格式,为下一步的综合做准备。
3、综合。
将软件设计与硬件的可实现性挂钩,是将软件转化为硬件电路的关键步骤。
4、行为仿真和功能仿真。
利用产生的网表文件进行功能仿真,以便了解设计描述与设计意图的一致性。
5、适配。
利用FPGA/CPLD布局布线适配器将综合后的网表文件针对某一具体的目标器件进行逻辑映射操作,其中包括底层器件配置、逻辑分割、逻辑优化、布局布线。
适配报告指明了芯片内资源的分配与利用、引脚锁定、设计的布尔方程描述情况。
6、功能仿真和时序仿真。
7、下载。
如果以上的所有过程都没有发现问题,就可以将适配器产生的下载文件通过FPGA/CPLD下载电缆载入目标芯片中。
1.5硬件描述语言(VHDL)
1.5.1VHDL的介绍
VHDL(Very-High-SpeedIntegratedCircuitHardwareDescriptionLanguage)主要用于描述数字系统的结构,行为,功能和接口。
除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。
VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可是部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。
在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。
这种将设计实体分成内外部分的概念是VHDL系统设计的基本
1.5.2VHDL语言的特点
1.用VHDL代码而不是用原理图进行设计,意味着整个电路板的模型及性能可用计算机模拟进行验证。
2.VHDL元件的设计与工艺无关,与工艺独立,方便工艺转换。
3.VHDL支持各种设计方法,自顶向下、自底向上或者混合的都可以。
4.可以进行从系统级到逻辑级的描述,即混合描述。
5.VHDL区别于其他的HDL,已形成标准,其代码在不同的系统中可交换建模。
2.总体方案设计
第一种方案:
通过把脉冲电路,开关控制电路,三进制电路,译码与显示驱动电路等模块组合来实现。
首先,通过555定时器构成多谐振荡器产生频率为1hz的脉冲信号,该脉冲信号用于供给双J-K触发器构成的三进制计数器和开关控制电路中的三输入与非门的输入信号。
其次,双J-K触发器构成的三进制计数器产生00,01,10的循环信号,此信号提供左转,右转,停止的原始信号。
最后,左转,右转,停止的原始信号通过6个与非门以及7410提供的高低电位信号,将原始信号分别输入到左,右的3个汽车尾灯上,得到的信号即可输入到发光二极管上,实现所需功能。
这种方案的实现复杂,成本高,调试起来不容易成功,太过繁琐。
第二种方案:
用复杂可编程器件CPLD,用VHDL对汽车尾灯控制电路进行设计,并用QuartusⅡ软件进行CPLD芯片的编译和下载,生成是集成化的数字电路。
这种方案没有传统设计中的接线问题,硬件功能的改变可以通过编程来修改,所以故障率低,可靠性高,而且体积小,体现了EDA技术在数字电路设计中的优越性。
3.protel各电路模块及分析
3.1时钟产生电路部分
时钟产生电路是由有源晶振实现的
图5.1.1时钟电路
3.2电源供应电路部分
此电源供应电路由四个三极管和一个齐纳二极管和电容加上LM2576构成,为总电路提供电源如下图5.2.1。
图5.2.1电源供应电路
LM2576是降压型开关稳压器,LM2576具有非常小的电压调整率和电流调整率,LM2576具有3A的负载驱动能力,LM2576能够输出3.3V、5V、12V、15V的固定电压和电压可调节的可调电压输出方式。
LM2576应用时比较简单且外围元件较少,LM2576内置频率补偿电路和固定频率振荡器。
LM2576系列产品的开关频率为52KHz,所以应用时可以使用小尺寸的滤波元件。
LM2576可以高效的取代一般的三端线性稳压器,LM2576能够充分的减小散热片的面积,LM2576在一些应用条件下甚至可以不使用散热片。
在规定的输入电压和输出负载的条件下,LM2576输出电压的误差范围为±
4%;
振荡器的振荡频率误差范围为±
10%;
典型的待机电流为50μA,芯片内置过流保护电路和过热保护电路。
开关电压调节器LM2576的详细介绍
特点
1,3.3V、5V、12V、15V的固定电压输出和可调节电压输出
2,可调节电压输出的范围为1.23V到30V,其线性调整率
和负载调整率最大可以有±
4%的误差。
3,负载电流达到3A
4,输入电压达到36V
5,只需四个外围元件
6,内置固定频率为52kHz的振荡器
7,高效率
8,内置过热保护电路和过流保护电路
3.3现场可编程门阵列FPGA电路部分
本电路选用的是现场可编程门阵列FPGA,采用的是EPF10K10LC84型号,EPF10K10LC84属于FPGA中FLEX10K系列,如下图5.3.1。
图5.3.15现场可编程门阵列FPGA电路
它是Altera公司生产的很成功的FPGA系列之一。
FLEX10K系列采用重复可构造的CMOSSRAM工艺,把连续的快速通道互连与独特的嵌入式阵列结构相结合,同时也结合了众多可编程器件的优点来完成普通门阵列的宏功能。
每个FLEX10K器件还包括一个嵌入式阵列和一个逻辑阵列,它能让设计人员轻松地开发出集储存器、数字信号处理器及特殊逻辑等强大功能于一身的芯片。
此外,FLEX10K所具有的多电压功能可以全面支持以不同电压工作的产品,同时它还备有多款封装供设计者选择。
3.4JTAG下载电路部分
图5.4.1JTAG下载电路
JTAG也是一种国际标准测试协议(IEEE1149.1兼容),主要用于芯片内部测试。
现在多数的高级器件都支持JTAG协议,如DSP、FPGA器件等。
标准的JTAG接口是4线:
TMS、TCK、TDI、TDO,分别为模式选择、时钟、数据输入和数据输出线。
相关JTAG引脚的定义为:
TCK为测试时钟输入;
TDI为测试数据输入,数据通过TDI引脚输入JTAG接口;
TDO为测试数据输出,数据通过TDO引脚从JTAG接口输出;
TMS为测试模式选择,TMS用来设置JTAG接口处于某种特定的测试模式;
TRST为测试复位,输入引脚,低电平有效。
GND
TI还定义了一种叫SBW-JTAG的接口,用来在引脚较少的芯片上通过最少的利用引脚实现JTAG接口,它只有两条线,SBWTCK,SBWTDIO。
实际使用时一般通过四条线连接,VCC,SBWTCK,SBTDIO,GND,这样就可以很方便的实现连接,又不会占用大量引脚。
JTAG最初是用来对芯片进行测试的,基本原理是在器件内部定义一个TAP(TestAccessPort测试访问口)通过专用的JTAG测试工具对进行内部节点进行测试。
JTAG测试允许多个器件通过JTAG接口串联在一起,形成一个JTAG链,能实现对各个器件分别测试。
现在,JTAG接口还常用于实现ISP(In-SystemProgrammable;
在线编程),对FLASH等器件进行编程。
JTAG编程方式是在线编程,传统生产流程中先对芯片进行预编程现再装到板上因此而改变,简化的流程为先固定器件到电路板上,再用JTAG编程,从而大大加快工程进度。
JTAG接口可对PSD芯片内部的所有部件进行编程。
在硬件结构上,JTAG接口包括两部分:
JTAG端口和控制器。
与JTAG接口兼容的器件可以是微处理器(MPU)、微控制器(MCU)、PLD、CPL、FPGA、ASIC或其它符合IEEE1149.1规范的芯片。
IEEE1149.1标准中规定对应于数字集成电路芯片的每个引脚都设有一个移位寄存单元,称为边界扫描单元BSC。
它将JTAG电路与内核逻辑电路联系起来,同时隔离内核逻辑电路和芯片引脚。
由集成电路的所有边界扫描单元构成边界扫描寄存器BSR。
边界扫描寄存器电路仅在进行JTAG测试时有效,在集成电路正常工作时无效,不影响集成电路的功能。
3.5发光显示部分
发光显示部分由六个发光二极管组成
图5.5.1发光显示部分
LED(LightEmittingDiode),发光二极管,是一种固态的半导体器件,它可以直接把电转化为光。
LED的心脏是一个半导体的晶片,晶片的一端附在一个支架上,一端是负极,另一端连接电源的正极,使整个晶片被环氧树脂封装起来。
半导体晶片由两部分组成,一部分是P型半导体,在它里面空穴占主导地位,另一端是N型半导体,在这边主要是电子。
但这两种半导体连接起来的时候,它们之间就形成一个P-N结。
当电流通过导线作用于这个晶片的时候,电子就会被推向P区,在P区里电子跟空穴复合,然后就会以光子的形式发出能量,这就是LED发光的原理。
而光的波长也就是光的颜色,是由形成P-N结的材料决定的。
4.各单元模块的设计
4.1汽车状态模块
4.1.1设计的汽车状态模块
汽车状态模块如图3.1.1所示,源程序如下,汽车状态模块PRECONTROL。
图3.1.1汽车状态模块PRECONTROL
其中LEFT、RIGHT、STOP分别表示左转、右转和刹车信号,对应的输出引脚LFT、RIT、LR分别表示左有效、右有效和刹车有效。
真值表如表2.1.1所示:
信号
LEFT
RIGHT
STOP
LFT
RIT
LR
意义
逻辑状态
正常行驶
1
左转弯
右转弯
刹车
表3.1.1汽车状态控制信号与输出信号真值表
4.1.2汽车状态控制的程序代码
汽车状态控制的程序如下
libraryieee;
useieee.std_logic_1164.all;
entityprecontrolis
port(
left:
instd_logic;
right:
stop:
lft:
outstd_logic;
rit:
lr:
outstd_logic);
endprecontrol;
architectureoneofprecontrolis
begin
process(left,right,stop)
variablecondition:
std_logic_vector(2downto0);
begin
condition:
=left&
right&
stop;
caseconditionis
when"
000"
=>
lft<
='
0'
;
rit<
lr<
--汽车正常行驶
100"
1'
--汽车左转弯
010"
--汽车右转弯
001"
--汽车刹车
whenothers=>
null;
endcase;
endprocess;
endone;
4.2左尾灯控制模块与右尾灯控制模块
4.2.1左尾灯控制模块
设计的左尾灯控制模块如图3.2.1所示,源程序见下
图3.2.1左尾灯控制模块LEFTCONTROL
对各输入与输出引脚的说明如下:
CLK:
接受时钟信号,用于尾灯的顺序循环亮灭。
CLK将接收两种不同频率的时钟信号即周期为2s和500ms中的一种,具体接收哪一种由该模块的时钟使能输出信号CLK2SEN和CLK500MSEN决定。
EN:
与汽车状态模块PRECONTROL的LFT引脚连接,用于使能该左尾灯控制模块。
LR:
汽车刹车输入信号,与汽车状态控制模块PRECONTROL的LR引脚相连。
由于
当汽车左转弯、正常行驶和刹车时,该模块EN引脚都将接收到低电平,故而需要通过判断LR和EN的引脚电平才能判断汽车当前是处于刹车状态还是右转弯或正常行驶状态。
L2、L1、L0:
汽车左边的三个尾灯控制信号。
CLK2SEN、CLK500MSEN:
时钟的选择信号。
这两个引脚将根据汽车当前所处的状态使能相应的时钟。
当汽车出处于左转弯时,CLK2SEN输出高电平,CLK500MSEN输出低电平,此时CLK将接收到周期为2s的时钟信号以满足按L1→L1L2→L1L2L3→全亮→L1依次序循环灭,再依次亮灭,亮持续为2s对时钟的需要;
当汽车处于刹车状态时,CLK2SEN输出低电平,CLK500MSEN输出高电平,此时CLK将接收到周期为500ms的时钟信号以满足汽车刹车是所有尾灯以2Hz的频率闪烁的设计要求。
4.2.2汽车左灯HDL语言如下
libraryieee;
useieee.std_logic_unsigned.all;
entityleftcontrolis
clk:
en:
--汽车左转弯模块使能信号输入
--汽车刹车信号输入,高有效
l2,l1,l0:
--三个左尾灯控制信号输出
clk2sen,clk500msen:
--2s和500ms时钟使能信号输出
endentityleftcontrol;
architectureoneofleftcontrolis
signalclkop:
std_logic;
clkop<
=clk;
com1:
process(en,clk,lr)
variabletmp:
variableclken:
std_logic_vector(1downto0);
iflr='
thentmp:
=clkop&
clkop&
clkop;
clken:
="
01"
--汽车刹车,周期为500ms的时钟使能
elsifclk'
eventandclk='
then
ifen='
then--汽车左转弯
iftmp="
111"
110"
10"
--周期为2s的时钟使能
elsiftmp="
--在左转弯时灯全灭后再全息亮
elsetmp:
=tmp(1downto0)&
'
-
endif;
endif;
endif;
r2<
=tmp
(2);
l1<
=tmp
(1);
l0<
=tmp(0);
clk2sen<
=clken
(1);
clk500msen<
=clken(0);
endprocess;
4.2.3设计的右尾灯控制模块
右尾灯控制模块如图3.2.4所示,源程序见下
图3.2.4右尾灯控制模块RIGHTCONTROL
右尾灯控制模块RIGHTCONTROL各引脚功能与左尾灯控制模块LEFTCONTROL各引脚功能相似,这里不再详述。
4.2.4汽车右灯HDL语言如下
entityrightcontrolis
--汽车右转弯模块使能信号输入
--汽车刹车信号输入,高有效
r2,r1,r0:
--三个右尾灯控制信号输出
--2s和500ms时钟使能信号输出
endentityrightcontrol;
architectureoneofrightcontrolis
ifen='
then--汽车右转弯
iftmp="
elsiftmp="
="
--在右转弯时灯全灭后再全息亮
elsetmp:
--灯每隔2s亮一个
r1<
r0<
4.3时钟模块
4.3.1时钟控制模块
2s时钟模块和500ms时钟模块分别如图3.3.1和图3.3.2所示:
图3.3.12s时钟模TIMER2S图3.3.2500ms时钟模块TIMER500MS
左尾灯控制模块LEFT通过CLK2SEN和CLK500MSEN来控制该模块CLK接收到的时钟信号的实现原理如下图3.3.3所示:
图3.3.3时钟选择实现原理图
当汽车左转弯时,左尾灯控制模块LEFTCONTROL使能,此时该模块CLK2SEN输出高电平,CLK500MSEN输出低电平,并分别与TIMER2S和TIMER500MS相与,则TIMER500MS相当于被禁止,后经或门连接至该LEFTCONTROL模块的CLK引脚,故而CLK将接收到TIMER2S发出的周期为2s的时钟信号。