基于特权同学的博客和网上的一些资料,带给本人一丝灵感,觉得应该对按键这部分整理一下,归纳一下,普及一下。首先讲按键之(高低)脉冲边沿检测,引用特权同学的话:这是一个非常经典的方法。在他的高脉冲检测的基础上,我加入了可以检测低脉冲的产生。做到举一反三,普及通用,多元化变化的verilog按键模板。
//----------------------------------------
reg[2:0] key_rst;
always @(posedge clk or negedge rst_n)
if (!rst_n) key_rst <= 3'b111;
else key_rst <= {sw3_n,sw2_n,sw1_n};
reg[2:0] key_rst_r; //每个时钟周期的上升沿将low_sw信号锁存到low_sw_r中
always @ ( posedge clk or negedge rst_n )
if (!rst_n) key_rst_r <= 3'b111;
else key_rst_r <= key_rst;
//当寄存器key_rst由1变为0时,led_an的值变为高,维持一个时钟周期
wire[2:0] key_an = key_rst_r & (~key_rst);
/*
key_rst 1 1 1 0 0 1
~key_rst 0 0 0 1 1 0
key_rst_r 1 1 1 0 0 1
key_an 0 0 1 0 0
*/
//---------------------------------------------------------------------------
文章评论(0条评论)
登录后参与讨论