Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...& Z1 E. x. o5 q- x3 r
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司9 p. e+ Y5 R6 \4 h5 `' {
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,$ V9 `, L. D: a3 m, D" _
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
/ w% p; d% Y2 z, w) r, s各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常6 S8 e% _2 t( `( c
nINT <= nSLIDE_INT and nPUSH_INT;6 Y& h: _/ G% a; a& S2 f
LED_INT <= LED_SLIDE and LED_PUSH;( ]& N+ N- ]) y( b0 t7 ]
LED_SLIDE <= nSLIDE_INT;; }3 A) s8 Y% M4 h3 |
LED_PUSH <= nPUSH_INT;
6 z. Z& i9 i$ a4 u% J( h; R6 E( }5 N, [2 @, f" `
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行# z: G/ J$ d* K% o! @. m
LED_INT <= LED_SLIDE and LED_PUSH;( k5 l0 V* c, z' O6 M  c
LED_SLIDE <= nSLIDE_INT;
3 \0 m+ X- {- w" a' ^8 l8 V* rLED_PUSH <= nPUSH_INT;5 O/ c- R! A$ l  e9 t9 U, @
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
7 j0 G0 N! G& h4 p7 K0 W2 D+ B7 b# ~+ m' x4 ]8 \0 ^3 ~
0 z& m8 y, w$ C( j
0 c; I" A- }5 R9 J  U3 d
差異是在有沒有多了一個buffer才到外面的pin,
- O2 `: O+ [2 v  |) X) N但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
- G! O  \* \" n我不了解這個差異會造成code整個動作不正常?
+ U* Q$ z8 _6 ?  M; z至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,8 e2 f! U6 ]: B: x: _/ Y0 W6 l
在短時間內會有多次的on-off
# Q% u4 F5 j5 h! w- c所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
& k  Y9 a$ `) d  m1 U- d這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,
' q" `6 S+ ~  u# U4 k) {4 U. A, y/ kscope也量過ok了~
' B3 D/ x3 o6 }( b弄了好久~不過最後root cause不是在這,
+ a/ X0 U$ C: t  M" D: r雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :, Q0 e4 Q; ~& t* T8 L4 F. L- g9 l
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!9 ~% }% h, b6 l5 Z  L

+ W0 ]5 n) X; k) c9 n* e4 M5 ~        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?.." U& L4 p* z6 Y3 |+ a7 }! @

. f2 w& |4 V% P3 l! _+ x* s! c1 L      thanks & regards & ~* n% g  g% C' ^
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-25 05:28 AM , Processed in 0.170010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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