正点原子FPGA按键消抖笔记
出自正点原子《开拓者FPGA开发指南V1.3》第九章按键控制蜂鸣器实验 寄存器:key_flag 按键数据有效信号 寄存器:key_value 按键消抖后的数据 寄存器:delay_cnt 延时计数 系统时钟:50MHz 思路: 一直检测按键状态,一旦按键状态发现变化,给delay_cnt计数器赋初值100_0000,也就是20ms计数。按键状态不发生改变,那么计数器开始递减计数,直到计数器减到1时,说明按键状态稳定保持20ms,此时给出一个时钟周期的按键有效通知信号key_flag,并将按键数据寄存器key_value锁存输出。 Verilog硬件语言和C语言的不同之一,C语言是顺序语言,如果给出一条赋值语句,左值会立刻变化,而Verilog语言的一条幅值语句需要一个时钟周期改变幅值,也就是一个时钟周期内,所有寄存器的值都不会被改变,只有下一个时钟信号到来,寄存器的值才会被改变。 module key_debounce( input sys_clk, input sys_rst_n, input key, output reg key_value, output reg key_flag ); reg [31:0] delay_cnt; reg key_reg; always @(posedge sys_clk or negedge sys_rst_n)begin if(!sys