Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all* a9 r* b# R4 A) L/ M% q# T# F
小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
$ Y# i+ @3 ]( k! b5 X裡面包含的功能有power/reset/LED control, hardware watchdog,
; W6 x$ C# I2 ]  |% ~+ vslide switch/push button detect, CPLD to CPU interrupt event,# W( X7 ?* L6 j, ~" W% Z
CPU read/write CPLD register這些功能,' _7 M( N* C8 Q% |
在開發時,為了能夠快速的看一些裡面定義signal的狀態,$ V, @" S2 h; K/ @4 p. I
就在外面接了7顆chip type LED做debug用,
$ {/ r/ L7 A' v- U. z5 o而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
: ?+ G# T9 N+ K9 Y# Q! l% F. y$ t而slide switch/push button只要有動作都會發interrupt給CPU,0 B' z6 m4 e6 \1 i5 X
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
4 R% [5 A) ~7 B( x0 c而slide switch/push button的interrupt event "AND"起來後,
0 `& D7 E1 ~/ I+ e" M' ]% D再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;3 R( b1 r- `. e6 ^) X% j! N
只要這兩個功能的process同時compile,nINT在high or low level,
  m/ N) J) h, T  k# K& N有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,% a4 Z& ]% I* y0 J$ c2 @
但各別把各自的process mark起來不compile就會正常,
' A0 F) ?  d1 T( r在修改code以後,已經有解決這問題或應該算是改善吧,
, T! f; k! ^, n& ~' ?% S% z) V因為更重要的問題來了,我把debug LED拿掉,
8 F$ T; \4 v$ y) G這兩個要發給CPU的interrupt功能就出問題,
8 G" h# l  ?  j! e: X9 ?% ^, m只要把debug LED的東西留在code裡面,就正常了,
* v- m) h3 r2 f; E) S不知道板上個各位前輩有遇過這樣的問題嗎?1 r5 ^5 G2 n9 q5 Z+ |

7 R( t: J$ @8 e8 j$ wexample:
& E- [9 W! A& b) r......" c7 ~+ R$ a* p6 p- w7 u
port(* l0 n1 B& I; Y( `
nINT : std_logig;
7 c+ H( w! b* U1 t) g9 ~. v6 HLED_S : std_logic;
. o7 }& t, x* y9 _# aLED_P : std_logic
6 r- z/ }7 P6 |& j);4 q- h, t# p0 }; q3 g! b
......
1 q# T1 Y8 g: ?( p, B4 Asignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
+ @" W% j5 Q( r......, C( P  F: `0 w% B
begin
8 }- N/ l, t# SnINT <= nSLIDE_INT and nPUSH_INT;
; Q' y. j  j8 h' |# T5 NLED_INT <= LED_SLIDE and LED_PUSH;: i  |$ Q! |+ Z* i5 f, |9 p: X
LED_SLIDE <= nSLIDE_INT;0 |+ h) L$ l- ?9 c7 |6 D
LED_PUSH <= nPUSH_INT;
8 N+ S: V# G8 ]0 I  A3 q......& D+ L5 z$ I3 L' ~4 B) b( |
(包含的process如下)' L: A# H* e; A6 l5 |1 ~' |
power control process/ P( l: B9 [2 T, d' x6 V, B
reset control process$ h* R9 a1 W' L$ v4 [! V$ X; j9 c
watchdog process
2 p$ C! t+ M3 Z. f+ gread process, T7 d) Y) K" n- v6 V) m+ ~9 o
write process
. q3 {+ X. ~9 N; r. C. C3 Nslide switch detect and de-bouncing process
6 h5 x7 W- N* a# Y$ X6 Spush button detect process
/ Q; e9 m2 v+ o1 A" A. @slide switch interrupt event process
( |$ T' B& h- g* K9 [push button interrupt event process! O+ n" X, }+ P. Z8 O
......
6 Y5 l9 I3 i8 D
- \' @8 V) t* D2 C, Q% K現在的code上面的寫法已經正常,
' U5 ]1 o- p8 Z! h4 t+ [. i  C4 w' c但是只要把這三行都mark起來,
5 o. I" a$ H. y( F+ M! m1 KLED_INT <= LED_SLIDE and LED_PUSH;
1 z9 \7 N4 J1 ALED_SLIDE <= nSLIDE_INT;
# L# r+ M: W9 {: z4 K- pLED_PUSH <= nPUSH_INT;
6 w9 T$ q$ K! X* H6 K, z整個code動作就不正常了!
7 V- C6 W4 o9 N# x2 E5 t  m+ ?我是用Altera EPM570 -5ns那顆來做,
4 M$ Z" V$ V9 J! _% g4 M8 B不知道說這麼多有沒有表達清楚,其實有很多問題想請教,/ U: n8 G  f' p3 e9 [
不過還是希望能夠先把這問題解決!
' y/ a) r# P! t$ I# N: f希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
7 X; R# x0 @6 u$ D& J" W" \    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司3 ^6 ]% q% u8 P9 n
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,
% _: N; }& Z( S3 L& t情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
( p, v! _4 q5 x8 {各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常% N2 U3 M* B9 D! c+ C1 L2 D: I
nINT <= nSLIDE_INT and nPUSH_INT;6 J7 b7 m1 R' j  r3 @% j
LED_INT <= LED_SLIDE and LED_PUSH;
/ j+ t+ s' \0 [: s$ zLED_SLIDE <= nSLIDE_INT;) `* }% i2 g+ C2 g( e' \. N
LED_PUSH <= nPUSH_INT;
; Q/ S6 D8 t" o# I7 c4 I% m* }# H+ l7 W$ x. r7 }
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行
7 x; f- E4 C% n! \& p+ YLED_INT <= LED_SLIDE and LED_PUSH;7 P8 L9 Y. A/ g1 Q) Z
LED_SLIDE <= nSLIDE_INT;
+ u3 ~& j( z: o/ {2 n$ z# \: uLED_PUSH <= nPUSH_INT;
  w, X. W1 X4 G' q7 J2 n  I; E在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。9 Z( s9 G9 k1 \( M- ?- V9 o
, K6 G# p7 C# {8 G4 a& n

6 t  l; r+ A; `4 `
; t0 b  ?/ r; M& l# N0 L0 h4 G差異是在有沒有多了一個buffer才到外面的pin,
$ J# r5 K# ]+ x5 i但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
9 p) O6 B. Q( \8 L7 `我不了解這個差異會造成code整個動作不正常?+ |% `8 ]: H, Q2 u$ ]: p- F
至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
" r3 _4 I% @8 v0 m% Y  J' x在短時間內會有多次的on-off  o! {8 X% |. G
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
  k' ]& O2 T7 @1 j這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,$ s! ~. y; Z- ?$ b
scope也量過ok了~
6 ^% N; }0 M, H/ P8 B! f9 n弄了好久~不過最後root cause不是在這,% h: n6 [4 q( A
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :
# @5 B1 t5 S" g+ O: I6 J       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
6 c2 x* j& \4 i' J4 k# c2 M$ H# V0 {  S* P
        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..
! E4 a8 q: G4 Z" L
: ^* _9 h* A  {      thanks & regards 1 ^2 ^! N5 Y6 I0 B
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-29 12:55 PM , Processed in 0.136017 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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