標題: Vhdl 彈跳開關 問題 [打印本頁] 作者: hope1014 時間: 2009-1-8 09:26 PM 標題: Vhdl 彈跳開關 問題 LIBRARY ieee; : v; Z, G1 S; R0 G$ I h* h3 P. M
USE ieee.std_logic_1164.all; . B* E" O+ o( d: G/ O1 BUSE ieee.std_logic_unsigned.all; 0 n9 w6 N2 J3 z XENTITY SWSTOP IS . | x T' k! Q/ F9 A7 Z PORT(Hand : IN STD_LOGIC; . Q/ T& z7 G4 ?9 F. S$ g. x CO : OUT STD_LOGIC) ; 7 w9 L, U; @! P! H. j
END SWSTOP; , C3 ?5 _6 O" z2 J; L$ HARCHITECTURE arc OF SWSTOP IS 1 x/ j. Z4 R9 ` A0 a; W2 R BEGIN * x" t' A: u9 F4 f' P9 V; A PROCESS (Hand) , ]3 k# {! @8 H7 E) W9 I/ C% u VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00"; - E1 R" t" E+ I1 a: D& K3 m * j# t6 r3 p% F g BEGIN- K) U# `2 m( m" A
( ~9 ~ O) @# \) s# ]* y$ o2 w
IF (Hand'event AND Hand='1') THEN 1 q1 G+ k4 I- g; ^4 F
t9 V. X) C6 V; w/ h IF imper <"11" THEN imper := imper+1; 7 u% G. D7 I! z# m/ R: F4 @7 i ELSE imper:="00"; 1 ^6 M- T+ ?; t+ ]2 `7 e% D 4 X4 y4 m1 W1 g8 k! {4 F- M+ s
END IF; # Y/ C" y$ [; S% S) s END IF;# s. b* d1 c6 [2 U. T
6 ?6 z% T! d" W CO <= imper(0) ; 7 X/ [/ r" W6 \# m' \6 H! ]) a END PROCESS ; : A1 S) Q3 m+ o( ?5 ?+ g$ K7 | / B+ m/ ] U! ]5 f
END arc;: G" O0 g/ H+ }4 f- p' J: I
: J$ a4 q: _8 a( y! s- |以上是我設計的開關 ' v$ ?9 z# h9 [可是好像沒有彈跳功能?! ( p, j0 K7 G1 K0 Z1 {& Z我的問題是 8 o' i# I2 L* K$ R5 e按一下的時候,應該 -1 1 b2 e/ B3 H( {# v( ?但是有時候會忽然 -2 -3 ..... 9 [6 Z) t$ z& J! \' @& k是沒有同步咩?作者: ssejack1 時間: 2009-1-12 09:01 PM
如果您的 hand 是由 push button 按而產生者建議要加入 debounce 功能,否則在彈跳暫態會觸發.......?次作者: ICKELL 時間: 2009-1-13 12:10 PM
VHDL Debounce_Process 寫法,你也可參考ISE VHDL範例 " |6 l, K' b8 i3 T# D' G+ E, |
4 q- [" g$ P5 h/ f! Y1 X2 h5 j
process(clk,button) " I, t! n) p) J. ` begin 3 F3 R' `+ i n/ I& |/ t if clk'event and clk = '1' then7 D* E3 @" g* [ \% Q3 _* g3 I! l
button1 <= button; 4 P- K& K, t# C: _( o% { end if; 2 a# X. w( R) s4 N5 t* T- l end process Debounce_Process; : W+ L/ y/ P( G: w+ N mybutton <= button1;作者: slam 時間: 2009-3-17 12:41 AM
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.5 R" i/ X4 _' `7 ^6 \9 m! T
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側. ) D1 O; K0 t: p7 l可以使用一個較慢的頻率來做取樣控制.作者: osabado 時間: 2009-3-24 09:26 AM
網路上有些Debounce程式你可以參考- g2 s2 u' y. z
7 e! a. {2 y+ w: ^/////////////////////////////////////////////////////////////////////////////// $ b( j8 A. L& p7 p \# }. D// ' H, G1 ?' ]4 u/ ~- T' \// Pushbutton Debounce Module : s6 E: p [9 N+ v* G; [
// , l8 O* V3 J+ e" h, O V( g" p: {5 u' Y/////////////////////////////////////////////////////////////////////////////// ' M" Y) [: z3 I: Umodule debounce (reset, clk, noisy, clean); * u2 e9 K4 l" j X) {: F* K input reset, clk, noisy; 1 z0 l1 p$ x, y: T output clean; 0 ?- x Q+ O. V - l; D" p, `% x3 {9 G- X parameter NDELAY = 650000;# i. u* ^$ N5 y3 U
parameter NBITS = 20; * n S$ a0 _6 v1 Y# D# }. o6 Z J2 M2 d1 u7 Z$ [% D$ I4 K
reg [NBITS-1:0] count;& d9 Q8 Q* y, E: y) @/ ]
reg xnew, clean; 7 a: a$ a2 Z* @% m* u: W6 B! \; X# {& E1 R! @$ K& q
always @(posedge clk)3 V+ [ d3 n9 M! F6 ?5 I2 E
if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end9 s+ T, h/ p6 v% E' @* E- }
else if (noisy != xnew) begin xnew <= noisy; count <= 0; end 2 h: {/ |& z" I- Y else if (count == NDELAY) clean <= xnew;( z3 R s( C; w, }6 [: e8 R7 p
else count <= count+1; ) [) O, M% h* f& m& g8 S" @" L! F n
endmodule作者: abore2009 時間: 2009-6-19 10:51 PM
感謝debounce的code介紹分享$ V& u# u L* y4 K
機械開關的確需要考慮數ms的彈跳6 O7 w' z7 d3 J( u7 z$ T( X
不然開關驅動會造成災難!