欢迎来到天天文库
浏览记录
ID:44774918
大小:451.00 KB
页数:8页
时间:2019-10-28
《按键驱动LED地实验课设资料》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用设计一:按键驱动LED的实验一、设计目的学会用Verilog语言编写所需要的程序,会对自己编写的程序进行编译和仿真,懂得根据仿真软件提示的错误进行修改,也需要对通过仿真改正功能的错误。并学会检测按键和控制LED的输出。本实验是通过FPGA检测I/O口上的按键信号,通过时序控制两个LED灯以流水灯的方式各亮灭六次。最后灯保持灭的状态。二、设计原理该实验的主要问题是FPGA如何捕获到按键是否按下。当按键按下时,输入电平会由高变低,按键松开后,输入电平会由低变高,这就有一个上升沿和一个下降沿。捕获到这两个沿。就可以确认按键按下。检测到
2、按键按下时,开始实现设计的功能。由于两个LED灯亮灭有时间控制。所以需要分频。由于FPGA的内部频率是66兆赫兹,则需要分频65999999次能达到一秒。最后编写主要的功能程序,首先让两个LED灯都置于高电平,当检测到按键按下时,时间过了一秒之后,led1开始亮,又过了一秒,LED2和LED1对LED1取反,实现了一亮一灭的功能。这样循环六次后,分别将两灯置于高电平,即灭的状态。在此过程中,若复位键置于高电平,则亮灯都暗。三、设计成果1、模块划分(或者状态机)(1)键盘的检测(2)分频(3)实现流水灯的模块2、模块设计计数模块用来计
3、数的。低电平和计数器满时,复位。否则计数器不断的计数加一,直到计数满时再复位。always@(posedgeclkornegedgereset_n)文档实用beginif(!reset_n)cnt1<=20'd0;elsecnt1<=cnt1+1'b1;endalways@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)begincnt<=28'd0;endelsebeginif(cnt==28'd00000099)begincnt<=28'd0;endelsecnt<=cnt+1
4、;endendregyimiao;always@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)beginyimiao<=1'b0;endelsebeginif(cnt==28'd00000099)yimiao<=1'b1;elseif(yimiao)yimiao<=1'b0;end文档实用end键盘的检测模块always@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)key1_dly<=1'b0;elsekey1_dly<=k
5、ey1;endalways@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)key1_dly1<=1'b0;elsekey1_dly1<=key1_dly;endalways@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)key1_nege_flag<=1'b0;elseif(key1_dly==1'b0&&key1_dly1==1'b1)key1_nege_flag<=1'b1;elseif(key1_valid==1'b1)
6、key1_nege_flag<=1'b0;endalways@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)key1_pose_flag<=1'b0;elseif(key1_nege_flag==1'b1)beginif(key1_dly==1'b1&&key1_dly1==1'b0)key1_pose_flag<=1'b1;elseif(key1_valid==1'b1)key1_pose_flag<=1'b0;文档实用endendalways@(negedgereset_no
7、rposedgeclk)beginif(reset_n==1'b0)key1_valid<=1'b0;elseif(key1_nege_flag==1'b1&&key1_pose_flag==1'b1)key1_valid<=1'b1;elsekey1_valid<=1'b0;endalways@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)beginkey_ok1<=1'b0;endelseif(key1_valid==1'b1)key_ok1<=1'b1;endLED灯的驱动
8、模块always@(negedgereset_norposedgeclk)beginif(reset_n==1'b0)begincount<=0;led1<=1'b1;led2<=1'b1;endelseif(yimiao)begin
此文档下载收益归作者所有