Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
% h- X: ?5 e, K: w$ H/ R小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,& y0 C7 |0 h, q/ P8 z, v" h
裡面包含的功能有power/reset/LED control, hardware watchdog,
! C; [% b0 i/ r/ L" {slide switch/push button detect, CPLD to CPU interrupt event,
6 ^; d9 l; s3 L4 L+ Z  x: tCPU read/write CPLD register這些功能,1 \& E) f2 m" n+ B' V
在開發時,為了能夠快速的看一些裡面定義signal的狀態,
( Z1 ^/ N  W3 D8 I/ J. p就在外面接了7顆chip type LED做debug用,0 l, G7 @7 L/ G0 ?& ^9 b
而這7顆LED是拿來看slide switch/push button以及interrupt狀態,9 y( [# S+ k+ C8 d: y
而slide switch/push button只要有動作都會發interrupt給CPU,
3 D+ C3 e$ f, a' M0 E' k- }這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,3 [& v& t& i: D# l1 L
而slide switch/push button的interrupt event "AND"起來後,
) A" P  u! k9 l  Y再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;: y+ y2 i1 l9 L8 ?/ n% n# l- X2 l  ]
只要這兩個功能的process同時compile,nINT在high or low level,8 b4 x/ g0 r, e- ^: T8 j
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
1 Y) q& J7 r& F2 U  }: h3 ?+ x! L但各別把各自的process mark起來不compile就會正常,  h. ^+ B, F5 I2 r- ^
在修改code以後,已經有解決這問題或應該算是改善吧,. c) o5 m% x* r
因為更重要的問題來了,我把debug LED拿掉,) x. _- B5 A. O% t% u
這兩個要發給CPU的interrupt功能就出問題,# Z6 h. E- @, W3 d' C& Z
只要把debug LED的東西留在code裡面,就正常了,, y. R; I2 ~/ c: F+ N, l
不知道板上個各位前輩有遇過這樣的問題嗎?
( x/ _% L! _' U3 c" o: ?3 ^
' l' @! G9 Q% V8 F# O9 r: lexample:( t) Q- A- z. G4 |% I, [
......
/ O. J6 w! c5 u1 xport(
3 x9 B) E  B  T/ S- a% V. c, x0 pnINT : std_logig;# |% S2 P( J9 J* [( Q4 i' o8 I% p5 H! A
LED_S : std_logic;; ^9 k5 q8 y' F/ F/ g4 v9 O$ ~9 y
LED_P : std_logic
% t4 F0 K$ i% V& ~: y);
8 q3 c' K- O/ y, p; P$ Z) ]......3 u: w0 z4 X4 j: e5 s: ?
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;* G7 `) s+ ~9 e0 v  \: A/ B( Z  {, K
......
$ U* [, A6 V: ~begin! d2 P5 L$ K4 M: s
nINT <= nSLIDE_INT and nPUSH_INT;
1 g2 X* K& Q6 q2 F0 k1 k. W$ \3 G9 LLED_INT <= LED_SLIDE and LED_PUSH;
' j7 \5 |/ M2 KLED_SLIDE <= nSLIDE_INT;
. E* Q. g0 T8 b6 Q, {' ]& rLED_PUSH <= nPUSH_INT;" \/ n& V! d( Q( t
......
& G- E/ O1 t, ?6 w6 |(包含的process如下)5 J" d. \/ ^7 H
power control process' V, n, ~1 F0 _: s
reset control process
7 k( J2 w6 k! S. fwatchdog process' q& |, d+ C% G
read process# M- B9 z3 x$ l' L% w5 C8 B! ?
write process
+ ~  y3 }9 H; n! j, V0 H. @7 Aslide switch detect and de-bouncing process
7 \5 Q; ]4 X' |push button detect process
4 T. c% d4 D, \8 N" Gslide switch interrupt event process
2 n' U/ Z8 h" o4 V( w% _& a0 Upush button interrupt event process
3 C9 i* }4 r$ U......
2 n/ A$ ?( g; u+ S# ^! ^! ]2 [1 g7 }( X; y
現在的code上面的寫法已經正常,: K- @" ?9 Y( E. Q6 O7 e0 e
但是只要把這三行都mark起來,
9 }, K! B! A( {# DLED_INT <= LED_SLIDE and LED_PUSH;
4 [7 v- K0 n1 d0 w8 ^+ ~LED_SLIDE <= nSLIDE_INT;
! o- i3 K$ s3 T5 Y/ o9 jLED_PUSH <= nPUSH_INT;
2 y. d5 w" ~/ U) s5 s整個code動作就不正常了!
7 j' @; u# ?3 R6 B5 r我是用Altera EPM570 -5ns那顆來做,3 S* G4 _1 B- V3 M$ n7 V. z
不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
& ^/ ]: g5 {2 v9 _0 k/ r不過還是希望能夠先把這問題解決!
! @3 q* L: e0 @$ G9 ~; I" `0 m希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
9 P& w. @( O" a4 n) o8 @. l5 V    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司6 i( B4 _* [9 Z2 N8 [" H* v
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,
6 b- o0 a+ x6 o" ]2 X) A情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,$ p- \' \7 v" t  d& y2 N$ Y
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
$ O" b: K2 y" b, N+ v9 ^4 EnINT <= nSLIDE_INT and nPUSH_INT;
/ K$ @: o" y5 X8 aLED_INT <= LED_SLIDE and LED_PUSH;
+ _3 z, g: P& l; zLED_SLIDE <= nSLIDE_INT;  s7 }* u4 u* l, x! |$ q8 V& p7 n! B
LED_PUSH <= nPUSH_INT;
- x; I# D# ^8 I/ A6 e# d/ M) W+ v/ v0 z' Z' h3 w% Y
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行9 o/ _8 F. [8 P, V
LED_INT <= LED_SLIDE and LED_PUSH;
! u4 _3 U. j5 {6 t. \- FLED_SLIDE <= nSLIDE_INT;4 A: U) F' ^1 |7 m0 D2 w9 q
LED_PUSH <= nPUSH_INT;
9 \" w3 N6 i! r3 N4 h) U* V6 P在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。% Z4 `- K# w+ p6 S* B) y1 u4 X' z
* Y: H. c. E' W' n8 S! k
. K+ w" f+ P+ ]! W0 \' U- {

. D4 c( l. s! e1 T6 O5 T- m! ]差異是在有沒有多了一個buffer才到外面的pin,  Q; ~  b& m6 J1 g2 h: H
但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?  V# k7 {7 Z  {  N
我不了解這個差異會造成code整個動作不正常?
7 a% ?7 u* J2 f6 z" t至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,1 ?7 ]8 S* ]3 Z: P
在短時間內會有多次的on-off  R( U' M9 E7 b; ~  t) u
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,# @" l/ f& b* {$ \! n' m
這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,- c; N, t4 B/ N
scope也量過ok了~
! j1 q* E8 g. x0 |5 r, p' M弄了好久~不過最後root cause不是在這," A1 T: d% F7 G8 k
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :. H& w7 Z. l$ u7 u$ X5 |
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!1 m, M9 r) t* q6 ~$ \' Q

2 y. B! j5 r5 R* ^- t        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..% }$ e) z0 N9 \7 m4 T0 H
& m# N$ \2 W* e  ?
      thanks & regards
9 g% p: y5 A8 H; n8 @. _ hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-15 02:24 PM , Processed in 0.125516 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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