Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
0 L/ P) O, r9 Z/ S; }3 L; K小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,; w! M: t5 _, u4 J) z0 W  n6 k$ b' Z5 M9 p
裡面包含的功能有power/reset/LED control, hardware watchdog,* b* E5 [  {: J6 a  l# U
slide switch/push button detect, CPLD to CPU interrupt event,3 ?2 H+ [) d! L* v
CPU read/write CPLD register這些功能,7 P3 d) ]- N' p- K. H' f5 N# B
在開發時,為了能夠快速的看一些裡面定義signal的狀態,! S* L# X) ^/ h* k
就在外面接了7顆chip type LED做debug用,
6 y* C" C' S' {而這7顆LED是拿來看slide switch/push button以及interrupt狀態,0 H; X% }3 K* A& {; f( ?, Z
而slide switch/push button只要有動作都會發interrupt給CPU,
4 ?: t: Q; u; q9 z這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,! P% ]2 \7 g* D
而slide switch/push button的interrupt event "AND"起來後,
5 v3 g- |5 e  L  z再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
4 J$ m$ f6 ?( x# d只要這兩個功能的process同時compile,nINT在high or low level,! m2 J$ |  ^5 R' e6 ^. ^7 x
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,- Y& [4 c3 L& d$ S& A$ N) X0 T+ ^
但各別把各自的process mark起來不compile就會正常,5 b7 ~  G. ^9 ^! Z6 v
在修改code以後,已經有解決這問題或應該算是改善吧,& f/ H; c: T" T$ A. M% ?/ @
因為更重要的問題來了,我把debug LED拿掉,8 m; h  B: D1 t& |+ p  k* D! G
這兩個要發給CPU的interrupt功能就出問題,
& B, C- s8 c$ @' t$ w( u; o只要把debug LED的東西留在code裡面,就正常了,
. U' J2 l# m3 ]4 \- Z( y! g不知道板上個各位前輩有遇過這樣的問題嗎?
5 y# S  B& ?4 W0 d
. g: K4 s; J: f. L& ]4 [% q1 p) Hexample:
4 w( m4 L5 {. y2 o2 z  g......
6 @: Q# _- x% Z, N* Qport(
3 ^' [% J2 t" XnINT : std_logig;
; I  p0 @& k! Q0 ELED_S : std_logic;/ o' j1 e2 @7 Z' W' J4 }& M+ K
LED_P : std_logic( m$ e6 p, f$ C0 w6 i8 J, g/ Z
);
0 ^5 |1 n6 ?1 P  c......2 S( K1 {7 s2 G7 @- R; g
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
9 B# q5 k1 ~; z" {......* C6 ?- ?1 @  J# u
begin$ @7 V1 I0 E% [; D
nINT <= nSLIDE_INT and nPUSH_INT;
- B' {. F3 q/ n$ M- }0 x' u+ O- CLED_INT <= LED_SLIDE and LED_PUSH;
2 E9 u6 c9 [- }. I- V" pLED_SLIDE <= nSLIDE_INT;* w  q3 a3 V; f1 C
LED_PUSH <= nPUSH_INT;2 m2 n" O. M' }5 k- ^0 t4 {
......
$ O, O, P5 ], M8 d9 A9 _(包含的process如下)
  z" q: l8 Q& \$ L% q! ^" ypower control process% T( |4 o) ~+ d9 H4 |* ?, x
reset control process
, e) J1 W( R; K* owatchdog process
; b, Z- p" R  d! K$ A! mread process% \5 V0 x4 Z& p% u7 g1 m
write process
# G  @* X4 A' V& ?. X1 i" V1 Rslide switch detect and de-bouncing process1 z8 t- M0 }4 v  p* U& L9 e& b
push button detect process
% Z1 O& w* V7 {& m/ i. mslide switch interrupt event process
+ N/ u7 A* |  }) Apush button interrupt event process/ h- J' t4 i& g: o
......3 s3 b6 W9 x1 L) m* A0 V7 C9 Y% u

9 z* G. a4 x6 \: W, F現在的code上面的寫法已經正常,2 z$ O4 h+ F5 r& y: T8 @
但是只要把這三行都mark起來,, ], h4 x. g$ q) V/ d
LED_INT <= LED_SLIDE and LED_PUSH;) }( V* h  ^% `  M
LED_SLIDE <= nSLIDE_INT;
8 H$ Q8 z% [3 oLED_PUSH <= nPUSH_INT;1 v7 K5 e, g7 \! B
整個code動作就不正常了!9 p+ i& G- c) r& y
我是用Altera EPM570 -5ns那顆來做,
; {4 b6 |, S5 l不知道說這麼多有沒有表達清楚,其實有很多問題想請教,  y+ w. c4 |1 J6 g
不過還是希望能夠先把這問題解決!! C5 ~7 {/ S: ^  f) w) y9 G5 T
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...+ D) `, L* s) F# d: U! U2 i" y
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司8 C% [6 A( p& D& }
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,
. z3 s" y* {% w1 ?情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,. K- K( t5 ~9 c; s7 Y8 V
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
( c. ]( }. C  S, ynINT <= nSLIDE_INT and nPUSH_INT;
9 d! w3 F+ A; B& @' a$ O$ iLED_INT <= LED_SLIDE and LED_PUSH;
1 S" M5 k5 C/ C8 M$ |# O$ C5 ULED_SLIDE <= nSLIDE_INT;5 ~9 P! d! R1 E: t/ ~2 ?3 c
LED_PUSH <= nPUSH_INT;- U( P, w$ y4 _/ Z* H

% b- j3 q$ v% H! w情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
2 n% b) l9 S3 N9 g! Z, l( d: `LED_INT <= LED_SLIDE and LED_PUSH;
' Y6 k( j6 F9 n" u5 xLED_SLIDE <= nSLIDE_INT;
' I/ g! N2 ]2 L0 g3 \: [LED_PUSH <= nPUSH_INT;' T" f3 _: B! ^
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。( }/ r! p8 _( P+ }

7 L( u5 k, D' |+ p8 C+ _
+ Z5 ^0 p( o; D" U* M
4 Q, {- E; [; |( @差異是在有沒有多了一個buffer才到外面的pin,! t/ M+ ^& b* ^
但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
) ?7 ?& n, ]" C' N% N/ M4 I我不了解這個差異會造成code整個動作不正常?
" E3 |) p6 @- w4 C1 v至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,$ \! x: `5 Q* l
在短時間內會有多次的on-off
6 e3 V7 G9 P' \4 _, E9 l+ E所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,/ J& c1 W+ F% G. N% ~* k
這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了," k3 D- g  D$ G% S# F' h% v! F3 B. d
scope也量過ok了~: r) A3 [4 Q- [1 i& r' E- ~& S
弄了好久~不過最後root cause不是在這,' D4 g8 P  y6 j3 L' V! k3 f" h
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :/ y& u5 K+ T9 ^5 I; d  e% q, f
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
# m7 f0 ]  F! m% \1 U
; t6 ^1 a3 w3 [& O7 Q, h3 j( g        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..$ g* v# q/ B& \

: C8 f8 {# n" Z5 T* i0 Y      thanks & regards . h3 k* }  T- [
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-9-25 02:52 AM , Processed in 0.174010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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