Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
1 d: f8 ~- t7 n9 p7 ~# n$ M小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,# t& g0 h% p0 e
裡面包含的功能有power/reset/LED control, hardware watchdog,: Q! D1 P9 f! z& A0 l
slide switch/push button detect, CPLD to CPU interrupt event,4 y( Q  u8 ^: u' P+ v
CPU read/write CPLD register這些功能,
* E( f; @  A& u! P8 t. k: C4 q在開發時,為了能夠快速的看一些裡面定義signal的狀態,* x2 N) N" D1 Z# }
就在外面接了7顆chip type LED做debug用,
$ f7 s2 |  Y  ^4 S! j9 x1 o+ r% x而這7顆LED是拿來看slide switch/push button以及interrupt狀態,. M. _1 w8 ?3 P4 k9 p
而slide switch/push button只要有動作都會發interrupt給CPU,; B2 |7 ~' r1 Z- ]- u/ M
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,+ Y( \, B1 M2 }. D8 C
而slide switch/push button的interrupt event "AND"起來後,, I* w- [$ A' S& K4 q! o9 _/ y% X7 O4 V% _
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;/ v& z! E" I  T7 ?4 k$ B' o
只要這兩個功能的process同時compile,nINT在high or low level,0 |/ E$ v! C4 d  l1 I* `- z7 H" g/ l
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,8 Q; Z: }# j1 v' F1 H3 d$ u
但各別把各自的process mark起來不compile就會正常," P+ T5 l2 F5 h/ }* S
在修改code以後,已經有解決這問題或應該算是改善吧,, X* W; C" [, x7 w
因為更重要的問題來了,我把debug LED拿掉,: e3 r; k9 A! {
這兩個要發給CPU的interrupt功能就出問題,
  Z/ D/ M9 X  a% t只要把debug LED的東西留在code裡面,就正常了,, m5 P" _3 v4 Q2 i; \0 U/ P8 N
不知道板上個各位前輩有遇過這樣的問題嗎?, F: u8 K( r. _9 y% f) }

% |  p" Q- V+ K. h; sexample:$ ?% L0 A4 b. H, ?
......
9 M1 W+ G9 R. j5 H. [port(, C% ?. }# F: e5 b5 u# V  {
nINT : std_logig;
" L3 P9 y! l/ n- e9 y) dLED_S : std_logic;9 h2 O% d: ]4 s( [0 U/ s, V
LED_P : std_logic  o% L# h( d6 j; l. N; G0 R
);& R* t3 y  U6 _1 s8 Z/ d
......
' l9 j$ c& I4 o0 [! a0 L- s* }signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
" j$ t3 `+ k9 k  F% y- N4 u....... V, |: p. W# c8 ?: ?
begin- o1 f# D5 T6 s5 v8 k
nINT <= nSLIDE_INT and nPUSH_INT;; x; u! b7 `0 t. D5 E2 J
LED_INT <= LED_SLIDE and LED_PUSH;
# v% b0 R; z- r) L, a2 q4 zLED_SLIDE <= nSLIDE_INT;
+ W" i, j0 s3 m8 X* x, x. u3 ULED_PUSH <= nPUSH_INT;6 B' U0 F" `. u5 G. p  {/ f
......+ ^2 r% o6 a, v  n& T8 }0 Y
(包含的process如下)
0 o; k9 w4 z. r/ ]( B# V) ^power control process) Z8 V' B% Z: R0 U5 U: |0 D" @" N: E
reset control process  G: ^) i9 ~) `6 y9 I
watchdog process
% q! F7 f; ~$ `  x) @read process
. _3 K2 a3 N6 x7 hwrite process. s. b$ Y( X9 T- a! y4 o
slide switch detect and de-bouncing process) Z7 t' d6 ^! Y; z4 o% O2 ]4 |
push button detect process
: V, N. [6 P. h2 C* |$ e7 tslide switch interrupt event process
0 n( s( G8 y6 e5 h; tpush button interrupt event process3 ~5 j6 ?8 ?- e% L% _
......8 O" k' y! P2 z/ E4 Z: I9 _7 i

. O+ W. n5 u$ G$ `8 w) P$ R現在的code上面的寫法已經正常,5 I9 l. k7 t: i6 L. Z1 \
但是只要把這三行都mark起來,
" {5 ]% m6 U! _! aLED_INT <= LED_SLIDE and LED_PUSH;
$ n- o$ X9 v- }LED_SLIDE <= nSLIDE_INT;
( N. y& ^$ z8 }/ w" M- O4 I( qLED_PUSH <= nPUSH_INT;
/ f# X( _% S! f" ~整個code動作就不正常了!
+ p# }1 V+ e1 F0 ?3 q7 `我是用Altera EPM570 -5ns那顆來做,
. k4 d* f4 O) A7 |不知道說這麼多有沒有表達清楚,其實有很多問題想請教,) `# Q( h8 j7 m$ M. E: n
不過還是希望能夠先把這問題解決!
! h7 _- x" v( E7 [  q& X7 e希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...' ]8 F0 }4 ~7 a5 B: S
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司
& N; K% s8 R/ p' o/ O) w5 Z     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法," U/ X% d- \' {6 Z- X; G: F( C  y
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,0 z8 e/ s! _6 z! G4 B& D
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
% A4 d- h# s1 Y7 knINT <= nSLIDE_INT and nPUSH_INT;2 }; V2 e0 b' ~4 U2 e
LED_INT <= LED_SLIDE and LED_PUSH;
- s, `4 I- N4 C7 VLED_SLIDE <= nSLIDE_INT;
! O; n$ P2 W( b* r: b9 VLED_PUSH <= nPUSH_INT;! H( R/ y2 H- A

6 R7 h% D1 }& J8 F$ {情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
& F) x+ e- J4 ?: H) j* W0 ILED_INT <= LED_SLIDE and LED_PUSH;8 T3 b& Y3 y1 k
LED_SLIDE <= nSLIDE_INT;0 [3 F9 h1 }1 ]$ S! l
LED_PUSH <= nPUSH_INT;% ?% P) `* X! h4 c4 W: j% w
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
1 T" a6 {0 U) H: H- S/ h0 A! L  A& V' y# |& M- |/ I/ K
% R- ]' ?# [8 ~3 p0 g, P

& o7 ^8 ~, [3 {2 v& O& w差異是在有沒有多了一個buffer才到外面的pin,
1 c8 u: H$ K& A+ D但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?: H7 V% B. {+ L& Y4 S- q
我不了解這個差異會造成code整個動作不正常?, w8 p* g' d' t( [) H& a. Q
至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
* M" d" \; w' Z# f( |4 Y5 ^$ G# }在短時間內會有多次的on-off" a/ g/ K2 Z* E7 q8 w
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
- Q) w" {8 l  w) _5 I這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,
  q0 H# s+ j) B4 bscope也量過ok了~+ M8 C/ H% h0 a, y! U. G
弄了好久~不過最後root cause不是在這,
* s1 |5 o% V% V7 ^8 E2 `0 U雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :# q" u! ]& Y) h
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
6 ^& t" @# m) O* i
, R, v, N2 z% Y* `+ @3 j5 K        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..
0 h! u* L* k/ ~; S" y. p% C) N& F+ N
      thanks & regards 9 C) ^6 {, G  Q% n4 Q3 u
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-29 01:19 PM , Processed in 0.106006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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