VHDL中信号的边缘检测

时间:2015-10-12 01:35:16

标签: vhdl edge-detection

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

我做了研究,我发现的所有内容都是关于检测clk的上升边缘。

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

2 个答案:

答案 0 :(得分:5)

您在惯用英语中的问题:

  

我是VHDL新手并且有一个我想要检测的按钮   按下时上升沿。

     

我做了一些研究,我发现的所有内容都是关于检测到的   时钟的上升沿。

     

按下按钮时,按钮信号进入   ' 1'并留在' 1'直到另一个事件发生。

     

如何检测按钮上升沿事件?

这不是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供应商在按钮之间提供施密特触发缓冲器,然后声称薄膜瞬时开关被去抖动#39; Maxim网站上的文章声称薄膜开关在其使用寿命期间可能无法保持清洁。这些和其他类型的瞬时开关可能需要去抖动。

<强> 去抖动

当FPGA板没有提供去抖动时,我们的想法是以数字方式滤除所有这些反弹并生成一个显示按钮被按下的事件。这需要一个时钟。

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

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

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

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

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

过滤出跳出

当按钮无效时,将亚稳态过滤按钮信号输入计数器作为重置。当您松开按钮时,计数器将被清除。

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

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

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

另请注意,当按钮输入为亚稳态滤波时,它将作为同步复位。

边缘检测

使用触发器完成边沿检测,其中终端计数信号作为输入和双输入门,其输入门的类型和极性可用于选择事件的哪个边缘(可能你检测到的都是XOR门。一个来自触发器的门输入,另一个来自计数器的终端计数。

如果您认为通过FPGA电路板设计充分提供去抖动,您可以将亚稳态滤波和边缘检测结合起来,而无需使用去抖计数器。

Maxim的应用说明

如果你有一个商业化生产的FPGA板,你不必担心数字信号电平之外的电压瞬变,Maxim的文章正在向电路板设计师推广它们的保护器件。

网络文章提供了关于开关反弹和反弹波形的权威参考。

FPGA主板供应商

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

答案 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;

但是,如果你遇到误报问题,你可能还想看看信号的上升/下降时间与时钟的关系。