FPGA实验报告.docx

上传人:b****3 文档编号:11509528 上传时间:2023-06-01 格式:DOCX 页数:9 大小:86.84KB
下载 相关 举报
FPGA实验报告.docx_第1页
第1页 / 共9页
FPGA实验报告.docx_第2页
第2页 / 共9页
FPGA实验报告.docx_第3页
第3页 / 共9页
FPGA实验报告.docx_第4页
第4页 / 共9页
FPGA实验报告.docx_第5页
第5页 / 共9页
FPGA实验报告.docx_第6页
第6页 / 共9页
FPGA实验报告.docx_第7页
第7页 / 共9页
FPGA实验报告.docx_第8页
第8页 / 共9页
FPGA实验报告.docx_第9页
第9页 / 共9页
亲,该文档总共9页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

FPGA实验报告.docx

《FPGA实验报告.docx》由会员分享,可在线阅读,更多相关《FPGA实验报告.docx(9页珍藏版)》请在冰点文库上搜索。

FPGA实验报告.docx

FPGA实验报告

数字电路与逻辑设计

用Verilog编程

用FPGA实现汽车尾灯控制系统

实验报告

 

学院:

信息与通信工程学院

专业:

电子信息工程

班级:

2015211103

********************2015210077

张楷2015210078

一.实验要求

根据汽车行驶状态自动控制汽车尾灯

1.直行:

尾灯不亮

2.右转:

右侧尾灯亮而且按秒闪烁,左侧尾灯不亮

3.左转:

左侧尾灯亮而且按秒闪烁,右侧尾灯不亮

4.临时停车或故障:

两侧尾灯同时闪烁

5.倒车显示

二.用FPGA实现方式设计

1.用三色LED代表左右汽车尾灯,为了便于区分,左尾灯选择靠左的三色LED且显示为蓝色,右尾灯选择靠右的三色LED且显示为红色。

两灯同时闪烁表示停车或倒车。

2.用八个单色LED以流水灯的方式显示汽车的行驶状态,向前滚动表示汽车前行,向后滚动表示汽车到车,只有前四个LED亮表示左转,只有后四个LED亮表示右转。

3.用四个拨码开关分别表示前行、左转、右转、故障(倒车),器输入组合1000表示前行,0100表示左转、0010表示右转、0001表示故障(倒车);

三.设计思路分析

1.使用不同的进程来分别处理时钟分频及各个状态下的灯光效果

2.用三色LED代表左右汽车尾灯

3.用拨码开关控制汽车行驶状态

4.用单色LED显示汽车行驶状态

5.使用状态机的思想来设计,通过过状态来决定灯光效果,通过外部输入来改变状态。

四.波形仿真

五.管脚分配

1.输入管脚分配:

2.输出管脚分配:

六.实验总结体会:

(1)本次实验,我们采用模块化的设计方法,将整体分成不同功能的模块,如计时模块、分频模块、显示控制模块、LED灯显示模块,然后分模块编写程序(由小组人员分工完成),之后再将模块之间用变量连接起来,从而实现汽车尾灯显示要求。

(2)在实现本次设计的过程中,使我们了解了汽车尾灯的基本原理,从而让我们觉得,首次将我们的专业知识与生活联系起来,增强了我们对本课程的学习兴趣。

(3)在本次实验的实现过程中,通过调用case语句、always语句,是我们进一步加深了对case、always语句的认识,并且能够将其运用到其他设计中,使我们进一步熟练了这种设计方法和verilog程序设计语言。

七.实现代码

1.汽车尾灯控制系统

moduletail_lamp

inputsys_clk,//系统时钟

inputsys_rst_n,//系统复位

input[3:

0]state_in,//拨码开关输入

outputreg[2:

0]led_left,//左侧尾灯[msb~lsb]=[R,G,B]

outputreg[2:

0]led_right,//右侧尾灯[msb~lsb]=[R,G,B]

outputreg[7:

0]led_out//流水灯输出

);

parameterCNT_NUM=6_000_000;//计数器实现分频的分频系数

localparamSTOP=4'b0000;

localparamGO=4'b0001;

localparamLEFT=4'b0010;

localparamRIGHT=4'b0100;

localparamBACK=4'b1000;

wire[2:

0]tail_on;//尾灯点亮状态

wire[2:

0]tail_off;//尾灯熄灭状态

wire[2:

0]tail_shin;//尾灯闪烁状态

wire[7:

0]_left;//左转时单色LED的状态

wire[7:

0]_rignt;//右转时单色LED的状态

wire[7:

0]_stop;//停止时单色LED的状态

