Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
: O1 }7 U( u$ V- F$ k小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
; f& F: P! R' K9 s裡面包含的功能有power/reset/LED control, hardware watchdog,; W* g1 n1 `$ Y
slide switch/push button detect, CPLD to CPU interrupt event," h5 i: I0 n$ [& T6 D* L
CPU read/write CPLD register這些功能,
1 D8 }4 y. F& G/ u, ]6 U5 _/ o在開發時,為了能夠快速的看一些裡面定義signal的狀態,
7 T) P* M5 W8 {4 ?就在外面接了7顆chip type LED做debug用,/ c$ y$ y" x) `9 T$ |1 I6 h$ a
而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
$ L# n" I+ z; Q! A而slide switch/push button只要有動作都會發interrupt給CPU,
- e8 d1 ?* n' y2 ?: |這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
$ M, M8 c( C3 v' n/ c/ O而slide switch/push button的interrupt event "AND"起來後,. d, K& Q% W3 ]7 q5 }
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;5 ^7 B8 G" J4 F8 Q3 F
只要這兩個功能的process同時compile,nINT在high or low level,$ m3 [9 F& g. V9 d/ V9 j
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
8 Y7 x4 p: e# N( n8 e" V& B但各別把各自的process mark起來不compile就會正常,$ ]" i2 T( s; \# t' _$ [# U! ~
在修改code以後,已經有解決這問題或應該算是改善吧,
/ o: V) i) E* p# \& I' l因為更重要的問題來了,我把debug LED拿掉,
8 R( x1 c3 x( G這兩個要發給CPU的interrupt功能就出問題,
" T7 g0 h  w0 K只要把debug LED的東西留在code裡面,就正常了,
, k# g# l9 D5 J3 @0 C不知道板上個各位前輩有遇過這樣的問題嗎?
/ U  @  {1 {' J- G7 t: t5 m6 ?% J# b. c% Q6 z, J! |. k
example:
+ U4 `9 G; {6 f6 X. h0 E% [2 U! T......; \' S7 O0 S3 `2 X
port(
5 N4 D+ L* N4 m$ W+ ~nINT : std_logig;3 {8 L3 t0 \6 |$ h2 p+ \5 @
LED_S : std_logic;2 q1 r  X) u$ _- A. m8 p; A
LED_P : std_logic' c$ H# H6 C( M9 T' i+ S" P
);
' \0 I" _# d/ W: }5 X3 z1 l......3 z; ]) l  }) H
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
6 q; @2 t- |3 U......" h4 w, g% e. D
begin# n) }) j7 c0 x9 X) J: G
nINT <= nSLIDE_INT and nPUSH_INT;7 Q& D5 a. c8 G2 W3 h0 e0 g! H+ T
LED_INT <= LED_SLIDE and LED_PUSH;# {1 Y7 O8 s- A; p  |) q0 L3 Q
LED_SLIDE <= nSLIDE_INT;
3 f! \% ?$ D* F8 sLED_PUSH <= nPUSH_INT;
& l( v' n- ~# O! k) Z3 b......
" `6 ^8 u' @+ s; I; o1 s' o2 ?! i7 s(包含的process如下)* s1 N8 _* |' m/ z" Q6 H) Z8 b, D
power control process- c& M/ |* h9 G! F* \1 D, F, E, R
reset control process
9 M3 ~: `, a; [3 ]4 Ywatchdog process
/ o! c" t# n; Mread process
5 E+ X; @3 H+ z; f1 m2 Xwrite process' \( i) M) w# u# \' b9 Z
slide switch detect and de-bouncing process' N" F# C3 n: q2 j
push button detect process
6 Y) D, g) g% x+ d: H0 @/ wslide switch interrupt event process
1 X, e- Y# k4 ~/ l5 ~9 npush button interrupt event process+ J( s* u7 p# P5 L$ M. x
......
0 o5 h- {0 t. k* f& ^3 D+ P2 ]) d5 {2 O' T# |6 s
現在的code上面的寫法已經正常,
  O+ ~+ a# E$ D2 e( H3 r但是只要把這三行都mark起來,
8 ?. d8 g7 |* e# c6 Y1 qLED_INT <= LED_SLIDE and LED_PUSH;
, O: i! L' N% C5 a1 xLED_SLIDE <= nSLIDE_INT;3 \+ A  P( c4 _+ w# E
LED_PUSH <= nPUSH_INT;' t, b5 E+ F( z$ b
整個code動作就不正常了!9 y8 C+ T( M% [& ?+ b4 B
我是用Altera EPM570 -5ns那顆來做,
) Y* {" L% G+ C* u  Y不知道說這麼多有沒有表達清楚,其實有很多問題想請教,7 z: U9 y' |, A
不過還是希望能夠先把這問題解決!3 |( S: {2 p( G# X3 L! j" l
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...( y4 E# i( z+ d" {: s6 P* z) s
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司$ F  X) K+ `6 Q- \
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,) o7 G3 H' ~' n; P9 n6 [
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,/ w* k4 U3 q4 C5 {1 v
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
! c1 V2 g  `7 s/ ^0 knINT <= nSLIDE_INT and nPUSH_INT;' S/ u& M' W; R' g
LED_INT <= LED_SLIDE and LED_PUSH;
! f- w) D# J# nLED_SLIDE <= nSLIDE_INT;) K9 u! z2 f; p5 T6 D
LED_PUSH <= nPUSH_INT;2 G, K9 D' Q# ~$ @

5 q5 H) O% t7 I$ o6 i情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
! ~% o: m' Y( Z7 i* ]LED_INT <= LED_SLIDE and LED_PUSH;+ p# S4 e/ V6 @% t7 y6 H4 W
LED_SLIDE <= nSLIDE_INT;! r: |) A- F, r& T' D0 g3 [6 u) V4 d4 Q1 O
LED_PUSH <= nPUSH_INT;7 j- d* i: l% m
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。8 n$ w6 U5 `2 H- {: ^- w1 a

0 x, I1 J- e  @1 l: g- `+ l. ]6 O. ^( j

# J# q. x0 ~5 t. `6 T差異是在有沒有多了一個buffer才到外面的pin,
( Q' h) x2 B9 @/ [- ]2 h但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?" |6 I4 `* s8 c0 e6 X
我不了解這個差異會造成code整個動作不正常?
$ s0 I  Q  y' V6 }0 E至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
+ c7 Y8 V: I, x" z: Y( w, ]在短時間內會有多次的on-off
  I1 [$ n0 e3 o+ F所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,% b' K: I7 I8 ^: ~+ t- D
這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,  Q' r1 m: n  q& H, K
scope也量過ok了~
& ^( [; G& c; b- l% \弄了好久~不過最後root cause不是在這,
% r  D. e4 C) p3 P/ ^" ~雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :
6 q: D/ E3 k+ Q0 w( k0 Y& H4 z       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!# b! Y8 j0 j2 j+ ~( `2 l' Z

& z! Z& i: V8 T4 t2 v        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..6 |8 e1 i: F: C3 W9 P! x
5 P! ^3 w# {8 Z, j8 b
      thanks & regards
" F; Y( @( ^: @: ^/ V& D0 d  D. m hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-12-29 09:52 PM , Processed in 0.170010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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