《可编程器件》课程设计报告课题:汽车尾灯控制器设计班级学号学生姓名专业系别指导老师淮阴工学院电子与电气工程学院2014年11月一、设计目的《可编程器件》课程设计是时一项重要的实践性教育环节,是学生在校期间必须接受的一项工程训练。在课程设计过程中,在教师指导下,运用工程的方法,通过一个简单课题的设计练习,可使学生通过综合的系统设计,熟悉应用系统的设计过程、设计要求、完成的工作内容和具体的设计方法,了解必须提交的各项工程文件,也达到巩固、充实和综合运用所学知识解决实际问题的目的。通过课程设计,应能加强学生如下能力的培养:(1)独立工作能力和创造力;(2)综合运用专业知识及基础知识,解决实际工程技术问题的能力;(3)查阅图书资料、产品手册和各种工具书的能力;(4)工程绘图的能力;(5)编写技术报告和编制技术资料的能力。二、设计要求假设汽车尾部左右两侧各有3盏知识灯,其控制功能包括:(1)汽车正常行驶是指示灯都不亮。(2)汽车右转弯时,右侧的一盏指示灯RD1交替闪烁,周期为2秒,其余灯熄灭。(3)汽车左转弯时,左侧的一盏指示灯LD1交替闪烁,周期为2秒,其余灯熄灭。(4)汽车刹车时,左右两侧的一盏指示灯LD2,RD2同时亮。(5)汽车夜间行驶时,左右两侧的一盏指示灯LD3,RD3同时一直亮,供照明使用。三、设计的具体实现1、汽车尾灯控制器的工作原理汽车尾灯控制器就是一个状态机的实例。当汽车正常行驶时所有指示灯都不亮;当汽车向右转弯时,汽车右侧的指示灯RD1亮;当汽车向左侧转弯时,汽车左侧的指示灯LD1亮;当汽车刹车时,汽车右侧的指示灯RD2和汽车左侧的指示灯LD2同时亮;当汽车在夜间行驶时,汽车右侧的指示灯RD3和汽车左侧的指示灯LD3同时一直亮。通过设置系统的输入信号:系统时钟信号clk,汽车左转弯控制信号left,汽车右转弯控制信号right,刹车信号brake,夜间行驶信号night系统的输出信号:汽车左侧3盏指示灯LD1,LD2,LD3和汽车右侧3盏指示灯RD1,RD2,RD3实现以上功能。系统的整体组装设计原理如图所示:汽车行驶信号主控模块左灯控制模块右灯控制模块显示时钟系统设计整体框图汽车尾灯点亮与汽车运行状态之间的关系运行状态左侧尾灯LD1,LD2,LD3右侧尾灯RD1,RD2,RD3正常运行灯灭右转弯灯灭RD1交替闪烁左转弯LD1交替闪烁灯灭刹车LD2亮RD2亮夜间行车LD3亮RD3亮2、单元模块设计与分析(1)、汽车尾灯主控模块数据入口:RIGHT:右转信号;LEFT:左转信号;BRAKE:刹车信号;NIGHT:夜间行驶信号;数据入口:LP:左侧灯控制信号;RP:右侧灯控制信号;LR:错误控制信号;BRAKE_LED:刹车控制信号;NIGHT_LED:夜间行驶控制信号;VHDL程序(CTRL.VHD):LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYCTRLISPORT(LEFT,RIGHT,BRAKE,NIGHT:INSTD_LOGIC;LP,RP,LR,BRAKE_LED,NIGHT_LED:OUTSTD_LOGIC);ENDENTITYCTRL;ARCHITECTUREARTOFCTRLISBEGINNIGHT_LED=NIGHT;BRAKE_LED=BRAKE;PROCESS(LEFT,RIGHT)VARIABLETEMP:STD_LOGIC_VECTOR(1DOWNTO0);BEGINTEMP:=LEFT&RIGHT;CASETEMPISWHEN00=LP='0';RP='0';LR='0';--当汽车直行时,左右灯都不亮WHEN01=LP='0';RP='1';LR='0';;--当汽车右拐时,右拐指示灯亮WHEN10=LP='1';RP='0';LR='0';--当汽车左拐时,左指示灯亮WHENOTHERS=LP='0';RP='0';LR='1';--当汽车刹车时,左右灯都亮ENDCASE;ENDPROCESS;ENDARCHITECTUREART;仿真波形:功能:该段程序用于对汽车尾灯进行整体控制,当输入为左转信号时,输出左侧灯控制信号;当输入为右转信号时,输出右侧灯控制信号;当同时输入LEFT和RIGHT信号时,输出错误控制信号。当输入为刹车信号时,输出刹车控制信号;当输入为夜间行驶信号时,输出为夜间行驶控制信号。(2)、左边灯控制模块数据入口:CLK:时钟控制信号;LP:左侧灯控制信号;LR:错误控制信号;BRAKE:刹车控制信号;NIGHT:夜间行驶控制信号;数据出口:LEDL:左侧LD1灯控制信号;LEDB:左侧LD2灯控制信号;LEDN:左侧LD3灯控制信号;VHDL程序(LC.VHD):LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYLCISPORT(CLK,LP,LR,BRAKE,NIGHT:INSTD_LOGIC;LEDL,LEDB,LEDN:OUTSTD_LOGIC);ENDENTITYLC;ARCHITECTUREARTOFLCISBEGINLEDB=BRAKE;LEDN=NIGHT;PROCESS(CLK,LP,LR)BEGINIFCLK'EVENTANDCLK='1'THEN--时钟上升沿有效IF(LR='0')THEN--没有刹车信号时IF(LP='0')THEN--没有左拐信号时LEDL='0';--左信号灯不亮ELSE--相反情况LEDL='1';ENDIF;ELSELEDL='0';ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;仿真波形:功能:本程序用于控制左侧灯的亮、灭和闪烁情况,当时钟上升沿信号和左侧灯控制信号或刹车控制信号或夜间行驶信号同时出现时,左侧相应的灯亮或出现闪烁。当错误控制信号出现时,LD1灯不亮。(3)、右边灯控制模块数据入口:CLK:时钟控制信号;RP:右侧灯控制信号;LR:错误控制信号;BRAKE:刹车控制信号;NIGHT:夜间行驶控制信号;数据出口:LEDR:右侧RD1灯控制信号;LEDB:右侧RD2灯控制信号;LEDN:右侧RD3灯控制信号;VHDL程序(RC.VHD):LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYRCISPORT(CLK,RP,LR,BRAKE,NIGHT:INSTD_LOGIC;LEDR,LEDB,LEDN:OUTSTD_LOGIC);ENDENTITYRC;ARCHITECTUREARTOFRCISBEGINLEDB=BRAKE;LEDN=NIGHT;PROCESS(CLK,RP,LR)BEGINIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿IF(LR='0')THENIF(RP='0')THENLEDR='0';ELSELEDR='1';ENDIF;ELSELEDR='0';ENDIF;ENDIF;ENDPROCESS;ENDARCHITECTUREART;仿真波形:功能:本描述用于控制右侧灯的亮、灭和闪烁情况,当时钟上升沿信号和右侧灯控制信号或刹车控制信号或夜间行驶信号同时出现时,右侧相应的灯亮或出现闪烁。当错误控制信号出现时,RD1灯不亮。(4)、时钟分频模块VHDL程序(SZ.VHD):LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYSZISPORT(CLK:INSTD_LOGIC;--时钟输入CP:OUTSTD_LOGIC);ENDENTITYSZ;ARCHITECTUREARTOFSZISSIGNALCOUNT:STD_LOGIC_VECTOR(7DOWNTO0);--定义八位标准逻辑位矢量数据类型BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THEN--检测时钟上升沿COUNT=COUNT+1;ENDIF;ENDPROCESS;CP=COUNT(3);--输出第五位ENDARCHITECTUREART;仿真波形:功能:这块的功能是对左右两边的LLED1、RLED1的闪烁时间间隔,以CLK为输入信号,CP为输出信号,在程序中定义一个八位节点信号COUNT来放计数值,当CLK的上升沿到来时就开始计数,最后将COUNT(3)给CP,实现对CLK的八分频。再将CP的电平信号分别和LEDL、LEDR电平与,最后用输出的电平来控制汽车左右的LLED1、RLED1,实现左右转的指示功能。(5)、顶层文件VHDL程序(tn.VHD):Libraryieee;Useieee.std_logic_1164.all;Useieee.std_logic_unsigned.all;EntitytnisPort(clk:instd_logic;Left:instd_logic;Right:instd_logic;Brake:instd_logic;Night:instd_logic;Ld1,ld2,ld3:outstd_logic;Rd1,rd2,rd3:outstd_logic);End;ArchitecturebhoftnisComponentszisPort(clk:instd_logic;Cp:outstd_logic);Endcomponent;ComponentctrlisPort(left,right,brake,night:instd_logic;Lp,rp,lr,brake_led,night_led:outstd_logic);Endcomponent;ComponentlcisPort(clk,lp,lr,brake,night:instd_logic;Ledl,ledb,ledn:outstd_logic);Endcomponent;ComponentrcisPort(clk,rp,lr,brake,night:instd_logic;Ledr,ledb,ledn:outstd_logic);Endcomponent;Signaltmp0,tmp1,tmp2,tmp3,tmp4:std_logic;Signalerr0,err1,err2,err3,err4,err5:std_logic;signalbm:std_logic;BeginU1:szportmap(clk,bm);U2:ctrlportmap(left,right,brake,night,tmp0,tmp1,tmp2,tmp3,tmp4);U3:lcportmap(clk,tmp0,tmp2,tmp3,tmp4,err0,err1,err2);U4:rcportmap(clk,tmp1,tmp2,tmp3,tmp4,err3,err4,err5);Ld1=err0andbm;Ld2=err1;Ld3=err2;Rd1=err3andbm;Rd2=err4;Rd3=err5;End;仿真波形:四、原理图VCCCLKINPUTVCCLEFTINPUTVCCBRAKEINPUTVCCNIGHTINPUTVCCRIGHTINPUTLD1OUTPUTLD2OUTPUTLD3OUTPUTRD1OUTPUTRD2OUTPUTRD3OUTPUTAND2instAND2inst1LEFTRIGHTBRAKENIGHTLPRPLRBRAKE_LEDNIGHT_LEDCTRLinst12CLKCPSZinst13CLKRPLRBRAKENIGHTLEDRLEDBLEDNRCinst14CLKLPLRBRAKENIGHTLEDLLEDBLEDNLCinst15五、管脚分配CLKN1BRAKEAE14NIGHTAF14LEFTAD13RIGHTAC13LD1H17LD2E20LD3D21RD1AE5RD2AA6RD3AF5六、心得体会本设计基于完成汽车尾灯控