edavhdl程序设计 汽车灯设计1文档格式.docx
《edavhdl程序设计 汽车灯设计1文档格式.docx》由会员分享,可在线阅读,更多相关《edavhdl程序设计 汽车灯设计1文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
设计过程:
后灯的循环移位,因为有三盏灯,所以用有三个状态的状态机,每个状态对应一组3位的输出,控制3盏灯循环地亮。
灯的闪烁,用到T触发器的原理,设计一个中间变量,当来第一个时钟脉冲的时候,将这个中间变量取反,再来一个时钟脉冲的时候,再取反一次,有回到原来的初值,从而两个时钟脉冲实现两次翻转,发光二极管闪烁一下。
整个设计基本上由循环电路和控制电路组成。
为了避免汽车从一个状态切换到另一个状态是灯控制组合出现不稳定现象,所以每一个状态都必须对中间变量初始化。
三、设计源程序模块说明:
车灯控制器模块:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYcar_controlIS
PORT(
turn_fro_big_light:
INstd_logic;
--前大灯控制开关
turn_left:
--左转
turn_right:
--右转
bake:
--刹车或减速
fro_big_light_con:
OUTstd_logic;
--前大灯
fro_L_light_con:
--前左灯
fro_R_light_con:
--前右灯
back_L_lights_con:
OUTstd_logic_vector(2downto0);
--后左灯
back_R_lights_con:
OUTstd_logic_vector(2downto0);
--后右灯
);
ENDcar_control;
ARCHITECTUREarch_car_controlofcar_controlIS
BEGIN
process(turn_left,turn_right,bake,turn_fro_big_light)
BEGIN
if(turn_fro_big_light='
1'
)then
fro_big_light_con<
='
;
else
0'
endif;
--如果前灯控制为1,则前灯亮;
否则不亮
--whennothingtodo在匀速直线行驶的情况下,前左右灯不亮,后左右转向灯不亮
if(turn_left='
andturn_right='
andbake='
)then
fro_L_light_con<
fro_R_light_con<
back_L_lights_con<
="
000"
back_R_lights_con<
--在只是减速刹车的情况下,前转向灯不亮,后左右转向灯闪烁
elsif(turn_left='
010"
--在只是右转的情况下,前右转向灯闪烁,同时右后灯的3盏灯有左往右闪烁;
其他左右灯不亮
)then
001"
--当汽车在右转弯的同时减速,则前右转向灯闪烁,右后灯的3盏灯有左往右闪烁,同时左后灯都点亮。
100"
--当汽车左转弯的时候,前左转向灯闪烁,同时左后灯的3盏灯由右往左闪烁;
--当汽车在左转弯的同时减速,则前左转向灯闪烁,左后灯的3盏灯由右往左闪烁,同时右后灯都点亮。
--指令错误,即左转又右转,不刹车,前后左右灯不亮
--指令错误,即左转又右转,刹车,前后左右灯不亮
endif;
ENDprocess;
ENDarch_car_control;
2.后转向灯控制器模块
ENTITYback_lightIS
clk:
INSTD_LOGIC;
lights_control:
INSTD_LOGIC_VECTOR(2DOWNTO0);
lights:
OUTSTD_LOGIC_VECTOR(2DOWNTO0)
endback_light;
ARCHITECTUREarch_back_lightOFback_lightIS
TYPEstate1IS(s0,s1,s2,s3);
TYPEstate2IS(t0,t1);
SIGNALpresentstate1:
state1;
SIGNALpresentstate2:
state2;
PROCESS(clk,presentstate1)
BEGIN
if(clk'
eventandclk='
if(lights_control="
)THEN--灯不亮
lights<
elsif(lights_control="
)THEN--灯的循环闪烁
casepresentstate1IS
WHENs0=>
presentstate1<
=s1;
WHENs1=>
011"
=s2;
WHENs2=>
111"
=s3;
WHENs3=>
=s0;
endcase;
)THEN
casepresentstate2IS
WHENt0=>
presentstate2<
=t1;
WHENt1=>
=t0;
--后灯是否全都闪烁一下
)THEN
--灯一直亮
endarch_back_light;
3.前灯模块
ENTITYfro_lightIS
PORT(
glistenab:
glisten:
OUTSTD_LOGIC
endfro_light;
ARCHITECTUREarch_fro_lightOFfro_lightIS
process(clk,glistenab)--实现的功能是前灯的亮灭
if(glistenab='
)THEN
glisten<
=clk;
endprocess;
endarch_fro_light;
仿真结果
仿真图如下所示:
以防上面的错误以下是从ise上copy的能够仿真的文件:
1车灯控制器模块
libraryIEEE;
useIEEE.STD_LOGIC_1164.ALL;
useIEEE.STD_LOGIC_ARITH.ALL;
useIEEE.STD_LOGIC_UNSIGNED.ALL;
OUTstd_logic_vector(2downto0)
if(turn_left='
2后灯模块
3前灯模块
ENTITYfro_lightIS
process(clk,glistenab)