reg[23:

0]cnt;//计数器,

reg[3:

0]current_state;//当前状态

reg[3:

0]next_state;//下一个状态

regclk_1hz;//1Hz分频信号

reg[7:

0]_go;//前进时单色LED的状态

reg[7:

0]_back;//倒车时单色LED的状态

/*计数器实现0.5秒的周期*/

always@(posedgesys_clkornegedgesys_rst_n)

if(!

sys_rst_n)

cnt<=1'b0;

elseif(cnt>=CNT_NUM-1)

cnt<=1'b0;

else

cnt<=cnt+1'b1;

/*根据计数器的周期实现1Hz信号分频*/

always@(posedgesys_clkornegedgesys_rst_n)

if(!

sys_rst_n)

clk_1hz<=1'b0;

elseif(cnt==CNT_NUM-1)

clk_1hz<=~clk_1hz;

else

clk_1hz<=clk_1hz;

/*尾灯的三种状态,RGB灯只使用红色*/

assigntail_on=3'b011;//[msb~lsb]=[R,G,B]

assigntail_off=3'b111;//[msb~lsb]=[R,G,B]

assigntail_shin={clk_1hz,2'b11};//[msb~lsb]=[R,G,B]

/*车辆前进时,流水灯向上流水*/

always@(posedgesys_clkornegedgesys_rst_n)

if(!

sys_rst_n)

_go<=8'h7f;

elseif(cnt==CNT_NUM-1)

_go<={_go[0],_go[7:

1]};

else

_go<=_go;

/*车辆倒车时,流水灯向下流水*/

always@(posedgesys_clkornegedgesys_rst_n)

if(!

sys_rst_n)

_back<=8'hfe;

elseif(cnt==CNT_NUM-1)

_back<={_back[6:

0],_back[7]};

else

_back<=_back;

/*车辆左转、右转、停止时,流水灯的状态*/

assign_left=8'hf0;

assign_rignt=8'h0f;

assign_stop=8'h00;

/*将次态赋值给当前状态*/

always@(posedgesys_clkornegedgesys_rst_n)

if(!

sys_rst_n)

current_state<=STOP;

else

current_state<=next_state;

/*车辆次态完全由人为通过拨码开关控制*/

always@(*)

next_state=state_in;

/*车辆处于不同状态时,尾灯及流水灯的输出*/

always@(current_stateorsys_rst_n)

if(!

sys_rst_n)begin

led_left=tail_shin;

led_right=tail_shin;

led_out=_stop;

end

else

case(current_state)

STOP:

beginled_left=tail_shin;led_right=tail_shin;led_out=_stop;end

GO:

beginled_left=tail_off;led_right=tail_off;led_out=_go;end

LEFT:

beginled_left=tail_shin;led_right=tail_off;led_out=_left;end

RIGHT:

beginled_left=tail_off;led_right=tail_shin;led_out=_rignt;end

BACK:

beginled_left=tail_on;led_right=tail_on;led_out=_back;end

default:

beginled_left=tail_shin;led_right=tail_shin;led_out=_stop;end

endcase

endmodule

2.仿真代码

`timescale1ns/1ps

moduletail_lamp_tb;

parameterCNT_NUM=10;//方便仿真,定义新的分频系数,例化时使用

/*系统时钟信号的产生*/

regsys_clk;

initial

sys_clk=1'b0;

always

sys_clk=#10~sys_clk;

/*系统复位信号的产生,低电平复位*/

regsys_rst_n;

initial

begin

sys_rst_n=1'b0;

#20;

sys_rst_n=1'b1;

end

/*拨码开关信号的产生*/

reg[3:

0]state_in;

initial

begin

state_in=4'b0000;//停止

#20;

state_in=4'b0001;//前进

#20;

state_in=4'b0010;//左转

#20;

state_in=4'b0100;//右转

#20;

state_in=4'b0000;//停止

#20;

state_in=4'b1000;//倒车

#20;

state_in=4'b0000;//停止

#20;

$stop;//结束仿真

end

wire[2:

0]led_left,led_right;

wire[7:

0]led_out;

/*例化设计文件*/

tail_lamp#

.CNT_NUM(CNT_NUM)

u1

.sys_clk(sys_clk),//系统时钟

.sys_rst_n(sys_rst_n),//系统复位

.state_in(state_in),//拨码开关输入

.led_left(led_left),//左侧尾灯[msb~lsb]=[R,G,B]

.led_right(led_right),//右侧尾灯[msb~lsb]=[R,G,B]

.led_out(led_out)//流水灯输出

);

endmodule

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2