【问题标题】:how to implement debouncing in verilog如何在verilog中实现去抖动
【发布时间】:2013-11-17 02:49:42
【问题描述】:

我正在使用 DE2 板的按钮作为异步复位,但它无法工作。 这是我的 n 位寄存器模块:

module regne (D, Clock, Resetn, Q);

    parameter n;
    input [n-1:0] D;
    input Clock, Resetn;
    output reg [n-1:0] Q;

    always @ (posedge Clock or negedge Resetn)
    begin
        if (Resetn == 0)
            Q[n-1:0] <= 'b0;
        else
            Q[n-1:0] <= D[n-1:0];
    end
endmodule

但是,重置失败。当我按下按钮时它什么也不做。我认为这是由按钮弹跳引起的。那么如何在 Verilog 中实现去抖动呢?

【问题讨论】:

  • 如果你按住reset它仍然没有功能属性吗?如果不是,这是一个连接问题,而不是弹跳问题。如果长按确实会导致重置,则检查 DE2 板是否正在过滤输入。
  • 您确定按钮是下拉按钮吗?当Resetn0 时,您的代码将重置。尝试触发 posedge Clock or posedge Resetn 并使 if 语句读取为 if (Resetn == 1)
  • 我确定 DE2 上的按钮是下拉的。即使我按住按钮一会儿它也不起作用
  • 检查生成的比特流的管脚是否正确——正常情况下有多种日志文件包含此信息

标签: verilog debouncing


【解决方案1】:

您不需要为 DE2 按钮实现 debouncer。它的按钮(按钮和开关按钮)本身具有去抖器。

替换

always @ (posedge Clock or negedge Resetn)

always @ (posedge Clock)

如果它不起作用并且您确定您的引脚分配,请确保您的电路板正常工作。

【讨论】:

    猜你喜欢
    • 2017-07-01
    • 1970-01-01
    • 2022-06-16
    • 2019-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 2016-11-12
    相关资源
    最近更新 更多