use*_*915 2 vhdl edge-detection
我是VHDL的新手,我有一个按钮,我想在按下按钮时检测它的信号,这意味着我想在按下按钮时检测它的上升沿吗?
我进行了研究,发现的所有内容都与检测clk的上升沿有关。
我的问题是,当按下按钮时,按钮的信号将变为1并保持为1,直到发生另一个信号为止,所以当按钮的信号升高时,我会更感兴趣吗?
您的惯用英语问题:
我是VHDL的新手,并且有一个按钮,在按下该按钮时我想将其检测为上升沿。
我进行了一些研究,发现的所有内容都与检测时钟的上升沿有关。
当按下按钮时,按钮的信号将变为“ 1”,并保持在“ 1”,直到发生另一事件为止。
如何检测按钮上升沿事件?
这不是VHDL问题,而是数字设计问题。VHDL在实施VHDL解决方案中发挥了作用。
请参阅sonicwave对问题VHDL的回答-在按钮事件上增加寄存器值,该事件提供了一个边沿检测器。
但是,开关抖动可能会持续数十毫秒(有关开关抖动的最大值Web文章),可能会产生多个事件,并且取决于开关,并且纠正措施也取决于采样时钟速率。
请注意,Maxim网站上的文章提到膜开关在新的时候可以无弹跳,并且随着时间的推移会退化,并且弹跳特性不可重复。
一些FPGA供应商在按钮之间提供了一个Schmidt触发缓冲器,并声称薄膜瞬时开关随后会被“去抖动”。Maxim的网络文章声称,薄膜开关在其使用寿命内可能不会保持清洁。这些和其他类型的瞬时开关可能需要去抖。
去抖
当FPGA板未提供抖动消除功能时,其想法是以数字方式过滤掉所有这些抖动,并生成一个显示按钮被按下的事件。这需要一个时钟。
首先将按钮信号输入您的时钟域
这需要亚稳滤波,这是通过最小化两个连续触发器之间的延迟来实现的,以最大程度地抵抗当第一触发器遇到建立或保持时间违规时在第一触发器的亚稳区域内发生的事件。
第一触发器的输入是按钮信号,第二触发器的输入是第一触发器的输出。
第二触发器的输出在时钟域中,当不超过代表两个触发器之间的路由延迟以及触发器的亚稳态恢复时间的周期的时钟速率时,就没有亚稳态。
触发器的亚稳态恢复时间通常由FPGA中的最大时钟速率周期表示。
过滤反弹
当按钮无效时,将经过亚稳滤波的按钮信号馈入计数器以作为重置。当您释放按钮时,计数器被清除。
计数器的大小取决于时钟速率和开关跳动的长度,您可能需要数十毫秒。
终端计数表示有效的按钮事件,也用于停止计数器。(终端计数为FALSE是启用计数器)。
计数器停止以提供单个按钮事件。
另请注意,当按钮输入经过亚稳滤波后,它将充当同步重置。
边缘检测
边缘检测是通过触发器完成的,其中将终端计数信号作为输入和两个输入门,门的类型和其输入的极性可用于选择事件的边沿(可能同时使用XOR门)检测。一个输入从触发器输入到门,另一个输入从计数器计数。
如果您认为FPGA电路板设计已充分提供了防抖动功能,则可以将亚稳滤波和边缘检测结合起来,而无需使用防抖动计数器。
Maxim的应用笔记
如果您有商业生产的FPGA板,则不必担心数字信号电平之外的电压瞬变,Maxim文章正在向板设计人员推广其保护器件。
该网络文章提供了有关开关反弹和反弹波形的权威参考。
FPGA开发板供应商
一些FPGA板供应商提供了去抖动电路参考设计代码。他们之所以这样做,是因为计数器的大小取决于参考时钟速率,并且所使用的时钟可能由DPLL派生。