Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
7 t4 }$ v; d# l: y. m小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
' K: y5 l$ h5 e4 i裡面包含的功能有power/reset/LED control, hardware watchdog,* q5 J& \# j! n7 @1 {( D
slide switch/push button detect, CPLD to CPU interrupt event,  g0 I. B; s: t/ n% q% F1 y6 S
CPU read/write CPLD register這些功能,& N/ a% V  D. E. X
在開發時,為了能夠快速的看一些裡面定義signal的狀態,. A6 ]8 {) G# ]( r! O
就在外面接了7顆chip type LED做debug用,
! G" h7 r5 o% p" l" [2 d而這7顆LED是拿來看slide switch/push button以及interrupt狀態,- ^! |& x/ j5 \- w+ U
而slide switch/push button只要有動作都會發interrupt給CPU,
8 m' C4 r7 l# T- |2 U) F( `% H這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
; u) g4 L3 `# J4 c2 k3 V而slide switch/push button的interrupt event "AND"起來後,
- t4 @/ k! [9 S7 b# U* ~9 p/ L* @再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;5 i, D' o( z! t. d! Z
只要這兩個功能的process同時compile,nINT在high or low level," G# V* `2 e; X9 y* N/ m
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
6 E  q' z+ ?, z0 ~, l但各別把各自的process mark起來不compile就會正常,5 V) p( D: H5 k' E5 K
在修改code以後,已經有解決這問題或應該算是改善吧,5 R# c) B/ u9 D) R% G, ^5 [
因為更重要的問題來了,我把debug LED拿掉,8 o/ s% _4 t5 ^) n- {4 t" _" B
這兩個要發給CPU的interrupt功能就出問題,
) R8 `, g1 w  _. P6 G只要把debug LED的東西留在code裡面,就正常了,  r; g0 R' U6 Z7 Y3 c/ g# D/ i
不知道板上個各位前輩有遇過這樣的問題嗎?
) L% ^0 B1 L7 n' z1 q) V* e2 P+ W6 l& t. F0 ]$ F5 r0 G
example:5 u" ]' p" M, a
......& Y' L0 B( F  X
port(- p, Z. u1 W% H' f& v
nINT : std_logig;
! u; ~) {! _$ B& a) U5 S9 i! _" RLED_S : std_logic;  i: ~$ _. C1 _: p7 \
LED_P : std_logic
# a2 w) O0 O# U' u% _);
( i; d9 c9 _8 M5 t9 Y6 _......
+ m# C) e' m  y% o9 rsignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;$ `" L$ f9 n7 T9 B8 k
......
+ v1 s% w6 ~) [% obegin
9 {7 [2 J' l' w. s- F; G/ NnINT <= nSLIDE_INT and nPUSH_INT;
4 w, U$ `' u, ^8 bLED_INT <= LED_SLIDE and LED_PUSH;/ y' V& I1 i5 w) A6 K$ Y/ V  R* V/ K
LED_SLIDE <= nSLIDE_INT;
- ^5 Z+ {5 K* }: O! O" ^: y% e' g! v' RLED_PUSH <= nPUSH_INT;6 X; k7 ^1 f- B9 X
......
0 ^. H. L/ T- u, \# l. D(包含的process如下)3 [3 q# g( T/ b% Q( c/ R
power control process2 S7 E; E# q6 Z
reset control process4 ?; M, C( R( S: ~& Q. E, j3 k) m* I
watchdog process, t5 V; z: t! i
read process6 T$ R  m( Y) A& e# I
write process6 G/ L; A- s6 }& I. @
slide switch detect and de-bouncing process- A2 [$ ]4 r) Z$ n8 r2 O: X
push button detect process# r3 H# g6 p6 d9 C4 ]
slide switch interrupt event process
0 a; h5 u  _' ^" K; ?8 y$ t# Epush button interrupt event process
9 L; w% m) x2 w! [( O4 U......
  m4 @/ ~5 T8 m5 O' y/ X( F2 z, n' Q9 l
現在的code上面的寫法已經正常,: A; y# G4 m  X. m. h" V$ n
但是只要把這三行都mark起來,
! R. F. l- P% G" ELED_INT <= LED_SLIDE and LED_PUSH;
' h7 K# E2 G0 {1 yLED_SLIDE <= nSLIDE_INT;
2 Z7 M( o5 b0 ]& e2 M% TLED_PUSH <= nPUSH_INT;8 i/ @8 k1 O- Q# m
整個code動作就不正常了!
. Q) H8 y0 |9 y- A. J- f我是用Altera EPM570 -5ns那顆來做,
- }5 P* c# C$ {4 O& L7 d不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
9 [0 k/ H2 L$ b2 _7 {( s: b( H不過還是希望能夠先把這問題解決!9 y' x" d/ ]" w2 U
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
' x/ D6 A% P) z/ i: O    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司
# w: k8 L  [% F/ J     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,2 J& X7 b% T  j/ H# y) z  \: X# b5 d
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
: |% V/ f+ q0 Y4 V5 z* H各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常4 L' r$ X6 T' K) E* B3 W& m  o
nINT <= nSLIDE_INT and nPUSH_INT;; W5 s: F/ E3 l0 ~1 q9 m  s
LED_INT <= LED_SLIDE and LED_PUSH;0 Z6 Q3 o0 z& C5 B
LED_SLIDE <= nSLIDE_INT;
+ u; C& A0 C+ {7 @# V& h6 c. kLED_PUSH <= nPUSH_INT;
# ]7 r* P6 v, B, x! p# K/ D3 v& k! ]" F7 [
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行0 u' |# O" N0 V9 w; I! v: W& L! e5 V
LED_INT <= LED_SLIDE and LED_PUSH;
( R% N2 u9 A: {" L# lLED_SLIDE <= nSLIDE_INT;
, L) \$ S% V" _! k/ pLED_PUSH <= nPUSH_INT;9 d' }! ]- N) @/ P# |6 j& K9 a
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。3 K% J" M# T# U7 y7 ?

4 ^5 V8 A/ U3 V" n, X' N2 M$ u9 G4 N3 ~  [6 r

, g: F1 [/ k9 k5 `4 ~1 l差異是在有沒有多了一個buffer才到外面的pin,( f6 }) }6 s' L1 M; c
但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?) k3 F9 t( d. S4 D9 H8 m
我不了解這個差異會造成code整個動作不正常?
/ P4 A+ c6 I. B/ V( [3 x至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
- a5 I# J( c& I在短時間內會有多次的on-off
+ {& w4 K$ S7 ]/ a0 q* N所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,
- n2 d. M7 g+ Q% z" Q# n1 K5 \" P這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,
' T: D% D) [6 m0 e( V  q$ bscope也量過ok了~
( \" I6 J8 R: c4 `9 p% O弄了好久~不過最後root cause不是在這,
( G' Z3 F+ ^$ J& `雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :& G' x$ \+ z( v- C, b
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!1 S/ l( M7 {) b4 g8 l

  U4 `4 a+ o1 J- \/ y; F( [4 ]0 ^) D        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..
0 X2 F$ x+ x$ p, f, v9 }1 u1 T1 i7 S/ i+ \( E% b( F0 u
      thanks & regards
6 G, E5 p; k8 X  M4 Q$ @1 N$ r. `) M hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-4 01:06 PM , Processed in 0.169010 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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