Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all7 J. _& {. ]; W
小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,2 A  X$ n/ Q2 v% }: c" x
裡面包含的功能有power/reset/LED control, hardware watchdog,
, S* u( H9 e9 `$ E% }7 uslide switch/push button detect, CPLD to CPU interrupt event,
  ?/ Q* _$ X9 i9 s$ hCPU read/write CPLD register這些功能,
" s  Q; f2 J3 n/ `; K2 e. u在開發時,為了能夠快速的看一些裡面定義signal的狀態,
2 d! f# M; v0 Y$ o8 f就在外面接了7顆chip type LED做debug用,3 i6 }3 n- E; l7 {# k3 g
而這7顆LED是拿來看slide switch/push button以及interrupt狀態,7 ~' h" \9 u0 v. o8 c; B" |; V  S
而slide switch/push button只要有動作都會發interrupt給CPU,
* z/ m7 @- N5 |( V; n這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
7 ]3 \8 t! O! c! H. |& Z& r4 {$ I( p而slide switch/push button的interrupt event "AND"起來後,8 f# d0 C, ?; t0 p) }5 G
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;: n2 I, G! I6 ^2 P
只要這兩個功能的process同時compile,nINT在high or low level,
& v& g- A- B$ d有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,; G. M# C$ Z4 B: v3 t( F
但各別把各自的process mark起來不compile就會正常,
& M8 A, \9 V9 \% D5 l在修改code以後,已經有解決這問題或應該算是改善吧,/ F0 t" u+ @, C* U1 \
因為更重要的問題來了,我把debug LED拿掉," d, M2 r& n, p& _; h7 e" I# c
這兩個要發給CPU的interrupt功能就出問題,
! \. a/ }4 ~9 \; N& J只要把debug LED的東西留在code裡面,就正常了,
& x4 K) C: Q' R9 a, i不知道板上個各位前輩有遇過這樣的問題嗎?/ ~5 q% Y& }6 T. H5 P/ L# ?

% O& r* f, _2 _" F4 bexample:/ t  e% [3 `/ t, P& A  M2 I
......7 x$ [9 R: M! E0 t- ~
port(
* u# R# R! ]( ~nINT : std_logig;
6 a  R' q6 f- D; K+ X$ l$ E: {$ Y$ eLED_S : std_logic;4 y, @. ^; K3 z8 i
LED_P : std_logic4 ~/ T- J; b, m. b4 Q" T" H
);
9 k# a9 i& [$ x$ Y2 B......
5 S1 u( V9 J6 z: H6 Osignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
) x/ j: Y% ~: \; p......
( m& u/ ]9 @; K' wbegin1 z* E1 |2 B3 [& y) N: @) K
nINT <= nSLIDE_INT and nPUSH_INT;
3 k9 i7 f# X+ G( Q# k8 o; r; K' bLED_INT <= LED_SLIDE and LED_PUSH;
' M6 c' h6 ?5 `4 L; L. VLED_SLIDE <= nSLIDE_INT;
, Z/ i$ O3 i( D* e, z6 ?4 zLED_PUSH <= nPUSH_INT;( d0 c0 G( o; w
......
" x3 f/ B' x. i: J% t9 M(包含的process如下)" J3 |6 k  w$ s) C
power control process
+ F( g, _# B0 ?, O. J; _! yreset control process9 F* J+ j: A# _/ s" e
watchdog process
+ i, c% y# i* m7 N& X& H/ ?- c5 `# [read process
* P7 f. ?6 t$ x  J) v0 Gwrite process. {* N; t9 l7 [; n; u3 m  A
slide switch detect and de-bouncing process8 f, b9 j1 j# ~
push button detect process* c  T+ @# R2 S$ i8 p
slide switch interrupt event process
5 n* w0 F* R4 M- x+ spush button interrupt event process5 K3 s2 A0 l1 @) \# N
......
0 w" |5 Y9 p8 Z
6 O& H% O; G) Q  S, g* x) c現在的code上面的寫法已經正常,3 {! `3 f( w2 w0 x' @6 E- W
但是只要把這三行都mark起來,- N9 V& b1 @# _' X/ P# x
LED_INT <= LED_SLIDE and LED_PUSH;
( Y, \/ |5 G4 u; xLED_SLIDE <= nSLIDE_INT;
2 @5 d! |) ~3 m/ c" ZLED_PUSH <= nPUSH_INT;
; h, |" x: r4 X( ]$ h整個code動作就不正常了!, ]* m5 U1 S$ e$ C) k
我是用Altera EPM570 -5ns那顆來做,
6 |' v# b- v& i7 X, v不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
& D  y) Y: n& |1 C4 K( e" q# X' f不過還是希望能夠先把這問題解決!
+ L7 m! y$ R: g5 D/ `5 T希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
! {4 ]$ b0 e3 m    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司5 P4 I1 J# A8 s0 l9 `/ ]: K# a
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,% i" I* }( w4 c* |1 o  Y$ X
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
+ \: N8 m: a: p& v. Q各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
* A0 r$ L7 V- D) q2 o' InINT <= nSLIDE_INT and nPUSH_INT;% J( D$ W- C' i; b
LED_INT <= LED_SLIDE and LED_PUSH;
$ q+ n5 _  G' v8 y& |) {& NLED_SLIDE <= nSLIDE_INT;0 x: D6 k% X3 |5 D  h
LED_PUSH <= nPUSH_INT;2 P( z) t  G9 i# g" \  i
+ t! w' n7 d8 N( F' Z5 F3 Q
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
+ v: h( s3 [; g$ T/ rLED_INT <= LED_SLIDE and LED_PUSH;
. F9 }. z7 f/ Z0 bLED_SLIDE <= nSLIDE_INT;5 X7 a4 S6 `* k, j/ v4 N
LED_PUSH <= nPUSH_INT;+ O5 u& w% ?/ {+ a: V
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
7 W2 N4 s2 s! u
! t8 |& \& X( ~
- N1 b7 Z4 t: L- z  ~0 ]: h0 h3 D0 T4 H
差異是在有沒有多了一個buffer才到外面的pin,
# Q% t6 J9 q. d' [7 P但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
9 m% V! v) x; G% C& N7 q6 e; X我不了解這個差異會造成code整個動作不正常?
# b3 p4 F" ~' P3 |' ?" d至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,1 q7 |8 x( k. m( M
在短時間內會有多次的on-off
3 D. P9 ~6 I  V+ o所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
( W5 N4 H5 C% c3 m這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,, ~: P) }' S2 u% Z
scope也量過ok了~* R# X; U+ s* y2 \
弄了好久~不過最後root cause不是在這,7 x. `, l1 d* W: j
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :
3 V/ }" N# P* g/ J* o       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
& M6 N  K1 A5 b8 g! V, E' r6 F
        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..
( i4 b2 M. v. L4 C; \( Q7 f! i" {0 B+ y5 H
      thanks & regards
" s$ o7 L0 ^; p& t0 N hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-4 01:45 PM , Processed in 0.164010 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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