|
Dear all
9 _' e0 y9 B: D4 c' x小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
$ f. @" @- e) Q; H% Z$ t/ X8 M裡面包含的功能有power/reset/LED control, hardware watchdog,
7 f8 u! e* ~1 W- P+ _" Pslide switch/push button detect, CPLD to CPU interrupt event,
& y( o9 i) `3 I4 sCPU read/write CPLD register這些功能,: d5 C0 Z0 G& G! }; u
在開發時,為了能夠快速的看一些裡面定義signal的狀態,
: [6 T; w: R, Z# |# f& H( H* f$ t, f. P就在外面接了7顆chip type LED做debug用,6 I: N* ~, y7 ?
而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
7 |! m* C0 C& S2 o3 N而slide switch/push button只要有動作都會發interrupt給CPU,
( d5 q4 F( F( U# [" [這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,$ Z" \: B7 y: o2 h* \4 G
而slide switch/push button的interrupt event "AND"起來後,
* t" o: E& I! ~6 y, A7 J% l4 `2 j再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
7 k) b! L$ F0 T' i8 J只要這兩個功能的process同時compile,nINT在high or low level,7 }8 M+ Z3 J# F: X. v7 |- z$ L9 [, ~
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
5 c" s9 W7 \, b9 {# O5 |但各別把各自的process mark起來不compile就會正常,
! X- W' l) j: K% l在修改code以後,已經有解決這問題或應該算是改善吧,9 ]# W' k, `# o6 a2 g" J
因為更重要的問題來了,我把debug LED拿掉,1 s2 {! M( D# Z# A
這兩個要發給CPU的interrupt功能就出問題,
) M7 {% z0 X7 Z# Y/ L9 T, Y* \只要把debug LED的東西留在code裡面,就正常了,0 p( j9 X+ d( `& a. ^3 e
不知道板上個各位前輩有遇過這樣的問題嗎?1 y5 W4 \; E; l
8 ]$ J% o' X9 v: X+ f
example:
3 E4 R$ M0 }+ a7 L+ S1 H. j: k......
2 B9 t, k' `; e, Y8 tport(" a' {, h3 X9 u0 V: `
nINT : std_logig;+ }- u6 P k% X# }
LED_S : std_logic;/ t' c! B: ` K& i. C! n
LED_P : std_logic
" X' B% i+ n. m: N; d" L8 v);/ S8 M7 ~: g8 f5 x# m. H
......
2 V0 L' W& T- F9 j% Nsignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;+ P3 h$ v9 x) G6 U) a6 X1 f/ X
......
$ F6 c; ^) m7 F. ^ xbegin
5 c2 P/ m6 @8 G( znINT <= nSLIDE_INT and nPUSH_INT;: g. P& l" d5 o
LED_INT <= LED_SLIDE and LED_PUSH;
7 r9 b( O9 w( i2 pLED_SLIDE <= nSLIDE_INT;2 r8 l5 f3 S: B0 r: i
LED_PUSH <= nPUSH_INT;
! z5 y* L& B8 K' @1 b/ F2 L6 N......' E9 r' m* A( O* e0 y
(包含的process如下)
) l# m. `7 h" apower control process
( I) o) t+ |) O0 ]. N0 g, treset control process
; K6 O* U: L. n$ p& C( Hwatchdog process
& `! T3 n" `7 b6 Rread process x5 ^6 T- Z. j1 C i
write process
! o5 N7 w+ _- B2 [- T6 X) O5 Qslide switch detect and de-bouncing process- ^6 o! [2 i7 Z* i9 G$ p
push button detect process v8 J ^( f' g# r7 u/ g* J
slide switch interrupt event process" N- D/ F# H- n. H- F6 Q+ \
push button interrupt event process# V8 o; f* m* F, C
......3 ~ c1 `) n! @& m
/ ^* r. l4 V" t現在的code上面的寫法已經正常,
5 U# ~+ K9 v& W8 R$ t7 @但是只要把這三行都mark起來,
* \! i$ C: v( C% e+ T' a: E5 yLED_INT <= LED_SLIDE and LED_PUSH;
3 o) P2 T; u, h8 K5 ?8 E( rLED_SLIDE <= nSLIDE_INT;
- C5 y8 {# t- W6 YLED_PUSH <= nPUSH_INT;
+ i6 |) k6 e/ z0 z1 e; N整個code動作就不正常了!& s9 N9 y( Z4 O' D
我是用Altera EPM570 -5ns那顆來做,& ^. x& R% W* L
不知道說這麼多有沒有表達清楚,其實有很多問題想請教,' Q" s4 W1 X/ b) H9 F, u
不過還是希望能夠先把這問題解決!( W) G; [$ x7 D& H+ [) g/ F
希望各位能給小弟一些建議,謝謝! |
|