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

本文详细探讨了FPGA中的边沿检测,包括上升沿与双边沿的检测方法,通过Verilog代码实现。文章指出,由于现实中的输入信号可能存在抖动,因此在设计中需要考虑滤除毛刺和抖动的优化。通过增加D触发器来延迟输出,提高了检测的准确性。此外,还介绍了边沿捕捉电路的设计,其特点是检测到边沿变化后输出保持高电平,直至复位信号生效。
摘要由CSDN通过智能技术生成

一、边沿检测的简述

我们通常会把边沿检测用在按键输入的检测,这一检测手段并不唯一(单片机也可以实现)。按键按下时,输入信号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&current_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]din;
    always @(posedge clk) begin
       din<= in;
    end
    assign positive_edge=~din&in;
endmodule

波形仿真结果(为了便于便于直观体现输出特性,笔者在粘贴代码时对输出端口的命名进行了修

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值