Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
$ x$ t$ H( [- `( e% j' t小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,6 m0 r, l/ b0 o+ N  o4 k
裡面包含的功能有power/reset/LED control, hardware watchdog,' C1 ^9 E$ A; B7 |
slide switch/push button detect, CPLD to CPU interrupt event,- q4 T/ Q! ^3 G1 `6 ]; g
CPU read/write CPLD register這些功能,0 w- \4 J& w, f' r0 @+ b
在開發時,為了能夠快速的看一些裡面定義signal的狀態,+ i" Z- O7 D# u! d1 d  M+ G* _
就在外面接了7顆chip type LED做debug用,1 m4 L) T3 A7 x1 W3 p# d
而這7顆LED是拿來看slide switch/push button以及interrupt狀態,9 x6 W5 D( D: X: C. B1 f& }0 y
而slide switch/push button只要有動作都會發interrupt給CPU,
  E9 r+ r4 E# L! w7 i4 M1 P這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,% k, T. [* G" V; ?! a0 t& x
而slide switch/push button的interrupt event "AND"起來後,% d% i" [; ~2 }  k
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;9 \9 p2 {- {# i' `& f
只要這兩個功能的process同時compile,nINT在high or low level,
8 L+ j7 X9 f2 c有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
0 Z1 @9 q6 l" ?0 w. R1 J9 m" K但各別把各自的process mark起來不compile就會正常,
" [0 X) k; k% A在修改code以後,已經有解決這問題或應該算是改善吧,
0 |7 X) u$ }) Z3 \, [) p: t因為更重要的問題來了,我把debug LED拿掉,
* a8 j) T" x: Q: Q8 }這兩個要發給CPU的interrupt功能就出問題,
; O0 h& v( H  a4 y. u只要把debug LED的東西留在code裡面,就正常了,2 y% [5 U+ Z1 h7 W
不知道板上個各位前輩有遇過這樣的問題嗎?) w* r. ^$ L6 h) p( a
* b4 Z# @/ d5 `6 X, s1 ^
example:6 m$ e. |/ G! |1 l
......
% D. o1 Z( k# X+ B1 g$ K( W& hport(8 G) Y3 {$ G) ]* b/ {% v: d( M
nINT : std_logig;& r) K* Q5 b+ `( V: ?3 [" m
LED_S : std_logic;- [- x9 o# G4 C/ }# L
LED_P : std_logic: d$ b' t; F' k& H
);( [; q7 T5 @0 g: |% T# V
......4 r/ y) C- C' a0 R" Z& ?
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
9 f8 ~  j# ?- q# |( l( @  v% ?......9 ?' s1 e( t/ b, `1 p
begin! x/ T6 F+ V2 z* ]. S
nINT <= nSLIDE_INT and nPUSH_INT;- M  ?0 V+ a0 h8 t8 D/ l
LED_INT <= LED_SLIDE and LED_PUSH;
4 S7 \$ f  X3 }* p$ N) b+ rLED_SLIDE <= nSLIDE_INT;& N7 n: z, L' ?) l* }
LED_PUSH <= nPUSH_INT;
3 W/ {( v9 i, D: x0 z......
# u- l6 M( `1 t9 m1 l0 `(包含的process如下)3 v  q/ C. F( H+ L9 M
power control process3 Y: J) N( _6 E
reset control process
' _1 \5 E% [' ?3 v8 Bwatchdog process/ y; l  X; Q* M7 b$ q+ Z. Z1 K) d6 J
read process
! a. r, C0 x6 M) s( Q8 c# f5 b/ ]write process& \  B- F/ Z' j. ~( N4 \0 T
slide switch detect and de-bouncing process/ m, q# t0 l/ T, u. ]" m9 h8 l" a
push button detect process( A5 m. J0 H) [7 z
slide switch interrupt event process+ r9 J" F0 c3 x- t
push button interrupt event process* |4 b1 J9 }9 r$ ?7 ~4 A7 Q
......* y7 m$ |! N$ Q4 X) _
1 m/ g" [% ~8 p3 ?6 I
現在的code上面的寫法已經正常,0 B8 h% A" E( q) S5 L8 \- f
但是只要把這三行都mark起來,
8 D% o. r  |% O* MLED_INT <= LED_SLIDE and LED_PUSH;
0 f# y; r. E8 N! S" HLED_SLIDE <= nSLIDE_INT;
* P; `1 X: p0 `1 D. }* t% ILED_PUSH <= nPUSH_INT;
1 Z* y) L( x, X$ k6 D' u# X: u整個code動作就不正常了!7 C- _2 x9 L4 t: u' A
我是用Altera EPM570 -5ns那顆來做,
8 q# q  g6 j2 K7 S2 ~0 ~2 o不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
* P( ?5 e7 F; S6 K! ], g不過還是希望能夠先把這問題解決!
1 [/ i# b. S5 o' o( N* k2 I5 s9 q希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
" g3 Z- `$ |3 H5 i, i    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司
$ W. Q" E% W6 V8 r8 [     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,, D: c! }& k& G( o6 |: p' z
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後," y( g, W7 ~. a% X* p" w/ v
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常  Y( T- a) q5 v& h1 z/ X1 Y8 h
nINT <= nSLIDE_INT and nPUSH_INT;
! n* e# r2 L! X: n1 G; C/ Y* KLED_INT <= LED_SLIDE and LED_PUSH;
2 N9 y* f9 r1 g- [/ `3 _! qLED_SLIDE <= nSLIDE_INT;1 Y) C* m' B: E& D: Z% P$ q
LED_PUSH <= nPUSH_INT;
7 d8 f6 d, f4 J7 |1 v6 j$ j  v/ i$ d$ A& j  k% c. T6 y! @& ~$ F. H
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
' }: l5 t, q7 A5 yLED_INT <= LED_SLIDE and LED_PUSH;
. \  E/ r0 D0 X5 i$ }# X! bLED_SLIDE <= nSLIDE_INT;  e' I3 P9 F; i  q* F
LED_PUSH <= nPUSH_INT;
& Y; g4 B, T5 p1 g- y) {# S在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
. Z5 F' I, w' y5 I, h( B1 B& l7 x5 ]8 p
$ z1 @1 _7 ]! b$ I" M
6 U  b& q8 [! z5 W1 ]+ W, q7 S* R
差異是在有沒有多了一個buffer才到外面的pin,1 C- u& O3 E, m9 z2 F( b- x0 ?
但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?; e3 N* w1 s6 c# W
我不了解這個差異會造成code整個動作不正常?
$ J+ r! U. a* h/ r至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
$ g) s" _. n9 J& H. q  r在短時間內會有多次的on-off8 I! g$ O3 }- ?/ @
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,$ j* F1 `. u0 d$ z
這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,7 P6 }$ V; o2 L6 t2 J% q
scope也量過ok了~5 S3 O/ h& Q! n- P% z! R7 J* a, Y3 B4 w
弄了好久~不過最後root cause不是在這,
& a0 l' C2 U7 N雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :" c& Q( j4 Z+ D
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!8 J: ?, F* u7 t* R1 \# F

# C* @5 o) W/ X. k5 A        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..3 w2 m9 v: c; i& D- J# B
7 t7 o1 Q5 I. P2 m% {6 f4 Y( o
      thanks & regards
4 R4 y: V: _+ b- [' d, l# x% W7 m hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-23 10:47 AM , Processed in 0.128516 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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