1、系统实现采用硬件描述语言VHDL把系统电路按模块化方式进行设计,然后进行编译、时序仿真等。三:实验仪器PC机一台;电子综合设计实验箱一套。目录方案设计与论证.(1) 1:方案一. 32:方案二.43:方案比较.54:方案二的工作原理.5仿真与测试分析(5)设计总结.(6)四:附件.(7)1:方案设计与论证方案一根据方案所有的功能,将整个工程分成两个模块,一个模块为分频模块,将50M频率进行8分频。以使指示灯进行适当的闪烁。另一个模块是主要功能实现模块,包括实现出现刹车、右转、左转,夜行等各种情况下指示灯的显示情况。系统框图: 方案二根据方案的功能要求,将整个工程分成四个模块,其中两个模块也是分
2、频模块和尾灯主模块,还有左边灯控制模块和右边灯控制模块来分别控制左右的指示灯。其系统框图如图所示:方案比较方案一和二所实现的功能是一样的,但是方案一是具有两个模块,方案二是将其中的主模块分成了三个模块来实现其功能,设计起来逻辑性强,思路清晰,也便于扩展和完善,因此在实现相同功能的情况下,理所当然应该选择简单明了的方案二。方案二的工作原理汽车尾灯控制器就是一个状态机的实例。当汽车正常行驶时所有指示灯都不亮;当汽车向左转弯时,汽车左侧的指示灯left0,left1,left2依次点亮;当汽车向右侧转弯时,汽车右侧的指示灯right0,right1,right2依次点亮;当汽车刹车时,汽车左侧的指示
3、灯left3和汽车右侧的指示灯Lright3同时亮;当汽车在夜间行驶时,汽车所有指示灯全部亮。通过设置系统的输入信号:系统时钟信号clk,汽车左转弯控制信号left,汽车右转弯控制信号right,刹车信号brake,夜间行驶信号night和系统的输出信号:汽车左侧4盏指示灯left0,left1,left2,left3和汽车右侧4盏指示灯right0,right1,right2,right3实现以上功能。各组成模块原理图及程序详见附件。 2: 仿真与测试分析根据设计电路图及设计程序,经仿真得到如下的仿真图。因空间有限,以brake,left,right控制信号为例:3:设计总结本次实验利用VH
4、DL程序来设计出控制汽车尾灯各底层模块,再进一步生成顶层原理图。通过这次的实验过程,从选择这个课题到后来设计运行这个程序,其中遇到故很多问题,很多困难。在尾灯主模块中,利用最基本的VHDL语言来设计,其中最需要注意的是brake、left、right、night四个功能的设计顺序,要合理安排,才能使得符合功能要求,更符合实际情况。整个过程,曾尝试过很多方法,包括用更多的模块来设计程序,但最终选择了用这种方案是因为程序简单明了,但又不会缺少任何功能显示。在书上所提出的几个功能中,为了更符合实际情况和更好的完善这个实验,又完善了转弯时尾灯依次点亮,不断闪烁的功能;刹车时采用与转弯时不同的灯来显示,
5、便于区分等功能。由于在实验箱上正好四个开关,所以可进行适当的引脚分配,通过控制开关的on或off来显示实验结果。最后,运行成功,得到了想要的汽车尾灯显示结果。4.附件原理图2分频模块的VHDL语言程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity ck is port(clk:in std_logic; cp:out std_logic); end ck;architecture behave of ck issignal counter:std_logic_vector(7 dow
6、nto 0);begin process(clk) begin if clkevent and clk=1 then counter=counter+1; end if; end process; cp=counter(3); end behave;3.尾灯主模块的语言程序entity control is port(leftin,rightin,brake,night: leften,righten,lr,led3,rled3: end control;architecture behave of control issignal temp:std_logic_vector(1 downto
7、 0);process(leftin,rightin)if brake= leften=0; righten lr led3 rled3 else temp=leftin & rightin; if temp=0110 else if night=end behave;4左边灯控制模块entity leftp is port(leften,clk,lr: led2,led1,led0: end leftp;architecture behave of leftp isstd_logic_vector(2 downto 0); process(leften,clk,lr) if(clk)then if lr= if leften=000 if(temp=001=temp(1 downto 0) & 111 led2=temp(2); led1=temp(1); led0=temp(0);5.右边灯控制模块entity rightp is port(righten,clk,lr: rled2,rled1,rled0: end rightp;architecture behave of rightp is process(righten,clk,lr) if righten=100 & temp(2 downto 1); rled2 rled1 rled0