|
Dear all
0 L/ P) O, r9 Z/ S; }3 L; K小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,; w! M: t5 _, u4 J) z0 W n6 k$ b' Z5 M9 p
裡面包含的功能有power/reset/LED control, hardware watchdog,* b* E5 [ {: J6 a l# U
slide switch/push button detect, CPLD to CPU interrupt event,3 ?2 H+ [) d! L* v
CPU read/write CPLD register這些功能,7 P3 d) ]- N' p- K. H' f5 N# B
在開發時,為了能夠快速的看一些裡面定義signal的狀態,! S* L# X) ^/ h* k
就在外面接了7顆chip type LED做debug用,
6 y* C" C' S' {而這7顆LED是拿來看slide switch/push button以及interrupt狀態,0 H; X% }3 K* A& {; f( ?, Z
而slide switch/push button只要有動作都會發interrupt給CPU,
4 ?: t: Q; u; q9 z這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,! P% ]2 \7 g* D
而slide switch/push button的interrupt event "AND"起來後,
5 v3 g- |5 e L z再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
4 J$ m$ f6 ?( x# d只要這兩個功能的process同時compile,nINT在high or low level,! m2 J$ | ^5 R' e6 ^. ^7 x
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,- Y& [4 c3 L& d$ S& A$ N) X0 T+ ^
但各別把各自的process mark起來不compile就會正常,5 b7 ~ G. ^9 ^! Z6 v
在修改code以後,已經有解決這問題或應該算是改善吧,& f/ H; c: T" T$ A. M% ?/ @
因為更重要的問題來了,我把debug LED拿掉,8 m; h B: D1 t& |+ p k* D! G
這兩個要發給CPU的interrupt功能就出問題,
& B, C- s8 c$ @' t$ w( u; o只要把debug LED的東西留在code裡面,就正常了,
. U' J2 l# m3 ]4 \- Z( y! g不知道板上個各位前輩有遇過這樣的問題嗎?
5 y# S B& ?4 W0 d
. g: K4 s; J: f. L& ]4 [% q1 p) Hexample:
4 w( m4 L5 {. y2 o2 z g......
6 @: Q# _- x% Z, N* Qport(
3 ^' [% J2 t" XnINT : std_logig;
; I p0 @& k! Q0 ELED_S : std_logic;/ o' j1 e2 @7 Z' W' J4 }& M+ K
LED_P : std_logic( m$ e6 p, f$ C0 w6 i8 J, g/ Z
);
0 ^5 |1 n6 ?1 P c......2 S( K1 {7 s2 G7 @- R; g
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
9 B# q5 k1 ~; z" {......* C6 ?- ?1 @ J# u
begin$ @7 V1 I0 E% [; D
nINT <= nSLIDE_INT and nPUSH_INT;
- B' {. F3 q/ n$ M- }0 x' u+ O- CLED_INT <= LED_SLIDE and LED_PUSH;
2 E9 u6 c9 [- }. I- V" pLED_SLIDE <= nSLIDE_INT;* w q3 a3 V; f1 C
LED_PUSH <= nPUSH_INT;2 m2 n" O. M' }5 k- ^0 t4 {
......
$ O, O, P5 ], M8 d9 A9 _(包含的process如下)
z" q: l8 Q& \$ L% q! ^" ypower control process% T( |4 o) ~+ d9 H4 |* ?, x
reset control process
, e) J1 W( R; K* owatchdog process
; b, Z- p" R d! K$ A! mread process% \5 V0 x4 Z& p% u7 g1 m
write process
# G @* X4 A' V& ?. X1 i" V1 Rslide switch detect and de-bouncing process1 z8 t- M0 }4 v p* U& L9 e& b
push button detect process
% Z1 O& w* V7 {& m/ i. mslide switch interrupt event process
+ N/ u7 A* | }) Apush button interrupt event process/ h- J' t4 i& g: o
......3 s3 b6 W9 x1 L) m* A0 V7 C9 Y% u
9 z* G. a4 x6 \: W, F現在的code上面的寫法已經正常,2 z$ O4 h+ F5 r& y: T8 @
但是只要把這三行都mark起來,, ], h4 x. g$ q) V/ d
LED_INT <= LED_SLIDE and LED_PUSH;) }( V* h ^% ` M
LED_SLIDE <= nSLIDE_INT;
8 H$ Q8 z% [3 oLED_PUSH <= nPUSH_INT;1 v7 K5 e, g7 \! B
整個code動作就不正常了!9 p+ i& G- c) r& y
我是用Altera EPM570 -5ns那顆來做,
; {4 b6 |, S5 l不知道說這麼多有沒有表達清楚,其實有很多問題想請教, y+ w. c4 |1 J6 g
不過還是希望能夠先把這問題解決!! C5 ~7 {/ S: ^ f) w) y9 G5 T
希望各位能給小弟一些建議,謝謝! |
|