gpt4 book ai didi

vhdl - VHDL中的信号边缘检测

转载 作者:行者123 更新时间:2023-12-01 01:01:40 26 4
gpt4 key购买 nike

我是 VHDL 的新手,我有一个按钮,我想在按下它时检测它的信号,这意味着我想在按下它时检测信号按钮的上升沿?

我做了研究,我发现的只是检测 clk 的上升沿。

我遇到的问题是,当按下按钮时,按钮的信号变为 1 并保持在 1 直到另一个甚至发生,所以当按钮的信号升高时我更感兴趣?

最佳答案

您用地道英语提出的问题:

I am new to VHDL and have a push button that I want to detect as a rising edge when pressed.

I did some research and all what I found was about the detecting the rising edge of a clock.

When the push button is pressed the signal for the push button goes to '1' and stay at '1' until until another event occurs.

How do I detect the push button rising edge event?



这不是一个 VHDL 问题,而是一个数字设计问题。 VHDL 用于在 VHDL 中实现解决方案。

请参阅 sonicwave 对问题的回答 VHDL - Incrementing Register Value on Push Button Event它提供了一个边缘检测器。

但是, tens of milliseconds 可能会发生开关弹跳。 (关于开关弹跳的 Maxim 网络文章)可能会产生多个事件,取决于开关,纠正措施也取决于采样时钟速率。

Figures 1 and 2 from Maxim link

请注意,Maxim 网页文章提到薄膜开关在新的时可以无反弹,并且随着时间的推移而退化,并且反弹特性不可重复。

一些 FPGA 供应商在按钮之间提供施密特触发缓冲器,并声称薄膜瞬时开关随后会“去抖动”。 Maxim 的网络文章声称薄膜开关在其使用生命周期内可能无法保持清洁。这些和其他类型的瞬时开关可能需要去抖动。

去抖

当 FPGA 板不提供去抖动功能时,想法是以数字方式过滤掉所有这些反弹,并生成一个显示按钮已按下的事件。这需要一个时钟。

首先将按钮信号输入您的时钟域

这需要亚稳态滤波,这是通过最小化两个连续触发器之间的延迟来实现的,以在第一个触发器看到建立或保持时间违规时最大限度地避免在第一个触发器的亚稳态区域内发生的事件。

第一个触发器的输入是按钮信号,第二个触发器的输入是第一个触发器的输出。

第二个触发器的输出在时钟域中,当不超过表示周期的时钟速率时,没有亚稳态,该周期由两个触发器之间的路由延迟加上触发器的亚稳态恢复时间组成。

触发器的亚稳态恢复时间通常用 FPGA 中的最大时钟速率周期来表示。

过滤掉反弹

当按钮无效时,将亚稳态过滤按钮信号作为复位馈送到计数器。当您释放按钮时,计数器被清除。

计数器的大小取决于时钟频率和开关弹跳的长度,可能需要几十毫秒。

终端计数表示有效的按钮事件,也用于停止计数器。 (终端计数 FALSE 是计数器的启用)。

停止计数器以提供单个按钮事件。

另请注意,当按钮输入经过亚稳态过滤时,它充当同步复位。

边缘检测

边沿检测是用一个触发器完成的探测。一个来自触发器的门输入,另一个来自计数器的终端计数。

如果您认为 FPGA 板设计充分提供了去抖,您可以在不使用去抖计数器的情况下将亚稳态过滤和边缘检测结合起来。

Maxim的应用笔记

如果您有商业生产的 FPGA 板,则不必担心数字信号电平之外的电压瞬变,Maxim 文章正在向电路板设计人员推广他们的保护设备。

网络文章提供了关于开关弹跳和弹跳波形的权威引用。

FPGA 板供应商

一些 FPGA 板供应商提供去抖电路引用设计代码。他们会这样做,因为计数器大小取决于引用时钟速率,并且可能使用的时钟是由 DPLL 派生的。

关于vhdl - VHDL中的信号边缘检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33072002/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com