|
Dear all
1 d: f8 ~- t7 n9 p7 ~# n$ M小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,# t& g0 h% p0 e
裡面包含的功能有power/reset/LED control, hardware watchdog,: Q! D1 P9 f! z& A0 l
slide switch/push button detect, CPLD to CPU interrupt event,4 y( Q u8 ^: u' P+ v
CPU read/write CPLD register這些功能,
* E( f; @ A& u! P8 t. k: C4 q在開發時,為了能夠快速的看一些裡面定義signal的狀態,* x2 N) N" D1 Z# }
就在外面接了7顆chip type LED做debug用,
$ f7 s2 | Y ^4 S! j9 x1 o+ r% x而這7顆LED是拿來看slide switch/push button以及interrupt狀態,. M. _1 w8 ?3 P4 k9 p
而slide switch/push button只要有動作都會發interrupt給CPU,; B2 |7 ~' r1 Z- ]- u/ M
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,+ Y( \, B1 M2 }. D8 C
而slide switch/push button的interrupt event "AND"起來後,, I* w- [$ A' S& K4 q! o9 _/ y% X7 O4 V% _
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;/ v& z! E" I T7 ?4 k$ B' o
只要這兩個功能的process同時compile,nINT在high or low level,0 |/ E$ v! C4 d l1 I* `- z7 H" g/ l
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,8 Q; Z: }# j1 v' F1 H3 d$ u
但各別把各自的process mark起來不compile就會正常," P+ T5 l2 F5 h/ }* S
在修改code以後,已經有解決這問題或應該算是改善吧,, X* W; C" [, x7 w
因為更重要的問題來了,我把debug LED拿掉,: e3 r; k9 A! {
這兩個要發給CPU的interrupt功能就出問題,
Z/ D/ M9 X a% t只要把debug LED的東西留在code裡面,就正常了,, m5 P" _3 v4 Q2 i; \0 U/ P8 N
不知道板上個各位前輩有遇過這樣的問題嗎?, F: u8 K( r. _9 y% f) }
% | p" Q- V+ K. h; sexample:$ ?% L0 A4 b. H, ?
......
9 M1 W+ G9 R. j5 H. [port(, C% ?. }# F: e5 b5 u# V {
nINT : std_logig;
" L3 P9 y! l/ n- e9 y) dLED_S : std_logic;9 h2 O% d: ]4 s( [0 U/ s, V
LED_P : std_logic o% L# h( d6 j; l. N; G0 R
);& R* t3 y U6 _1 s8 Z/ d
......
' l9 j$ c& I4 o0 [! a0 L- s* }signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
" j$ t3 `+ k9 k F% y- N4 u....... V, |: p. W# c8 ?: ?
begin- o1 f# D5 T6 s5 v8 k
nINT <= nSLIDE_INT and nPUSH_INT;; x; u! b7 `0 t. D5 E2 J
LED_INT <= LED_SLIDE and LED_PUSH;
# v% b0 R; z- r) L, a2 q4 zLED_SLIDE <= nSLIDE_INT;
+ W" i, j0 s3 m8 X* x, x. u3 ULED_PUSH <= nPUSH_INT;6 B' U0 F" `. u5 G. p {/ f
......+ ^2 r% o6 a, v n& T8 }0 Y
(包含的process如下)
0 o; k9 w4 z. r/ ]( B# V) ^power control process) Z8 V' B% Z: R0 U5 U: |0 D" @" N: E
reset control process G: ^) i9 ~) `6 y9 I
watchdog process
% q! F7 f; ~$ ` x) @read process
. _3 K2 a3 N6 x7 hwrite process. s. b$ Y( X9 T- a! y4 o
slide switch detect and de-bouncing process) Z7 t' d6 ^! Y; z4 o% O2 ]4 |
push button detect process
: V, N. [6 P. h2 C* |$ e7 tslide switch interrupt event process
0 n( s( G8 y6 e5 h; tpush button interrupt event process3 ~5 j6 ?8 ?- e% L% _
......8 O" k' y! P2 z/ E4 Z: I9 _7 i
. O+ W. n5 u$ G$ `8 w) P$ R現在的code上面的寫法已經正常,5 I9 l. k7 t: i6 L. Z1 \
但是只要把這三行都mark起來,
" {5 ]% m6 U! _! aLED_INT <= LED_SLIDE and LED_PUSH;
$ n- o$ X9 v- }LED_SLIDE <= nSLIDE_INT;
( N. y& ^$ z8 }/ w" M- O4 I( qLED_PUSH <= nPUSH_INT;
/ f# X( _% S! f" ~整個code動作就不正常了!
+ p# }1 V+ e1 F0 ?3 q7 `我是用Altera EPM570 -5ns那顆來做,
. k4 d* f4 O) A7 |不知道說這麼多有沒有表達清楚,其實有很多問題想請教,) `# Q( h8 j7 m$ M. E: n
不過還是希望能夠先把這問題解決!
! h7 _- x" v( E7 [ q& X7 e希望各位能給小弟一些建議,謝謝! |
|