ccs 发表于 2012-3-1 09:05:28

请问大牛 这个消抖 中的sample_pulse 怎么理解啊

module tt(reset,clk,key,led);
inputreset;
inputclk;
inputkey;
output led;
reg cnt;
always @ ( posedge clk )
        if ( !reset )
                cnt <= 18'd0;
        else
                cnt <= cnt + 1'b1;

wire   sample_pulse ;
assign sample_pulse =( cnt == 18'h3ffff);

reg   low_sw;
always @( posedge clk )
        if ( !reset )
                low_sw <= 1'b1;
        else
                if (sample_pulse )
                low_sw <= key;
//在整个 low_sw(active_low)有效过程中取一个控制量作为 led 的控制信号
//本实例中使用 low_sw 的下降沿

reg   low_sw_r; //将 low_sw 信号锁存一个时钟周期,延时不是真的“锁存”
always @ ( posedge clk )
        low_sw_r <= low_sw;
       
wire led_ctrl;
assign led_ctrl= low_sw_r & ( !low_sw);

reg led;
always @ ( posedge clk or negedge reset)
        if ( !reset)
                led<= 1'b0;
        else
                if ( led_ctrl )
                led <= ~led;
endmodule

请问大牛 这个消抖 中的sample_pulse怎么理解啊

yuxuejun1123 发表于 2012-3-23 14:02:01

这种做法类似于中断检测中“查询中断”的做法,也就是定时(3ffff)去查询一下引脚的电平,也可以理解为去采样一下引脚的电平。
按键可能发生在0-3ffff之间的任何一个时刻,但是sample_pulse只是在某一个时刻去采样一次而已,持续时间为1个时钟周期,然后把key值传递进来,如果有下降沿,那么led灯就翻转一次状态
页: [1]
查看完整版本: 请问大牛 这个消抖 中的sample_pulse 怎么理解啊