汽车尾灯控制系统_第1页
汽车尾灯控制系统_第2页
汽车尾灯控制系统_第3页
汽车尾灯控制系统_第4页
汽车尾灯控制系统_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* Function: 在小脚丫STEP-MXO2上用状态机实现模拟汽车尾灯控制。1),用三色LED代表左右汽车尾灯2),用拨码开关控制汽车行驶状态3),用单色LED显示汽车行驶状态尾灯控制:1),直行:尾灯不亮,单色LED向上流水滚动2),右转:右侧尾灯按秒闪烁,左侧不亮,单色LED亮其中4个灯3),左转:左侧尾灯按秒闪烁,右侧不亮,单色LED亮另外4个灯4),停车:两侧尾灯同时闪烁,单色LED保持全亮5),倒车:两侧尾灯常亮,单色LED向下流水滚动拨码开关状态:STOP:state_in = 4b0000 停车GO:state_in = 4b0001直行LEFT:state_in = 4

2、b0010左转RIGHT:state_in = 4b0100右转BACK:state_in = 4b1000倒车其他拨码开关输入状态同STOP执行相同操作*/module tail_lamp(inputsys_clk,/系统时钟,外部时钟信号的最开始的输入,还需要经历分频才可以被状态机、计数器使用inputsys_rst_n,/系统复位,当输入为低电平逻辑0时,所有的模块都产生复位,系统回复到初始状态input3:0state_in,/拨码开关输入,四位拨码开关的输入,实际上我们只使用四个状态,另其中仅有一位为高电平,即可实现四个状态的变化outputreg2:0led_left,/左侧尾灯

3、msblsb = R,G,B,三位的输出信号,控制可控颜色led灯的闪亮和颜色的变化outputreg2:0led_right,/右侧尾灯 msblsb = R,G,B,三位的输出信号,控制可控颜色led灯的闪亮和颜色的变化outputreg7:0led_out/流水灯输出,八位的信号输出,可以利用状态机实现);parameterCNT_NUM = 6_000_000; /计数器实现分频的分频系数,经历分频系数为的分频,可以使信号变为周期为1s,频率为1Hz的信号reg23:0cnt;/计数器,定义24位的变量作为计数器reg3:0current_state;/当前状态,定义4位的变量为当前信

4、号reg3:0next_state;/下一个状态,定义4位的变量作为下一状态信号,与current_state当前状态相关regclk_1hz;/1Hz分频信号,clk外部时钟信号经过分频系数为的分频器输出的信号,频率为1Hzreg7:0_go;/前进时单色LED的状态,定义8位的信号作为前进时候的状态信号reg7:0_back;/倒车时单色LED的状态,定义8位的信号作为后退时候的状态信号/*计数器实现0.5秒的周期*/always(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)cnt = CNT_NUM-1)cnt = 1b0;els

5、ecnt = cnt + 1b1;/*当外部输入时钟有下降沿变化变化、或者复位信号有变化的时候,该计数模块启动;如果输入的复位信号为低电平的时候,复位信号低电平有效,产生复位效果,计数器cnt置为全零状态;如果复位信号为高电平的时候,复位信号不产生效果,则计数器cnt正常计数。当cnt计数数字达到24位全1状态时,计数达到最大值,于是重新开始一轮计数,把计数器信号cnt回复至全零状态。*/*根据计数器的周期实现1Hz信号分频*/always(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)clk_1hz = 1b0;else if(cnt

6、= CNT_NUM-1)clk_1hz = clk_1hz;elseclk_1hz = clk_1hz;/*当外部输入时钟有下降沿变化变化、或者复位信号有变化的时候,该分频模块启动;如果输入的复位信号为低电平的时候,复位信号低电平有效,产生复位效果,分频输出信号输出为低电平全零信号;如果复位信号为高电平的时候,复位信号不产生效果,则分频器按照上一级计数器输出的结果正常输出。当cnt计数信号达到最大值的时候,分频器输出信号电平翻转,取非运算,达到分频系数为的分频效果,输出信号。*/localparamSTOP= 4b0000;localparamGO= 4b0001;localparamLEFT

