按键去抖FPGA设计 改良版-.doc_第1页
按键去抖FPGA设计 改良版-.doc_第2页
按键去抖FPGA设计 改良版-.doc_第3页
按键去抖FPGA设计 改良版-.doc_第4页
全文预览已结束

下载本文档

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

文档简介

按键消抖sw_debounce 什么是debounce,为什么要debounce? 當按下按鈕時,表面上只按了一下。但是訊號的傳遞並不是很單純的由1直接跳到0。實際上的訊號會如上圖所示,當我們按下按鈕後,訊號會在高低電位之間彈跳(bounce)。則電路所收到的訊號可能會像111110110110000000,會和我們所預期的111111111000000000不同。如此一來,雖然我們只按了一下按鈕,電路可能會解讀成按了好幾下按鈕。debounce的目的就是為了要除去訊號在高低電位之間彈跳所造成的不正確輸入。 具体原理:通常,按键抖动会产生10-20MS的毛刺,因此要做的实际上就是在20MS中采样一次,当检测到按键突变的时候,就认定按下,其他状态忽略。 采用50MHz晶振,时钟周期是20ns,消除按键消抖的关键在于,在检测到按键电平发生跳变后的20ms内,不对按键电平进行判定。这就需要引入脉冲边沿检测法。脉冲边沿检测法,个人觉得, 在FPGA里的应用实在是太多了,几乎所有的程序都要用到,作用无非是防止竞争冒险,将一个信号延迟一个时钟周期,原来的信号取反,2个信号与一下,从而产生一个宽度为一个时钟周期(20ns)的脉冲,然后将这个脉冲作为控制信号去控制别的进程。 下面是之前开发板的一个按键程序:module sw_debounce( clk, rst_n, sw1_n, sw2_n, sw3_n, /output led_d1, / led 1-off,0-on led_d2, led_d3 );input clk;input rst_n;input sw1_n,sw2_n,sw3_n; /Active low 低电平有效output led_d1;output led_d2;output led_d3;/脉冲边沿检测法(当按键电平发生突变时产生一个时钟周期的高电平,用这个高电平控制计数器的工作)reg 2:0 key_rst;always(posedge clk or negedge rst_n) if (!rst_n) key_rst=3b111; else key_rst=sw3_n,sw2_n,sw1_n;reg 2:0 key_rst_r;always(posedge clk or negedge rst_n) if (!rst_n) key_rst_r=3b111; else key_rst_r=key_rst;wire 2:0 key_an= key_rst_r2:0&(key_rst2:0);/ -reg 19:0 cnt;/ 时钟频率50MHz,周期20ns,所以20ms对应的需要10的6次方个周期,需要一个20位计数器计数。always (posedge clk or negedge rst_n) if (!rst_n) cnt = 20d0; else if (key_an) /利用脉冲边沿检测法控制计数器计数 cnt=20d0; else cnt = cnt + 1b1;reg 2:0 low_sw;always (posedge clk or negedge rst_n) if (!rst_n) low_sw = 3b111; else if (cnt = 20hfffff) /每隔20MS检测一次按键 low_sw = sw3_n,sw2_n,sw1_n; / -/ - reg 2:0 low_sw_r; /将low_sw信号锁存一个时钟周期,延时不是真的“锁存”always ( posedge clk or negedge rst_n ) if (!rst_n) low_sw_r = 3b111; else low_sw_r = low_sw; wire 2:0 led_ctrl = low_sw_r2:0 & ( low_sw2:0); /当检测到按键有下降沿变化时,代表该按键被按下,按键有效reg d1;reg d2;reg d3;always (posedge clk or negedge rst_n) if (!rst_n) begin d1 = 1b0; d2 = 1b0; d3 = 1b0; end else begin if ( led_ctrl0 ) d1 = d1; if ( led_ctrl1 ) d2 = d2; if ( led_ctrl2 ) d3 = d3; /当任意一个按键被按下的时候,对应的LED灯会亮灭切换 endassi

温馨提示

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

评论

0/150

提交评论