Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all, `& y" v' f8 ?: S3 i! Z  D1 A
小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,) Z8 ]% b. Y- p+ e
裡面包含的功能有power/reset/LED control, hardware watchdog,
( L- e3 U: Q/ A6 Fslide switch/push button detect, CPLD to CPU interrupt event,
  j; i2 ?  o# S- BCPU read/write CPLD register這些功能,& u7 D$ q* X" M. Z
在開發時,為了能夠快速的看一些裡面定義signal的狀態,. N: T7 E+ j3 O* j# ~
就在外面接了7顆chip type LED做debug用,
: U) h# F: E1 d  v: o6 U而這7顆LED是拿來看slide switch/push button以及interrupt狀態,+ B9 C. [7 @: j* y5 P. D8 h
而slide switch/push button只要有動作都會發interrupt給CPU,
# q4 o. }4 x1 g這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
( e  P$ @5 d1 u5 D- I- E而slide switch/push button的interrupt event "AND"起來後,
& ?, x( u* `4 P% Q7 h% ?再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
+ ^3 a* g+ u" i6 U1 D: V: B只要這兩個功能的process同時compile,nINT在high or low level,+ s7 L5 ~% v: R* e6 e1 ?1 N3 E! D
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
) G4 G7 {5 o0 \. {* Q+ S但各別把各自的process mark起來不compile就會正常,  e# z$ P: h) d: j
在修改code以後,已經有解決這問題或應該算是改善吧,
6 P+ S: O, m. F& o5 E5 n因為更重要的問題來了,我把debug LED拿掉,- ?: S$ |0 l2 Z) D5 V( ~
這兩個要發給CPU的interrupt功能就出問題,
! ~+ [" ^: G9 u3 ?只要把debug LED的東西留在code裡面,就正常了,
& K8 Z* @: I, k1 Y. l, `" m$ C不知道板上個各位前輩有遇過這樣的問題嗎?
/ v% [$ f( t. X/ i& s+ T* C- [6 h, ]$ [3 V2 X; x. g" r. z" j) A; j4 u
example:( z. i3 l* t9 b6 x
......8 @4 M/ e  D: U% U2 ^: P- B4 z
port(# ?/ S2 q& f5 C$ c& F+ @
nINT : std_logig;4 g' |. f% j0 `0 f5 `9 s
LED_S : std_logic;: K9 G, b9 f/ @8 d9 r
LED_P : std_logic9 N& o) \% Q  L$ `+ P
);
- u- P. y& ]. Z4 ]2 b" U+ T! M& N......
# ~3 \. }$ J9 T) W) b! Xsignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
5 s3 a' t; s, l0 |0 m8 {/ Y' c......
  N0 o- _6 W: `begin
$ I8 i" L# B1 T4 InINT <= nSLIDE_INT and nPUSH_INT;3 F" T3 X/ t( }# C
LED_INT <= LED_SLIDE and LED_PUSH;
0 M" }$ M% M" X: U+ W3 ]2 ?LED_SLIDE <= nSLIDE_INT;
( P* M( Y% L% P2 z- B2 c- y" XLED_PUSH <= nPUSH_INT;
  l# ?' I1 v. v/ O  o......
: N& |9 [! Q: y(包含的process如下)
! o( m0 |* D2 g; kpower control process
' f/ {; Z" e3 r6 Zreset control process0 s  K; K, t6 H  F
watchdog process. P/ S: V6 T: T+ Z  J7 u
read process5 G, L% {9 d- J
write process
: [0 g( \# }" M% I$ p' Zslide switch detect and de-bouncing process5 F: B9 R0 e# G! @) i" L  ^
push button detect process/ X# A% o! a0 H
slide switch interrupt event process
9 i; W: X  \2 [1 mpush button interrupt event process' y: {9 y! k! @
......
: |; r+ f# N$ g, q7 X2 J/ L. \) M; m* x6 d
現在的code上面的寫法已經正常,8 K7 o# ^: D9 x, q# z* W
但是只要把這三行都mark起來,
6 u6 n$ [/ o% YLED_INT <= LED_SLIDE and LED_PUSH;9 z7 ]9 ^' f1 d, E+ K8 u' n
LED_SLIDE <= nSLIDE_INT;
. V" T3 n& }) f. C: HLED_PUSH <= nPUSH_INT;
6 ?" j! E1 J# X; V# F/ j3 b. u整個code動作就不正常了!8 C' `# L7 ^" j( ]" @
我是用Altera EPM570 -5ns那顆來做,
6 E' o9 H" C2 }不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
* Q: c7 Q( O' V( `5 A; J! `1 c不過還是希望能夠先把這問題解決!
4 L3 x& H2 D$ z$ ]! e希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點.... ^, g0 }  M. E8 K9 X
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司1 c3 K. ?( T. Z/ B& u" Y
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,
: H% m- B( Y: z0 y* Y情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,, p' q' p  Q0 k
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常, R' x  n# D( z6 E$ a
nINT <= nSLIDE_INT and nPUSH_INT;
9 s/ Y6 _8 s7 ^& \  ]5 E+ KLED_INT <= LED_SLIDE and LED_PUSH;
# l4 |' T8 ], f& VLED_SLIDE <= nSLIDE_INT;" c, m! I6 U3 h& Q
LED_PUSH <= nPUSH_INT;6 d& w9 Q# M8 e. Q- |  Z, u
* [9 }$ o+ V* R' a* H% p/ l
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行+ w1 I. l- j1 Q2 i9 Q
LED_INT <= LED_SLIDE and LED_PUSH;1 w: x0 n1 ?2 b+ C6 c( q6 n
LED_SLIDE <= nSLIDE_INT;4 T8 h* [) N/ @! }  |
LED_PUSH <= nPUSH_INT;4 P, P% W1 [4 h# C% I4 c  g
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。5 ]' y# @$ T9 h/ L' {
- `$ }/ G1 p3 x* c& b

0 Z( Z% H8 C; z
$ [2 y. O8 ~9 S- C, s差異是在有沒有多了一個buffer才到外面的pin,) \+ a2 R8 u0 }2 g
但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
0 ]2 ^! t* N( e( ^8 ?我不了解這個差異會造成code整個動作不正常?
: X& X, b5 ]" `, a; p至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
/ a7 K* p$ h* P2 D+ q在短時間內會有多次的on-off5 h  m* m2 x1 t2 S: z) [6 B
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
8 N1 G5 E. ~8 \* n# r5 P1 @; R這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,; o3 {, c8 A( {0 _
scope也量過ok了~4 \. M! ]( ]$ Q
弄了好久~不過最後root cause不是在這,- K$ q/ V0 F9 z* e
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :
' V" E" m$ |; j/ ~& m/ J       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!# N! g) V! k* Q( N: [4 ]8 Y

) f$ P2 g4 j# w9 J; b' c* ?3 U        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..; c3 n, y% C' c0 K2 g

6 W# n/ d8 ^+ v0 c; Y      thanks & regards / |, H+ w* _5 F% k5 I; M  ^
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 10:26 AM , Processed in 0.134517 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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