Chip123 科技應用創新平台

標題: CPLD因移除LED控制造成code動作異常 [打印本頁]

作者: vatic    時間: 2009-3-13 11:27 PM
標題: CPLD因移除LED控制造成code動作異常
Dear all
$ b+ x$ {. T( X" [. d" N小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
" l, C+ j1 ~* G; t( Y4 L裡面包含的功能有power/reset/LED control, hardware watchdog,
; _; _. Z+ D. N' qslide switch/push button detect, CPLD to CPU interrupt event,* o) ]% T7 J/ O, u
CPU read/write CPLD register這些功能,
8 z7 z3 k, b( x8 D- V" \; S1 w在開發時,為了能夠快速的看一些裡面定義signal的狀態,
( i- W( g# L' o. M3 T就在外面接了7顆chip type LED做debug用,
2 U2 Y: a% A9 j4 ?& U5 r1 `而這7顆LED是拿來看slide switch/push button以及interrupt狀態,6 O# F+ k* `& ~- v
而slide switch/push button只要有動作都會發interrupt給CPU,5 ?4 f- N, |/ i- F" t
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
1 ]+ l1 G3 ]' A* s9 R而slide switch/push button的interrupt event "AND"起來後,
1 s3 T, X, l% v( K8 p再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
" o! @0 S. ~1 S( [' v只要這兩個功能的process同時compile,nINT在high or low level,8 K% i. c# Z( N
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
8 }6 {; ^* x; m8 J但各別把各自的process mark起來不compile就會正常,9 K' s- o: ~( m' \; n, F
在修改code以後,已經有解決這問題或應該算是改善吧,
6 s8 C4 x) |2 t3 a因為更重要的問題來了,我把debug LED拿掉,  c  _: q# _% b
這兩個要發給CPU的interrupt功能就出問題,
, ]8 m% I1 c, ~; H/ Z' |只要把debug LED的東西留在code裡面,就正常了,0 p6 o, b( [$ d
不知道板上個各位前輩有遇過這樣的問題嗎?
) k: X* A# b0 @) g& ^$ K4 U- E1 n( K1 k; j4 s
example:
0 u# e1 S7 d7 E$ f......% q% K% u: `$ T1 q5 _9 r# R
port(
: Y8 m; q& x7 S/ ynINT : std_logig;4 v0 D/ u; l9 \6 j" U! h
LED_S : std_logic;
! i+ c0 V* X9 \LED_P : std_logic& V* F1 V& t: Z0 q+ T# P
);$ a5 P7 L& L# k6 t/ ?
......5 A! O1 Z6 s& N1 p/ T5 D: e
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;7 d  u5 P, {* c+ N! W3 y% J
......
3 w- x4 D; M& w# }. s! ]begin7 ^2 J8 }6 Q. c7 |& K2 z+ t  Z
nINT <= nSLIDE_INT and nPUSH_INT;) G3 p& N- M) K8 _' ~  z# G1 C
LED_INT <= LED_SLIDE and LED_PUSH;0 p: b9 T  S. [! p2 M  W
LED_SLIDE <= nSLIDE_INT;( C) P: n3 ]. j4 M
LED_PUSH <= nPUSH_INT;* J5 I+ j) e: M( Y
......' f3 ?) d1 k- P6 X( @& k
(包含的process如下)0 \+ u6 `- a% L( N
power control process1 v* p$ H/ v' w5 M3 c1 L9 ^7 E, S
reset control process
* H0 P$ d# @6 B5 n; \7 e$ d! Iwatchdog process
$ M0 D# n" @: y% l$ @. G2 ^read process8 q& V) F" i" E/ p4 Z0 A
write process
7 C/ {1 ^5 U+ R7 p6 B. cslide switch detect and de-bouncing process6 T# e9 F" l6 M) ?5 W2 ?
push button detect process
; Y5 y. a, s4 `# a( a) aslide switch interrupt event process
" y7 |% u$ w& I2 b) W& a" }push button interrupt event process
: t( {# G9 ?9 d1 G2 Y- G......% y7 X3 U4 v$ V4 j

; x% x0 F) t8 ]現在的code上面的寫法已經正常,0 E4 Z) n- \5 m, w! Z: D( J1 Q4 k
但是只要把這三行都mark起來,
6 H$ q$ n* j4 o# A$ b. XLED_INT <= LED_SLIDE and LED_PUSH;
) W1 K) j* ^0 y4 a4 e% XLED_SLIDE <= nSLIDE_INT;; E% ]/ e, O' `' h
LED_PUSH <= nPUSH_INT;
: n6 i6 w) U* [# N3 W整個code動作就不正常了!
. P; }* k8 [$ Q我是用Altera EPM570 -5ns那顆來做,. b" R  D1 p4 H& H2 T# f0 D1 Q
不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
& _2 b$ T8 ?! K& `0 E3 I9 y不過還是希望能夠先把這問題解決!6 r4 m2 f* O+ A: Q
希望各位能給小弟一些建議,謝謝!
作者: hant763    時間: 2009-3-17 09:37 AM
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...6 p$ b! b, C$ H3 Z3 h
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司8 s# Y6 B, ~& x9 G" }, X, B- m
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
作者: vatic    時間: 2009-3-17 09:04 PM
我現在有去多試幾種寫法,
/ ~# a- g6 U: }- v% M  T# S情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,( n$ R3 e- y9 v* ^! H' Z# w' L) H1 l
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
* D7 q/ i# d: w0 }9 U2 QnINT <= nSLIDE_INT and nPUSH_INT;. B0 v6 r+ c8 t/ H
LED_INT <= LED_SLIDE and LED_PUSH;3 X$ \  G% E' l, _
LED_SLIDE <= nSLIDE_INT;: b$ c/ O3 \2 Y& T& T! `
LED_PUSH <= nPUSH_INT;
4 j: a- {* _% _; L- D/ Z! f; T, w- N7 L7 F2 E) ^
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
9 q' o: k5 ~. |' e6 k' B8 ?) ILED_INT <= LED_SLIDE and LED_PUSH;/ a0 A& f0 j: K! P
LED_SLIDE <= nSLIDE_INT;
( U1 _; k4 H: R  N) ]  y; L, bLED_PUSH <= nPUSH_INT;1 i3 b9 \1 Z& D  {
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
; m. c  s$ t4 q
# ?: d# s- E) M* N! _* H% y; R9 x& S# P# ~( X, f- w7 M- s1 |
# x. b  ]% w: b9 M3 J! f7 X- n6 R
差異是在有沒有多了一個buffer才到外面的pin,
) ~' U/ B: }4 z2 |0 ?但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
* y' n- E* M7 U; O2 ?我不了解這個差異會造成code整個動作不正常?8 N, }! `* v  K3 d$ p
至於altera那邊我會試著去尋問看看!
作者: A9107114    時間: 2009-3-21 06:13 PM
標題: push botton
一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,/ V" s$ @) {! r9 m, q( C
在短時間內會有多次的on-off
; J  b" l, Y5 B5 l* x. x7 ?% [所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
1 Q- }0 k" f& n3 p9 G! H這樣才不會因為機械彈跳的現象,造成誤動作
作者: vatic    時間: 2009-3-22 02:24 PM
debouncing已經在程式裡面了,4 W  F) n; j! f7 u5 F: b
scope也量過ok了~
$ s4 s: p3 ]+ F  N+ L% N- d" a弄了好久~不過最後root cause不是在這,8 Z5 S2 \' A! c2 O1 H7 o7 X
雖然已經解決,但還要去查一下資料看是為什麼
作者: hant763    時間: 2009-3-23 12:39 PM
標題: CPLD因移除LED控制造成code動作異常
Dear vatic :4 u* d" C9 H6 i0 c
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!/ h( x5 G: ~$ ?) S

3 T6 v# P2 ^: @) W5 L        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..& n5 R4 w' ]3 e' G
6 f1 o& G9 E* U
      thanks & regards
  S2 a" `( l: g5 D. x4 ]0 W hant763  .




歡迎光臨 Chip123 科技應用創新平台 (http://www.chip123.com/) Powered by Discuz! X3.2