|
Dear all
7 t4 }$ v; d# l: y. m小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
' K: y5 l$ h5 e4 i裡面包含的功能有power/reset/LED control, hardware watchdog,* q5 J& \# j! n7 @1 {( D
slide switch/push button detect, CPLD to CPU interrupt event, g0 I. B; s: t/ n% q% F1 y6 S
CPU read/write CPLD register這些功能,& N/ a% V D. E. X
在開發時,為了能夠快速的看一些裡面定義signal的狀態,. A6 ]8 {) G# ]( r! O
就在外面接了7顆chip type LED做debug用,
! G" h7 r5 o% p" l" [2 d而這7顆LED是拿來看slide switch/push button以及interrupt狀態,- ^! |& x/ j5 \- w+ U
而slide switch/push button只要有動作都會發interrupt給CPU,
8 m' C4 r7 l# T- |2 U) F( `% H這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
; u) g4 L3 `# J4 c2 k3 V而slide switch/push button的interrupt event "AND"起來後,
- t4 @/ k! [9 S7 b# U* ~9 p/ L* @再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;5 i, D' o( z! t. d! Z
只要這兩個功能的process同時compile,nINT在high or low level," G# V* `2 e; X9 y* N/ m
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
6 E q' z+ ?, z0 ~, l但各別把各自的process mark起來不compile就會正常,5 V) p( D: H5 k' E5 K
在修改code以後,已經有解決這問題或應該算是改善吧,5 R# c) B/ u9 D) R% G, ^5 [
因為更重要的問題來了,我把debug LED拿掉,8 o/ s% _4 t5 ^) n- {4 t" _" B
這兩個要發給CPU的interrupt功能就出問題,
) R8 `, g1 w _. P6 G只要把debug LED的東西留在code裡面,就正常了, r; g0 R' U6 Z7 Y3 c/ g# D/ i
不知道板上個各位前輩有遇過這樣的問題嗎?
) L% ^0 B1 L7 n' z1 q) V* e2 P+ W6 l& t. F0 ]$ F5 r0 G
example:5 u" ]' p" M, a
......& Y' L0 B( F X
port(- p, Z. u1 W% H' f& v
nINT : std_logig;
! u; ~) {! _$ B& a) U5 S9 i! _" RLED_S : std_logic; i: ~$ _. C1 _: p7 \
LED_P : std_logic
# a2 w) O0 O# U' u% _);
( i; d9 c9 _8 M5 t9 Y6 _......
+ m# C) e' m y% o9 rsignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;$ `" L$ f9 n7 T9 B8 k
......
+ v1 s% w6 ~) [% obegin
9 {7 [2 J' l' w. s- F; G/ NnINT <= nSLIDE_INT and nPUSH_INT;
4 w, U$ `' u, ^8 bLED_INT <= LED_SLIDE and LED_PUSH;/ y' V& I1 i5 w) A6 K$ Y/ V R* V/ K
LED_SLIDE <= nSLIDE_INT;
- ^5 Z+ {5 K* }: O! O" ^: y% e' g! v' RLED_PUSH <= nPUSH_INT;6 X; k7 ^1 f- B9 X
......
0 ^. H. L/ T- u, \# l. D(包含的process如下)3 [3 q# g( T/ b% Q( c/ R
power control process2 S7 E; E# q6 Z
reset control process4 ?; M, C( R( S: ~& Q. E, j3 k) m* I
watchdog process, t5 V; z: t! i
read process6 T$ R m( Y) A& e# I
write process6 G/ L; A- s6 }& I. @
slide switch detect and de-bouncing process- A2 [$ ]4 r) Z$ n8 r2 O: X
push button detect process# r3 H# g6 p6 d9 C4 ]
slide switch interrupt event process
0 a; h5 u _' ^" K; ?8 y$ t# Epush button interrupt event process
9 L; w% m) x2 w! [( O4 U......
m4 @/ ~5 T8 m5 O' y/ X( F2 z, n' Q9 l
現在的code上面的寫法已經正常,: A; y# G4 m X. m. h" V$ n
但是只要把這三行都mark起來,
! R. F. l- P% G" ELED_INT <= LED_SLIDE and LED_PUSH;
' h7 K# E2 G0 {1 yLED_SLIDE <= nSLIDE_INT;
2 Z7 M( o5 b0 ]& e2 M% TLED_PUSH <= nPUSH_INT;8 i/ @8 k1 O- Q# m
整個code動作就不正常了!
. Q) H8 y0 |9 y- A. J- f我是用Altera EPM570 -5ns那顆來做,
- }5 P* c# C$ {4 O& L7 d不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
9 [0 k/ H2 L$ b2 _7 {( s: b( H不過還是希望能夠先把這問題解決!9 y' x" d/ ]" w2 U
希望各位能給小弟一些建議,謝謝! |
|