Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
Dear all$ D( I5 j/ s5 J2 b* K! H8 Y* F
小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,. T" H, Y4 v- u, @
裡面包含的功能有power/reset/LED control, hardware watchdog,
0 k' f5 B4 ~2 J5 Jslide switch/push button detect, CPLD to CPU interrupt event,
# E0 ?. l" w% [! m# Q& |CPU read/write CPLD register這些功能,* W0 j3 S, a* m
在開發時,為了能夠快速的看一些裡面定義signal的狀態,0 M7 r  t+ U7 s2 i* ?. M
就在外面接了7顆chip type LED做debug用,
; D# [5 {3 J7 C1 h( p而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
0 A/ U: L- |+ }+ r而slide switch/push button只要有動作都會發interrupt給CPU,
; K8 y- R/ Y! J) ?這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,0 u8 H) G, n  U; s
而slide switch/push button的interrupt event "AND"起來後,+ ]+ W6 Y6 k1 s/ o  R8 \. o
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;# V! v6 |' ?; t% r3 o! L9 R
只要這兩個功能的process同時compile,nINT在high or low level,; j. z2 x& l; K  X2 B
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,2 j$ R+ Z9 @$ G) \$ l
但各別把各自的process mark起來不compile就會正常,
0 g: \* p! ?! P% ^6 r. }* v在修改code以後,已經有解決這問題或應該算是改善吧,) c- e7 O/ B9 G
因為更重要的問題來了,我把debug LED拿掉,  X5 x; h8 q6 G! R; N
這兩個要發給CPU的interrupt功能就出問題,6 U' v+ e7 H6 L+ j1 E
只要把debug LED的東西留在code裡面,就正常了,
2 \7 m+ Y- M) L7 S不知道板上個各位前輩有遇過這樣的問題嗎?( o' J( D8 k% d3 _4 z& K6 [

% T. @7 X+ J+ V* U' S( a3 X' Bexample:1 ~2 d8 v- e) y" v# s+ S6 ^5 x% ~! z
......
: [' P" d$ N9 O& n. t# m+ v; Jport(: |% t1 x1 w' h) ^4 W- R
nINT : std_logig;
7 q1 k& x' ]' W. u( ]6 eLED_S : std_logic;  q/ h3 D  Q  |- j! _& d
LED_P : std_logic9 y+ G& p8 O- P  t& M4 l
);5 M: ~/ O, p* Q
....../ Z# O# C2 G5 F2 E! M5 z# ?
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
5 h7 A* @  x+ B......$ A* U4 [; X; _
begin
7 Q8 d; O; a; r1 M; ~7 FnINT <= nSLIDE_INT and nPUSH_INT;! M. g% _# E8 P* i) U0 x
LED_INT <= LED_SLIDE and LED_PUSH;
* o+ G* V0 y5 o' ?4 J/ ~LED_SLIDE <= nSLIDE_INT;
2 a: d: ?( h% {' p/ JLED_PUSH <= nPUSH_INT;
; Y( o0 R& y. s: Y; I" i/ q......
9 |  l. ^8 ]7 J! {7 X4 S) n8 h1 H(包含的process如下). j/ Z& X7 e4 i1 M6 p
power control process
* f* F" J5 J* i2 ^4 |, z6 M' zreset control process9 o8 r$ K/ G( K3 G: ]  }9 H
watchdog process
$ x7 l, S* }6 e3 C% I* qread process
" Y* z+ P% D% a3 Awrite process$ z* U" W, t* Q& I- ]  ^: m" \
slide switch detect and de-bouncing process. D0 D1 m8 s' w
push button detect process0 V- ?/ Y' Q) M
slide switch interrupt event process/ R% t# U( r+ t& c
push button interrupt event process
% v7 v+ e: R) e+ e  L......2 ?; I* T0 @5 e' `/ S8 ?

  o$ l) g. T8 g  u7 t' t, L現在的code上面的寫法已經正常,8 C  R7 Z0 r7 s( Z: E+ \
但是只要把這三行都mark起來,) e: ]! m' V5 x
LED_INT <= LED_SLIDE and LED_PUSH;
3 C9 v! O3 H' Y% M- e+ wLED_SLIDE <= nSLIDE_INT;
2 l# w$ A+ q* M7 oLED_PUSH <= nPUSH_INT;
. K, `6 Z! _, ~6 n! f整個code動作就不正常了!, Q3 w( w2 M) l; F8 o  s
我是用Altera EPM570 -5ns那顆來做,
3 U% b. z5 P" J4 j; B不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
; @) }# P9 Q, c2 y6 H+ Y不過還是希望能夠先把這問題解決!* N2 {2 o7 M2 M4 D4 d1 {2 B. t9 A! J4 z
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :7 `& g" ^7 I  ]! E9 z& H. M
       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
6 q9 r. d  o/ \8 Q1 C: p- ~# q- v" N; ?! V# e# `  n# a5 V/ Q
        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..
* p  r" g6 C& B4 \, U" E9 E
0 d; n5 P6 x5 n% a& E" Z      thanks & regards " k, ~; S* T5 Y2 z
hant763  .
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,9 t4 @/ C# |, ~! ^0 G* A
scope也量過ok了~
/ ?3 H5 {) J& i- e  G& J弄了好久~不過最後root cause不是在這,) v5 O/ {6 s0 v: Y+ ^  z, q
雖然已經解決,但還要去查一下資料看是為什麼
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象," r3 r5 [) _0 C- ^7 u& j6 z
在短時間內會有多次的on-off
9 w* v, ]- A2 O" D: M# ~所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,: j5 z7 W- c# V5 v6 t# C  T
這樣才不會因為機械彈跳的現象,造成誤動作
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,
* y9 ?% D) F5 H/ }: ?$ ?) U情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
( L- g  N& a; r3 F各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常
1 B2 b2 G! y; G2 CnINT <= nSLIDE_INT and nPUSH_INT;* e8 z8 }# k. S& K, K- L
LED_INT <= LED_SLIDE and LED_PUSH;% \: d# q8 X& w+ [% u8 x$ F
LED_SLIDE <= nSLIDE_INT;: @! }$ O$ u: [6 O6 [8 R! W
LED_PUSH <= nPUSH_INT;
% }7 i1 U8 n. e: N
! G9 p. S, B, [0 r7 T+ ^0 d) m! K情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行: Z7 Z1 z/ ~" Q$ l) n, c
LED_INT <= LED_SLIDE and LED_PUSH;
% I, e2 H; W. B" WLED_SLIDE <= nSLIDE_INT;4 x8 e8 y# P3 i6 j3 j" [2 T6 s
LED_PUSH <= nPUSH_INT;
* y) |- _8 @, p9 f5 ?在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。! w: E7 i+ F2 n1 p- G& H7 R5 {
5 c( C0 H. b3 x1 D3 o6 o5 ~

- ?! O% Q" }) ]& `7 U" Z, H; D- [  f6 C' `9 P1 U% X- z
差異是在有沒有多了一個buffer才到外面的pin,
) m$ u* ?) S1 M# e3 r+ ]但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
  v: E8 {  f0 P/ o* B: b我不了解這個差異會造成code整個動作不正常?) H4 H+ m. _+ x, I
至於altera那邊我會試著去尋問看看!
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點...8 W' R+ v6 k" t- p
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司( }$ b' d" B/ q' [! C9 d1 I
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 01:20 AM , Processed in 0.107513 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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