FPGA学习笔记二:输入电路的各种边沿检测(内含Verilog代码)

文章目录

  • 一、边沿检测的简述
  • 二、上升沿与双边沿的检测方法
    • 1.上升沿的检测方法(下降沿方法自行类比)
      • (1)设计思路
      • (2)实现与功能评估
      • (3)改进与代码实现
    • 2.双边沿的检测方法
      • (1)设计思路
      • (2)代码实现
  • 三、边沿捕捉电路
    • 1.设计思路
    • 2.代码实现
  • 四、总结
  • 五、其它补充

一、边沿检测的简述

我们通常会把边沿检测用在按键输入的检测,这一检测手段并不唯一(单片机也可以实现)。按键按下时,输入信号key出现一个下降沿,抬起后又变为一个上升沿。如果输入信号是不存在毛刺和抖动的理想信号,边沿检测就显得尤为重要,当然能够滤除毛刺与抖动的优化的检测电路也在本篇博客的讨论范围之内。

二、上升沿与双边沿的检测方法

1.上升沿的检测方法(下降沿方法自行类比)

(1)设计思路

 *******检测电路其侧重电路的设计而非代码的书写能力*******

我们的设计目标是能够在一个时钟周期内(两个上升沿之间)检测到输入信号的上升沿(即由0到1的跳变)。因此要明确:电路中至少要有时序逻辑电路的存在才让输入的前后状态实现比较。设计步骤如下:

  1. 先用一个D触发器来记录之前的输入的状态(last_state);

  2. 把之前输入的状态和当前的状态(current_state)进行组合逻辑来实现在last_state == 0&& current_state == 1时电路的输出positive_edge=1;画出真值表可以发现:这一组合逻辑电路通过:assign positive_edge=~last_state¤t_state
    这一条连续赋值语句就可以达到我们的目标(可参考以下真值表);

  3. 到现在为止,理论上,我们已经可以检测到一个周期内的边沿变化;

(2)实现与功能评估

根据上述思路编写代码。编写时注意:上述思路中的last_state就是下述代码片中的din;current_state对应的就是代码片中的输入端口in。代码如下::

module top_module (
    input clk,
    input [7:0] in,
    output [7:0] positive_edge
);
    reg  [7:0

你可能感兴趣的:(边沿捕捉,按键边沿检测,verilog,触发器,fpga,程序设计)