module Scan_key(pReset,scan_clk,scan_port,key_status); parameter Buff_WIDTH = 8; //缓冲区深度 input pReset; //复位信号 input scan_clk; //扫描时钟 input scan_port; //扫描端口 output key_status; //消抖后的键状态
reg key_status; reg [Buff_WIDTH-1:0]key_buff; //消抖缓冲区 always @(posedge pReset or posedge scan_clk) begin if(pReset) //复位状态 begin key_buff = 0; end else //扫描状态 begin key_buff = {key_buff[Buff_WIDTH-1:1],scan_port}; //填入新扫描数据 end end
always @(key_buff) begin if(key_buff == {Buff_WIDTH{0}}) //全部为0 key_status = 0; else if(key_buff == {Buff_WIDTH{1}}) //全部为1 key_status = 1; else key_status = key_status; end
endmodule
|