Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
Dear all9 r8 [% _7 V( B6 m9 `) w
小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
2 H# h: p# q- [2 o裡面包含的功能有power/reset/LED control, hardware watchdog,; h4 d; _- P. X2 Z  |7 C
slide switch/push button detect, CPLD to CPU interrupt event,$ ?( R6 ?3 ?  t  o1 @
CPU read/write CPLD register這些功能,
) d* N4 N- o7 h, ~在開發時,為了能夠快速的看一些裡面定義signal的狀態,
% L$ l. @9 @" L0 Z就在外面接了7顆chip type LED做debug用,
- ?: s, {; ]. }  R6 \而這7顆LED是拿來看slide switch/push button以及interrupt狀態,
! ], n3 J# I* p$ z* {# q/ I而slide switch/push button只要有動作都會發interrupt給CPU,% B1 p- T. \- ~0 K3 Y' e2 {9 P( x# W
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
/ h* G0 s7 a9 y- t而slide switch/push button的interrupt event "AND"起來後,  D) E4 y2 @6 `% l8 E* _
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;
, Y, o0 b. T8 w. Y" j0 U& [只要這兩個功能的process同時compile,nINT在high or low level,$ r" q2 b$ g  i# z7 D6 }
有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,& z% c9 J' N- x, o5 Z
但各別把各自的process mark起來不compile就會正常,' B( p6 K# |6 p: \7 o
在修改code以後,已經有解決這問題或應該算是改善吧,( W8 n  W* s  p; r
因為更重要的問題來了,我把debug LED拿掉,6 g% X' E- L3 W' @; Q0 A8 j% a$ a9 v" u
這兩個要發給CPU的interrupt功能就出問題,
* m; ~: h* s' ]1 O) [+ X" {$ F! U只要把debug LED的東西留在code裡面,就正常了,1 _' q$ L9 a% U
不知道板上個各位前輩有遇過這樣的問題嗎?
2 e5 i/ O; R. J) f1 E1 C" i
) }! ?" l  m$ u! t% c+ vexample:+ O" U! o% \- _6 Y0 K
......2 x, [/ q6 p1 k9 A* u9 Z
port(
0 e# w% H# Z' h) JnINT : std_logig;  f' E6 h$ S* u4 R2 d
LED_S : std_logic;
/ Y' F/ k# H  A" ^LED_P : std_logic
  i: n' \8 m; U);
' Y$ N$ w. E/ t- R: z......: H' C- @5 J! O5 C: M7 L+ |; J
signal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
; o, g1 t# v# |$ P# W......8 k0 g' u# A  M: }5 m
begin
6 P, L6 T, x3 y( R2 L, @8 XnINT <= nSLIDE_INT and nPUSH_INT;9 o, N3 G* Q, p7 H- z
LED_INT <= LED_SLIDE and LED_PUSH;
' R# s0 U, ?2 A: @$ WLED_SLIDE <= nSLIDE_INT;5 T+ x; D: c; @0 Z* ^6 @
LED_PUSH <= nPUSH_INT;3 f! k( n) m& x! d( T- C2 j9 f# Y
......
. p! X. F! V. C+ ]. H7 g8 {, i(包含的process如下)
/ u' Z+ U. j1 v& Ipower control process
, k! z' R6 g" S: u/ u0 l" Xreset control process* G9 p8 j4 [( i& `* w: q9 _
watchdog process
5 n- D2 S6 D; s9 M: K( y: tread process
. f8 u9 R# [  v) ?0 ~" dwrite process
7 K% r* ^3 s" R4 m& |slide switch detect and de-bouncing process
9 H# s0 d' g; [; bpush button detect process+ \4 N' ~/ H' b
slide switch interrupt event process
: u+ u2 O' D, d3 V2 h( ]9 npush button interrupt event process( ^/ K" t: A# g9 V
......! |. `9 o9 G! t/ s9 ?. [. c( P

, C% W) B% I; m1 C8 a3 s; e/ d現在的code上面的寫法已經正常,
: O. \+ M) y$ i但是只要把這三行都mark起來,1 U) P, z* U( }* ?/ _( o; S, R9 B
LED_INT <= LED_SLIDE and LED_PUSH;
: m) y/ B" c" `& XLED_SLIDE <= nSLIDE_INT;4 k6 r7 _9 u& }( C; t& J2 r
LED_PUSH <= nPUSH_INT;2 n0 T7 C* O# x! b
整個code動作就不正常了!- C$ I/ k  P* f6 G3 Q* N6 k
我是用Altera EPM570 -5ns那顆來做," e' T) b  i' ]
不知道說這麼多有沒有表達清楚,其實有很多問題想請教,
% I9 v7 b# F7 A3 J不過還是希望能夠先把這問題解決!
1 Z* r& W9 K- [" [希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2009-3-17 21:04:14 | 顯示全部樓層
我現在有去多試幾種寫法,% Z, w2 h0 O' A* i
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,5 E5 M$ X8 A$ I2 _, \- P
各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常: G) {, i8 Q1 n
nINT <= nSLIDE_INT and nPUSH_INT;
0 H5 d- Q  D7 M4 OLED_INT <= LED_SLIDE and LED_PUSH;
" h+ \7 G$ \7 U3 L6 r7 cLED_SLIDE <= nSLIDE_INT;
, S" n  d& v  B. w2 R2 iLED_PUSH <= nPUSH_INT;; u6 v0 b7 Z2 G$ g/ S% O

/ s+ K0 }* K  q" i  V情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行' ^+ x; l4 s  S! K- d# s5 ?) [
LED_INT <= LED_SLIDE and LED_PUSH;
" i8 ^7 R! q4 S. F3 `: e  sLED_SLIDE <= nSLIDE_INT;
5 w5 |# D* \" U# W* _LED_PUSH <= nPUSH_INT;
) z0 v/ {+ s6 `/ ^( j* ]在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
$ p" S! O- a. @  X* g7 ~$ X- E" R* g9 q3 \$ ~

! g. ]4 y, `; r* A* S6 G
2 c2 X! Y& d1 O$ a6 _2 ^差異是在有沒有多了一個buffer才到外面的pin,
- h0 E' V& m( M6 d但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
9 z  L- M  f4 T+ R& M5 \6 w我不了解這個差異會造成code整個動作不正常?) N4 S8 y+ r  r( O* Q  Y+ J
至於altera那邊我會試著去尋問看看!
3#
 樓主| 發表於 2009-3-22 14:24:49 | 顯示全部樓層
debouncing已經在程式裡面了,( {+ r7 s& |7 b5 R' m- Y- x: \  A
scope也量過ok了~& I7 M8 J7 U8 Y2 l4 C' u
弄了好久~不過最後root cause不是在這,* y' D6 P% n9 X) `! D# w; d2 A
雖然已經解決,但還要去查一下資料看是為什麼
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 06:48 AM , Processed in 0.102013 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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