Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
查看: 5213|回復: 5
打印 上一主題 下一主題

[問題求助] CPLD因移除LED控制造成code動作異常

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
9 X( V4 {1 W5 W# Y0 w6 f小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
) w$ m8 j! p6 ]) u* L' p裡面包含的功能有power/reset/LED control, hardware watchdog,
4 O+ `2 [6 p6 ?4 t/ I8 q4 Vslide switch/push button detect, CPLD to CPU interrupt event,
8 ?! P9 }( O1 h  @: sCPU read/write CPLD register這些功能,0 Y+ T: ?9 P; x% y4 V$ u! z
在開發時,為了能夠快速的看一些裡面定義signal的狀態,
, ]. F: t8 M% I% C* d就在外面接了7顆chip type LED做debug用,
; r; W/ c6 c, R4 J而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
$ h8 @/ I( v; Y- ]而slide switch/push button只要有動作都會發interrupt給CPU,
; S1 ?! Z# E" b" k4 P3 p- c1 P這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,3 K1 U/ \) u$ ?; b, ]2 H; ?- B2 M
而slide switch/push button的interrupt event "AND"起來後,
: z% T! b- ?/ A8 J6 w: ?1 s0 p再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;, Z1 w4 f" \9 U! I- }
只要這兩個功能的process同時compile,nINT在high or low level,
) o$ a. m: \& ?" w$ v: Q% ?* o有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
1 l' K' |1 z1 o) t( L7 r8 g但各別把各自的process mark起來不compile就會正常,
8 t* L7 D4 c& P- z在修改code以後,已經有解決這問題或應該算是改善吧,/ B  N- _: `4 p& k! m: I/ c& n% h
因為更重要的問題來了,我把debug LED拿掉,
4 Y* q% K: ^2 q& X這兩個要發給CPU的interrupt功能就出問題,/ y/ \  u& ]8 [( ]; ?% h2 I
只要把debug LED的東西留在code裡面,就正常了,
3 U' ]0 a( o  D8 ~5 Z, f% [/ `不知道板上個各位前輩有遇過這樣的問題嗎?
  v) b9 L- Q  m! c1 z: U5 ?% e. I# a. b0 s
example:
! y) N2 Q2 @6 D: J1 i* r......3 J( _9 ^% B7 B8 B) L3 R4 T& R
port(
! N9 M/ Z% s9 d( J" m: n- ?2 mnINT : std_logig;- o/ |  e( t9 \& v$ A
LED_S : std_logic;% ?. I' J4 H/ U' K
LED_P : std_logic
+ p3 K. s2 G; K6 e);- }  e0 P" {+ f7 \$ V% B6 ]0 U
......1 |+ H$ z. l" X* C1 k5 e+ h
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
9 p8 k1 J) e/ e; {! s4 C......
# Z! N' B2 x' n8 Rbegin4 `. R, Q$ P. r; h9 w4 k9 i
nINT <= nSLIDE_INT and nPUSH_INT;: e. h/ z* E" c( x- N+ n( Y
LED_INT <= LED_SLIDE and LED_PUSH;
( n. x; |" Q2 _. cLED_SLIDE <= nSLIDE_INT;7 R0 n# J" G8 Y  j  U" n! d! _
LED_PUSH <= nPUSH_INT;
9 }) `' H! ~. X. O& D6 u......! t3 e' j) d9 ^! W$ F
(包含的process如下)% D( L) E7 j. v. t- S; F5 \
power control process8 i# R6 }) e% S; e; w; d- ]- |
reset control process- u7 W# s8 w- @% p. h: `4 |
watchdog process
" U6 g1 Q% L1 [( h4 lread process
! l, e3 b( q% @6 wwrite process
: _7 r, }$ B* Z4 M0 v- p: T; Yslide switch detect and de-bouncing process
$ P5 ], W1 s5 W% Q: l' r% ]& {push button detect process( j1 u2 m7 J) n- t7 U
slide switch interrupt event process6 r6 f, k* d, |* T, A
push button interrupt event process" q& ?( ?# @/ x9 {6 y/ k
......; q4 q$ j9 J, [- m# C: I# d

" S/ ?% u$ ], ]. E  {現在的code上面的寫法已經正常,
. |7 R$ X+ y8 J6 c5 B. D但是只要把這三行都mark起來,6 @% l9 k- a/ w0 _
LED_INT <= LED_SLIDE and LED_PUSH;( Q1 N" V9 Z* _/ u
LED_SLIDE <= nSLIDE_INT;
/ T  F1 `+ p7 s/ p9 T. Z* F# I$ MLED_PUSH <= nPUSH_INT;
4 n/ ^- S2 v, V+ T整個code動作就不正常了!9 T+ O1 l& I# }
我是用Altera EPM570 -5ns那顆來做,
: z. v$ T2 x# z) A; N不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
& E6 A) `6 n) P3 m! Y! M0 h6 z8 [不過還是希望能夠先把這問題解決!) K3 ?8 E' i4 ^, O, b- p/ l
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...* \8 p5 [( p" S' ^
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司/ n, w2 ^5 P5 c2 z* @  \' @
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,- B/ y! ?. o# h- s3 p' b6 T
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,1 _6 {3 L; v8 I7 d7 L  f3 Q
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
2 n. v* u( S, @) V+ P1 c% U7 t! qnINT <= nSLIDE_INT and nPUSH_INT;
& [' O6 _5 j$ N+ m4 p/ G! Z$ K7 vLED_INT <= LED_SLIDE and LED_PUSH;
8 a. ?( Z& s0 h4 ]LED_SLIDE <= nSLIDE_INT;4 h! s7 Y& _/ C4 H
LED_PUSH <= nPUSH_INT;
2 c& w9 g5 {% Q' k$ n; ]0 g7 Z" E/ X1 B5 O0 V4 f" w+ g
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行3 i+ r1 |% B3 _( l" l
LED_INT <= LED_SLIDE and LED_PUSH;* m$ w- K! }; F! f" H! ^" B
LED_SLIDE <= nSLIDE_INT;( O. r6 w$ t* G
LED_PUSH <= nPUSH_INT;
- h0 c$ m! Q0 s在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
1 ?" @0 j! \; W+ G+ i( r2 t
# V! E3 g; X9 D# g% n9 k
8 K) Z+ V1 l4 l+ \' f( R3 O! L, K3 a! N7 @: ~+ K- s# t
差異是在有沒有多了一個buffer才到外面的pin,
9 L; t; q0 t  k) U2 h( ~' q但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
+ E; {2 @: _& M, S  p' T7 j我不了解這個差異會造成code整個動作不正常?4 A! b  P/ ]6 F5 ]. c1 P* @+ |
至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
& M& z; d" M- m9 q在短時間內會有多次的on-off
( ~3 [! y. y9 Q所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
9 p: M$ Z# e8 L. T這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,
9 z+ i9 q, B! Zscope也量過ok了~
4 D4 |* a# @$ f" L弄了好久~不過最後root cause不是在這,4 o- s, P# E! m9 E* B; d
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

CPLD因移除LED控制造成code動作異常

Dear vatic :
3 V% Y; b2 m" l9 B4 m       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
" R7 n- M" U  s. \5 b, [3 r! C! S5 S$ ~7 S2 p
        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..9 j* X+ U8 {: U0 ]$ O

( D1 x- O; n. F  u! B      thanks & regards
% @% s) y/ ~" S( a9 C: S% N hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

首頁|手機版|Chip123 科技應用創新平台 |新契機國際商機整合股份有限公司

GMT+8, 2025-1-1 06:38 PM , Processed in 0.173010 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表