標題: Vhdl 彈跳開關 問題 [打印本頁] 作者: hope1014 時間: 2009-1-8 09:26 PM 標題: Vhdl 彈跳開關 問題 LIBRARY ieee; ; y6 X9 t' p! h. V5 d$ b1 G$ iUSE ieee.std_logic_1164.all; A6 X4 r h! j0 q- P9 m$ N9 q! DUSE ieee.std_logic_unsigned.all;7 T9 ? n% s& s' u
ENTITY SWSTOP IS% r- O" D- b+ W4 O- Z2 l' S- x
PORT(Hand : IN STD_LOGIC; . M9 C. Q Z* k* P; H; \; B+ D
CO : OUT STD_LOGIC) ; & [+ D1 b' g# A) w& c5 d
END SWSTOP; ' E; h! D$ ]4 S6 u* RARCHITECTURE arc OF SWSTOP IS4 a& f8 x' V2 [. ^, g
BEGIN# j$ X, z/ i2 ]$ A" D. J: |
PROCESS (Hand)( s4 E s( V+ Z, B: u; V( K: O
VARIABLE imper :STD_LOGIC_VECTOR(1 downto 0) :="00";3 ? s! @7 M6 P! q0 ^
7 _/ d% [9 C; Z6 U, L5 q/ v
BEGIN7 `# s6 A' W3 {5 D+ x* k' a% ~( B
* V6 e# a5 J7 W5 W: s* N IF (Hand'event AND Hand='1') THEN - _, g }$ f2 L+ r5 Y& K3 u# u: Z# w
; V, F; d5 T. c( _+ j
IF imper <"11" THEN imper := imper+1;$ o) S Z* d3 \5 m) m9 N7 I5 f
ELSE imper:="00"; ( K5 X K. z' L5 K! d$ [7 O F % y6 A% ]$ ?2 _/ M! n. o9 d
END IF; 2 m( T- L9 x+ [# |
END IF;! A4 k& f6 F5 V b
* ?; B- \3 `. h, S9 o& l CO <= imper(0) ; ( ]2 c q8 J$ Y/ s6 Y1 E; S( X
END PROCESS ; * W1 i" c* z7 c$ L+ z# {5 k! R % t v l% J A' n8 sEND arc; 4 n! D! M) j; t b4 C) J" f' n- A8 o6 E, z1 L
以上是我設計的開關( F( | C6 X" q# L
可是好像沒有彈跳功能?! + k" ~- ?& @3 o" v4 t- o2 k我的問題是; |3 F( o) C$ u8 ~7 N- _
按一下的時候,應該 -16 D" Q# x; l7 N4 s7 I& H/ P
但是有時候會忽然 -2 -3 ..... / x" i4 A& ], T是沒有同步咩?作者: ssejack1 時間: 2009-1-12 09:01 PM
如果您的 hand 是由 push button 按而產生者建議要加入 debounce 功能,否則在彈跳暫態會觸發.......?次作者: ICKELL 時間: 2009-1-13 12:10 PM
VHDL Debounce_Process 寫法,你也可參考ISE VHDL範例 5 f# _5 P5 J; d- I3 z$ w
, ?. r ^/ m, n* x6 ]9 c7 k
process(clk,button) 0 D. J: z1 _9 [8 o( P begin ! ]/ f. k- ~6 _# m& ` v if clk'event and clk = '1' then: |! C5 v% t6 [8 K& e! x
button1 <= button;2 y% ?' ~" }( O6 L- R& _
end if; # t4 s1 g1 ~4 l" m; r: j end process Debounce_Process;( P( Y+ L' ]) Z9 ?
mybutton <= button1;作者: slam 時間: 2009-3-17 12:41 AM
應該是按鍵開關彈跳的問題,當在按下和放開的瞬間,會有些微小的震動現象.& g. k; _* a/ H4 |$ _
由於按鍵訊號的數位處理方式,可能將這些震動轉換成高頻率的雜訊依附在實際ON/OFF變化的兩側. F& j7 `5 Y; ^4 F$ H* H可以使用一個較慢的頻率來做取樣控制.作者: osabado 時間: 2009-3-24 09:26 AM
網路上有些Debounce程式你可以參考% z# L$ L1 j3 L1 W2 [& c. G0 Z
; _$ [; g# y! i/ P4 N% X+ J/////////////////////////////////////////////////////////////////////////////// 4 N3 Q# b/ U/ u Y9 a, x" O// 7 w b" K. ?0 b& m/ W/ W e3 w2 c// Pushbutton Debounce Module 4 w2 c- s" Q/ W+ P5 o* [: b& Z
//- P5 z e$ i" ?" \ |, b, m
///////////////////////////////////////////////////////////////////////////////" A [( j! C2 Z7 X
module debounce (reset, clk, noisy, clean);8 G: ]7 o- [9 ?1 |% D. \
input reset, clk, noisy; $ |8 t: L0 ?" P) ^/ {" { output clean;6 _3 N" M0 T1 I
% R* i+ |! e' Y8 T2 i/ k parameter NDELAY = 650000; ( O1 p# p4 A0 D% f ? parameter NBITS = 20;- p6 y W% t4 c% r3 q# c: N
+ b$ l7 j3 [8 |6 w2 X0 [* a3 j
reg [NBITS-1:0] count;% W3 l2 P; R: X5 J. ^9 [% u+ b- }
reg xnew, clean;/ C& l" l {/ H. e
8 H. o s7 Y- a6 x" E; J. S always @(posedge clk)+ z5 c$ s1 C! q, j
if (reset) begin xnew <= noisy; clean <= noisy; count <= 0; end 0 p' ]: d- m) n! [/ Z else if (noisy != xnew) begin xnew <= noisy; count <= 0; end / E0 \' v! Z; W else if (count == NDELAY) clean <= xnew; 7 v1 L+ G g8 p else count <= count+1;/ @% M- w1 X1 g" n! `
# k( O4 t$ }- l; X3 Z/ ]8 t# ?6 r, Kendmodule作者: abore2009 時間: 2009-6-19 10:51 PM
感謝debounce的code介紹分享$ s/ H- S y% V6 \% B( ^/ s5 K# e
機械開關的確需要考慮數ms的彈跳1 e; \/ C {; k$ @; c
不然開關驅動會造成災難!