Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all8 k% o* M- X# O  k! M2 H
小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,+ F7 g8 Z7 L$ E+ Y; x' E
裡面包含的功能有power/reset/LED control, hardware watchdog,  ?5 y0 c5 p# h8 F+ l6 Y
slide switch/push button detect, CPLD to CPU interrupt event,0 D( Q1 B. X# l
CPU read/write CPLD register這些功能,
6 ?$ Y9 k% O# A# ]! S7 ~/ y在開發時,為了能夠快速的看一些裡面定義signal的狀態,
) X  c3 j. f2 t4 O' e$ a就在外面接了7顆chip type LED做debug用,
1 |8 ^7 x5 w0 y- ~/ g4 N3 J而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
' Y! D4 S; @8 x8 c& f而slide switch/push button只要有動作都會發interrupt給CPU,0 \* e/ Y( T  i
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
$ h. ]' ]+ |& F/ w0 x" E/ W- n0 v( l而slide switch/push button的interrupt event "AND"起來後,7 l# y; k; j& f  {, q
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
# S( o, W  c5 n+ K- D  r只要這兩個功能的process同時compile,nINT在high or low level,8 T- r- F' ?+ {0 g- v
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,# R8 t: ]3 o6 t$ h$ t
但各別把各自的process mark起來不compile就會正常," d) w2 X4 |1 X3 _1 w
在修改code以後,已經有解決這問題或應該算是改善吧,
1 |' I( A' j; P0 ^' l6 @  B因為更重要的問題來了,我把debug LED拿掉,
9 A9 d$ s+ i! @% @& N! U" F這兩個要發給CPU的interrupt功能就出問題,9 n  N2 J+ V! J- M' d
只要把debug LED的東西留在code裡面,就正常了,3 V1 T& ]- n  f4 _
不知道板上個各位前輩有遇過這樣的問題嗎?2 c' b1 z% j# V# k* ]
! C; ?( h9 u! F  J* G) t
example:. {3 w3 O( z3 _' S1 h) c
......
! }4 X) y4 ^3 Q' }4 a! O3 \port(6 U8 c4 {; |( J
nINT : std_logig;
* S- c+ }, `- e3 A# b0 mLED_S : std_logic;, _0 I3 {5 }. w
LED_P : std_logic
$ Z  C& R( s- T6 X);2 I+ o9 y, z* v, J" o
......
/ b( d4 ?  I9 R4 ]signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;) C# a, R# |! R# c
......
& c3 z3 {7 V* s  \# {$ I. ?/ ebegin
! U3 A4 F* T' u. Z# onINT <= nSLIDE_INT and nPUSH_INT;6 y# ?1 n& t2 _, A/ i
LED_INT <= LED_SLIDE and LED_PUSH;
) y+ G) T, k3 Z: y4 ]LED_SLIDE <= nSLIDE_INT;
* R1 {$ X+ M  B& G1 H4 h. k/ _; Y: f! \LED_PUSH <= nPUSH_INT;7 z# T4 D" X% E5 q
......
( e! r3 m. z) H+ N3 ](包含的process如下): n: z( f0 A  i5 U
power control process
- v1 U/ P9 {; @+ S+ @* @: K" q8 H+ F; Yreset control process' _% k; {/ q, \" o2 l! A
watchdog process
# ?  Q5 |1 A4 a9 }) n, X# H) sread process( @0 s/ H0 w% Q/ q
write process7 L  `( @' t: D) V. O& R1 b2 F% n
slide switch detect and de-bouncing process
$ X% Z, H: p& `/ O- i# K  G: l! opush button detect process% y! x  P4 M; T  N; B4 f) C
slide switch interrupt event process
) Y1 z5 x8 o1 @7 W" m2 kpush button interrupt event process8 x- G2 d2 }8 @  T- \
......
  \/ L; M9 k2 i) ?! H
( |0 h/ i8 d5 f2 z' l+ |, L6 j現在的code上面的寫法已經正常,: |7 m" q" X. A, u/ y
但是只要把這三行都mark起來,
2 s" c' a  {5 u/ _* ]& CLED_INT <= LED_SLIDE and LED_PUSH;
4 C2 d: q0 ^) ^7 FLED_SLIDE <= nSLIDE_INT;$ z% _6 g; j4 b8 E2 W5 `! v/ L
LED_PUSH <= nPUSH_INT;: E8 q8 y, M3 l, F
整個code動作就不正常了!
1 H: P! r9 w: g) `2 J9 m我是用Altera EPM570 -5ns那顆來做,8 d: ]+ _$ W& m, V1 o
不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
( l6 j( o% E+ v5 |. `9 {7 i+ y不過還是希望能夠先把這問題解決!
0 r# n0 I! m+ Y: e希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
0 d) j7 v& L  ^) Y, z& {$ M    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司/ F' O3 w8 Y9 ?2 z9 G) S
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,
# p. `. h# Z- Q7 p9 }; m  N情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,* z: j9 @' H& |. Y1 C6 n
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常5 _2 W' D* f5 ?7 z" j( i, h: b
nINT <= nSLIDE_INT and nPUSH_INT;8 V; m( e( y+ I" _
LED_INT <= LED_SLIDE and LED_PUSH;
; @% y" E5 b) {+ H( KLED_SLIDE <= nSLIDE_INT;
$ P3 d3 ]9 `0 c9 t0 @4 |& TLED_PUSH <= nPUSH_INT;
5 d) Q/ S* D7 H, R! b- {' J5 r: D  Q5 `9 S% A
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行2 E6 l/ {& U- B, |+ A. B
LED_INT <= LED_SLIDE and LED_PUSH;
) [' r) L- M+ W5 qLED_SLIDE <= nSLIDE_INT;# Z% }+ G& m! S& B# z
LED_PUSH <= nPUSH_INT;  U. b' K- x, {0 U
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。7 [4 t' s% }/ L' G5 \: G& R
8 R7 Z9 T! s$ U* y) z
# Z) c3 d( ~5 }+ _, C0 T
3 l: k3 \- x6 Y; ?- h$ o
差異是在有沒有多了一個buffer才到外面的pin,
, u3 E4 o/ v" W5 D: d% q但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?5 q4 ^3 }3 k3 R' T+ }: U' r# r3 Z
我不了解這個差異會造成code整個動作不正常?
& m" ]6 i& M7 \( w' e至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,- `" H& \$ f, X2 r' ^' }
在短時間內會有多次的on-off" a* A0 j8 N( [% j
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
8 a/ a: z8 U: h9 L  N/ L這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,4 H9 E3 }+ N6 \+ S8 T
scope也量過ok了~
& f% ~- K( M' l, o  L! _; c! [弄了好久~不過最後root cause不是在這,  q/ N% r  `3 Z" Q& ~' y
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :) r( k: s+ x# E( {# E
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!+ X- p) M( d2 t" k

8 F; L+ ~! w, x1 g% Z2 C        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?... e+ [2 U, {0 @. U

  c% S# ^- _+ _4 I4 k- I) d      thanks & regards / A- g7 R/ w4 H0 q0 _
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-30 11:59 AM , Processed in 0.120516 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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