CHA 发表于 2010-6-26 01:45:43

fpga防抖程序的原理是什么?脉冲?时钟周期?

fpga防抖程序的原理是什么?脉冲?时钟周期?

我仿真了一个仿真程序,发现无论输入的脉冲宽度多宽(外界按键按的时间),输出的都是一个时钟周期的宽度.哪这个时钟周期一般应该是多少啊.另外如果我程序中需要另一个快一点的脉冲.系统中可以用两个时钟吗?

CCIE 发表于 2010-6-26 03:45:22

可以用两个时钟<br>
防抖就是用一个时钟对外界的输入信号多次采样,如果多次 采样的值都有效的话才输出有效的值

CHANG 发表于 2010-6-26 04:54:17

这是一个防斗程序,可以详细解释下吗,我看不懂<br>
library ieee;<br>
use ieee.std_logic_1164.all;<br>
<br>
entity dou is<br>
port(din,clk:in std_logic;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;dout
        http://bbs.vibesic.com/images/smilies/default/shocked.gif
ut std_logic);<br>
end dou;<br>
<br>
architecture beha of dou is<br>
signal x,y:std_logic;<br>
begin<br>
process(clk)<br>
begin<br>
&nbsp;&nbsp;if clk'event and clk='1' then<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;x&lt;=din;<br>
&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;y&lt;=x;<br>
end if;<br>
dout&lt;=x and (not y);<br>
end process;<br>
end beha;

UFP 发表于 2010-6-26 05:08:59

这实际上是一个滤波器,也有防抖的作用,通过两级的移位寄存器实现<br>
假设din输入的信号中间有跳变的时候<br>
则x和y的值会不一样,<br>
如果x=0,y = 1,则dout= 0,也就是把din上的高电平毛刺滤除了;<br>
如果x=1,y=0,则dout=1,也就是把din上的低电平毛刺滤出了。

UFO 发表于 2010-6-26 06:56:07

你们一般用什么防抖程序啊?

ANG 发表于 2010-6-26 07:54:46

根据防抖的要求不同,设计也不尽相同。但都是一个低通滤波电路,区别在截至频率上。

longtim 发表于 2010-6-26 08:31:58

我是想在cpld外有一个按键,用手按一次计一个数.类似电话机的上翻下翻键.按一次显示内部存储的一个数

interige 发表于 2010-6-26 09:17:51

从你的描述来看,好像不分长按和短按<br>
如果确实是这样,假设没有按键按下是,对应的电平为高,有按键按下是对应的电平为低,则需要检测上升沿<br>
防抖的作用就是检测到有效的上升沿而非伪上升沿<br>
这种情况下可以用一个低速的时钟采样这个信号(一般人手按键的反应在ms级,根据这个确定采样时钟频率)<br>
把采样后的信号可以作为你的计数器的输入信号

CHAN 发表于 2010-6-26 10:33:25

是啊.但是我还需要一个高速时钟us级的,那么就是两个时钟了,编译的时候老是说clock is complex

FFT 发表于 2010-6-26 11:54:34

两个时钟域之间的数据是怎么传递的,时钟源是什么?
页: [1] 2 3
查看完整版本: fpga防抖程序的原理是什么?脉冲?时钟周期?