7、= 4b0010;localparamRIGHT= 4b0100;localparamBACK= 4b1000;/*定义拨码开关的四位输入信号对于stop、go、left、right、back的五种状态,为下面代码的实现做准备。wire2:0tail_on;/尾灯点亮状态,三位的信号,对应下面代码状态记得状态wire2:0tail_off;/尾灯熄灭状态, 三位的信号,对应下面代码状态记得状态wire2:0tail_shin;/尾灯闪烁状态, 三位的信号,对应下面代码状态记得状态wire7:0_left;/左转时单色LED的状态,八位的信号。对应左转时单色的led的流水状态wire7:0_ri

8、gnt;/右转时单色LED的状态,八位的信号。对应左转时单色的led的流水状态wire7:0_stop;/停止时单色LED的状态,八位的信号。对应左转时单色的led的流水状态/*尾灯的三种状态,RGB灯只使用红色*/assigntail_on = 3b011;/msblsb = R,G,Bassigntail_off = 3b111;/msblsb = R,G,Bassigntail_shin = clk_1hz,2b11;/msblsb = R,G,B/把尾灯的三种状态对应状态记得不同代码。011对应尾灯点亮,111对应尾灯灭。/*车辆前进时,流水灯向上流水*/always(posedge

9、sys_clk or negedge sys_rst_n)if(!sys_rst_n)_go = 8h7f;else if(cnt = CNT_NUM-1)_go = _go0,_go7:1;else_go = _go;/*当外部输入时钟有下降沿变化变化、或者复位信号有变化的时候,该控制前进的模块启动;如果输入的复位信号为低电平的时候,复位信号低电平有效,产生复位效果, 前进的输出信号输出为8h7f信号;如果复位信号为高电平的时候,复位信号不产生效果,则流水灯向上正常流水,显示为前进*/*车辆倒车时,流水灯向下流水*/always(posedge sys_clk or negedge sys_

10、rst_n)if(!sys_rst_n)_back = 8hfe;else if(cnt = CNT_NUM-1)_back = _back6:0,_back7;else_back = _back;/*与上一模块前进模块类似,当外部输入时钟有下降沿变化变化、或者复位信号有变化的时候,该控制后退的模块启动;如果输入的复位信号为低电平的时候,复位信号低电平有效,产生复位效果, 后退的输出信号输出为8hfe信号;如果复位信号为高电平的时候,复位信号不产生效果,则流水灯向下正常流水,显示为后退*/*车辆左转、右转、停止时,流水灯的状态*/assign_left = 8hf0;assign_rignt

11、= 8h0f;assign_stop = 8h00;/*同上文对前进、后退状态的定义,现定义左转状态为8hf0,右转信号为8h0f,停止信号为全零状态*/*将次态赋值给当前状态*/always(posedge sys_clk or negedge sys_rst_n)if(!sys_rst_n)current_state = STOP;elsecurrent_state = next_state;/*当外部输入时钟有下降沿变化变化、或者复位信号有变化的时候,该状态机模块启动;如果输入的复位信号为低电平的时候,复位信号低电平有效,产生复位效果,状态机的输出信号输出为为全零信号表示停止信号;如果复

12、位信号为高电平的时候,复位信号不产生效果,状态机正常运转,当前状态被替换为下一状态*/*车辆次态完全由人为通过拨码开关控制*/always(*)next_state = state_in;/*车辆处于不同状态时,尾灯及流水灯的输出*/always(current_state or sys_rst_n)if(!sys_rst_n) beginled_left = tail_shin;led_right = tail_shin;led_out = _stop ;endelsecase(current_state)STOP: begin led_left = tail_shin; led_right

13、 = tail_shin; led_out = _stop ; endGO: begin led_left = tail_off ; led_right = tail_off ; led_out = _go ; end LEFT: begin led_left = tail_shin; led_right = tail_off ; led_out = _left ; end RIGHT: begin led_left = tail_off ; led_right = tail_shin; led_out = _rignt; endBACK: begin led_left = tail_on ;

14、 led_right = tail_on ; led_out = _back ; enddefault: begin led_left = tail_shin; led_right = tail_shin; led_out = _stop ; endendcaseendmodule/*当本模块作为实验输出的最后一个模块,要把上一部分的状态机信号连接到输出信号。外部输入时钟有下降沿变化变化、或者复位信号有变化的时候,该输出转换模块启动;如果输入的复位信号为低电平的时候,复位信号低电平有效,产生复位效果, 后退的输出信号输出为停止stop信号;如果复位信号为高电平的时候,复位信号不产生效果,尾灯的

15、输出对应各个状态机的状态,完成实验*/ -/ Module: tail_lamp_tb/ Author: Step/ Description: 汽车尾灯控制的测试文件/ Web: / -/ Code Revision History :/ -/ Version: |Mod. Date: |Changes Made:/ V1.0 |2017/4/26 |Initial ver/ -timescale 1ns / 1psmodule tail_lamp_tb;parameter CNT_NUM = 10; /方便仿真,定义新的分频系数,例化时使用/*系统时钟信号的产

16、生*/reg sys_clk;initialsys_clk = 1b0;alwayssys_clk = #10 sys_clk;/*系统复位信号的产生,低电平复位*/reg sys_rst_n;initialbeginsys_rst_n = 1b0;#20;sys_rst_n = 1b1;end/*拨码开关信号的产生*/reg 3:0 state_in;initialbeginstate_in = 4b0000; / 停止 #2000;state_in = 4b0001; / 前进 #2000;state_in = 4b0010; / 左转 #2000;state_in = 4b0100; / 右转 #2000;state_in = 4b0000; / 停止 #2000;state_in = 4b1000; / 倒车 #2000;state_in = 4b0000; / 停止 #2000;$stop; / 结束仿真 endwire 2:0led_left,led_right;w

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论