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