Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all
! R9 u! b" [; X8 |0 h小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
- {% g2 Z( a+ f/ @9 n4 H! F裡面包含的功能有power/reset/LED control, hardware watchdog,
* J" z* H8 q! ?- Uslide switch/push button detect, CPLD to CPU interrupt event,
  O7 U! t: F  n/ t) d, n7 q6 s  fCPU read/write CPLD register這些功能,
! d4 w0 A) q* s+ y# o+ ^在開發時,為了能夠快速的看一些裡面定義signal的狀態,
1 S  l" Y* \3 M/ j/ I就在外面接了7顆chip type LED做debug用,
1 c) [. u  b; ?9 Y1 ^而這7顆LED是拿來看slide switch/push button以及interrupt狀態,$ O$ Y& d2 O% j( [/ A' I
而slide switch/push button只要有動作都會發interrupt給CPU,( V# |# U/ w1 n
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
( l3 n9 L2 |  z+ ~8 K而slide switch/push button的interrupt event "AND"起來後,
8 E! d! {0 Y3 f* p. c再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;; V2 ^/ s( U) P) I
只要這兩個功能的process同時compile,nINT在high or low level,
* \7 U* N9 V3 v! h有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,
, |6 R. D9 D' f- M" c  b9 n2 a但各別把各自的process mark起來不compile就會正常,/ \4 O! X0 i7 p% T, d! @7 S
在修改code以後,已經有解決這問題或應該算是改善吧,3 A* {- z% L$ x2 ?' Q6 r; D: R
因為更重要的問題來了,我把debug LED拿掉,
) J) F% {9 C& x這兩個要發給CPU的interrupt功能就出問題,& s: Y1 V. p7 h" G) g0 h0 M
只要把debug LED的東西留在code裡面,就正常了,
. L( J8 F1 K6 `) m' F; C+ \不知道板上個各位前輩有遇過這樣的問題嗎?
+ X$ B* I+ H" N; Y: N" o  Z2 o) w  D( B* j0 O/ ~
example:% p  q0 w4 a& H- N$ v7 l& L' T
......4 R# \7 ]3 s- l8 ]
port(
9 r4 k7 d7 b4 \5 g2 _, Q4 DnINT : std_logig;
( x1 n6 [1 l$ v3 n: @) m. p+ uLED_S : std_logic;
! c" m+ ^$ S* w, I) ~: v6 ~0 qLED_P : std_logic
  |  @, {; K/ k! }, H3 u" n5 J) M);; k  N( P, j. m: f- `
......
* p# P8 g) k# Wsignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
/ |6 ?0 R' Y  o/ l0 F+ w' K  b......
8 }7 }- o' g* T. D6 g3 lbegin
, g. ^3 S- ?8 l' e; WnINT <= nSLIDE_INT and nPUSH_INT;; T; r! u8 d) ~' {( s/ o, k% m7 p5 X
LED_INT <= LED_SLIDE and LED_PUSH;& a+ q, M- a" B& u& r) h
LED_SLIDE <= nSLIDE_INT;
; ]' h6 ~" P8 r5 f0 ALED_PUSH <= nPUSH_INT;
5 ?5 n# G/ f) t- B, Q9 w$ i......
% s( c  F; G# R& B# S(包含的process如下)
1 y2 H: Z# A3 q: z$ m2 xpower control process) c; h% Z) G/ J! p  a/ W0 G2 T1 \
reset control process
1 k# Q( W0 ~! W4 @watchdog process
$ o" |$ x' ~9 x4 t* c6 \7 ]read process
) m3 I0 O% ?. N5 l3 G. cwrite process
* P6 f% n. ?& {3 j2 |slide switch detect and de-bouncing process3 i# q; [+ q( v4 w2 v3 `
push button detect process$ S" M1 T8 T% N' i3 U$ l9 m
slide switch interrupt event process: x) m! K" |: ]# v
push button interrupt event process
; y& m8 _, P* s' I2 a......
- c, r7 h6 k" R5 [5 ?0 c4 ~4 [
# j0 O6 \% C8 o+ _3 u1 c7 o7 |現在的code上面的寫法已經正常,
4 e( a" |) P8 }但是只要把這三行都mark起來,
' w* U/ `- E% ~8 K* Y! XLED_INT <= LED_SLIDE and LED_PUSH;; F" n7 |4 [& C9 p4 Z1 e9 S
LED_SLIDE <= nSLIDE_INT;' }! g3 s# l* A" E0 I8 K; U
LED_PUSH <= nPUSH_INT;
8 l# ]1 m3 I, X; p, T, T5 w; u! J整個code動作就不正常了!7 f% j7 j; ~; e5 T1 B$ f
我是用Altera EPM570 -5ns那顆來做,
  E- e% l. |: K* I2 r; Y0 b不知道說這麼多有沒有表達清楚,其實有很多問題想請教,) B1 Y! {! \' f3 ~0 m6 w3 a) k; _& I
不過還是希望能夠先把這問題解決!
( s" l9 Z8 j( h希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...
( H9 i0 l6 z% A$ C    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司
# b0 V7 C( X4 I' S+ r( U) M3 f     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,7 f) W" Z6 _: d1 A
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
9 ^1 j8 S" B! Y各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
% y# M, I( u- q2 z0 _nINT <= nSLIDE_INT and nPUSH_INT;
/ q6 O0 Z- x9 I) g* T) fLED_INT <= LED_SLIDE and LED_PUSH;$ [- n5 ~- s& S, h; c1 V
LED_SLIDE <= nSLIDE_INT;9 n& T: Y4 z' l8 q" @, F: o
LED_PUSH <= nPUSH_INT;
3 P( Z- p: b" q) L. L$ D
. p' [* M8 q2 m+ N: ]8 G& \8 N  \* N情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行3 b) P% |+ H4 F  Z+ G
LED_INT <= LED_SLIDE and LED_PUSH;
5 @9 L3 \* E7 C7 p5 GLED_SLIDE <= nSLIDE_INT;
3 h! S3 }! v( qLED_PUSH <= nPUSH_INT;2 K( l) k/ p" @' u* O: u' a
在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
  v( m3 ^( B( @
- a9 R2 ]8 y1 u% [  k2 G% _- i* M) U" @0 w8 z  z" r( ]# F8 B, `, S
5 P! A' q* P8 r2 U9 W  ]" ]
差異是在有沒有多了一個buffer才到外面的pin,
! v: N/ h( J$ N0 }- A但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?1 Q' C& K5 u, M
我不了解這個差異會造成code整個動作不正常?5 u' M% ^4 ], w/ G5 P
至於altera那邊我會試著去尋問看看!
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,+ }3 \* O" ^% D+ z- p6 j: s
在短時間內會有多次的on-off. q  S( P2 v& D0 m/ X2 V
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,' G' n: i' {6 j3 j" }/ W. V+ s
這樣才不會因為機械彈跳的現象,造成誤動作
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,
- P' Z8 h) n, c# n2 E# T+ S8 {scope也量過ok了~
- T$ C8 T- Z4 [* e2 _, e弄了好久~不過最後root cause不是在這,+ e: x0 n- Z9 Z
雖然已經解決,但還要去查一下資料看是為什麼
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :, j5 ^% j. K. E, w
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!0 X% S: Z; R8 C$ [
/ K( w! j4 `2 f% h* B+ D
        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..  U5 l8 d- l0 V' b

/ V4 @1 R! z0 G" ^( x0 o      thanks & regards 8 f+ i, L5 O9 j3 J: Y. I1 W
hant763  .
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-16 11:16 AM , Processed in 0.125516 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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