VHDL语言中信号的边缘检测

VHDL语言中信号的边缘检测,vhdl,edge-detection,Vhdl,Edge Detection,我是VHDL新手,我有一个按钮,我想在按下时检测it信号,这意味着我想在按下时检测信号按钮的上升沿 我做了研究,我所发现的一切都是关于探测时钟上升边缘的 我遇到的问题是,当按下按钮时,按钮的信号变为1,并一直保持在1,直到另一个按钮出现,所以当按钮的信号升高时,我更感兴趣?取决于您是否希望安全检查亚稳定性,或者不制作移位寄存器并将输入信号移位到打卡,看看有什么不同。下面的代码非常简单,并考虑到您的系统中有一个时钟 signal edge_detect : std_logic_vector( 1

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

我做了研究,我所发现的一切都是关于探测时钟上升边缘的


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

取决于您是否希望安全检查亚稳定性,或者不制作移位寄存器并将输入信号移位到打卡,看看有什么不同。下面的代码非常简单,并考虑到您的系统中有一个时钟

signal edge_detect : std_logic_vector( 1 downto 0 );

process (clk_i) is
begin
  if rising_edge(clk_i) then
    edge_detect <= edge_detect(0) & input_signal;
    if edge_detect = "01" then
      -- do stuff on rising_edge
    elsif edge_detect = "10" then
      -- do stuff on falling_edge   
  end if;
end process;
信号边缘检测:标准逻辑向量(1到0);
过程(clk_i)是
开始
如果上升沿(clk_i),则

用地道的英语问你的问题:

我是VHDL新手,有一个按钮,我想检测为 按下时的上升沿

我做了一些研究,发现的都是关于检测 时钟的上升沿

按下按钮时,按钮信号变为 “1”并保持在“1”位置,直到另一个事件发生

如何检测按钮上升沿事件

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

请参见sonicwave对提供边缘检测器的问题的回答

然而,开关反弹可能会发生(Maxim web文章关于开关反弹),可能会产生多个事件,这取决于开关,纠正措施也取决于采样时钟频率

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

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

去抖动

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

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

这需要亚稳态滤波,这是通过最小化两个连续触发器之间的延迟来实现的,以在第一个触发器看到设置或保持时间冲突时,最大限度地提高对第一个触发器的亚稳态区域内发生的事件的抗扰度

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

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

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

过滤掉反弹

当按钮无效时,将亚稳态滤波按钮信号馈送至计数器作为复位。松开按钮时,计数器被清除

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

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

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

还请注意,当按钮输入经过亚稳态过滤时,它起到同步复位的作用

边缘检测

边缘检测是通过一个触发器完成的,该触发器将终端计数信号作为一个输入和一个双输入门,门的类型及其输入的极性可用于选择要检测的事件边缘(可能都是异或门)。一个从触发器到门的输入,另一个从计数器到终端计数

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

Maxim的申请说明

如果你有一块商业化生产的FPGA板,你不必担心数字信号电平以外的电压瞬变,Maxim的文章正在向电路板设计者推销他们的保护装置

这篇web文章提供了有关开关弹跳和弹跳波形的权威参考

FPGA板供应商


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

您能显示任何代码吗?您做了什么来调试这个问题?您是否在搜索框(右上角)中键入了“VHDL按钮”?对于按钮,我通常使用状态机。通常处于空闲状态,但一旦按下按钮,状态变为等待,例如1毫秒。如果按钮仍然打开,则我将其注册为有效打开。在按下下一个按钮之前,我等待了0.5秒左右。@vipin,尽管状态机也可以充当一个小的边缘检测器。我总是觉得把过滤逻辑和处理逻辑分开是个好主意。例如,你有你的状态机来处理按钮按下,但在此之前,你有过滤逻辑(边缘检测,反弹效果检测,等等),我认为反弹是一个问题比元稳定性更大