Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-3-13 23:27:34 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
Dear all
1 e' q* R$ Q; |3 ^  u小弟最近用VHDL在power pc平台上第一次設計一顆CPLD去控制整塊板子,
# Z4 R' H/ T8 h- t! x) W) ]2 J$ P裡面包含的功能有power/reset/LED control, hardware watchdog,
0 k0 W7 z/ {9 j: T; \slide switch/push button detect, CPLD to CPU interrupt event,
  a' h1 {# R3 q/ A# j; r, [6 c  O/ L+ vCPU read/write CPLD register這些功能,1 `7 e6 m# J% j/ N, c5 X. o! Z/ O/ j
在開發時,為了能夠快速的看一些裡面定義signal的狀態,! Q. }- I) }2 S; J0 Y  b
就在外面接了7顆chip type LED做debug用,
0 p- S0 D6 i7 R+ V1 H0 h而這7顆LED是拿來看slide switch/push button以及interrupt狀態,% R9 @6 V% R  Q8 @- q# g
而slide switch/push button只要有動作都會發interrupt給CPU,# M. b9 o& t3 ]! \) q% y
這些功能都一一完成並且「各別」驗證後,才全部組合在同一個.vhd檔,
4 O  b0 j/ w, y' V0 h而slide switch/push button的interrupt event "AND"起來後,6 u# I. A1 y; i( V  N6 D3 T# O
再指到CPLD nINT pin,如 nINT <= nSLIDE_INT and nPUSH_INT;2 q2 F7 m. m! l
只要這兩個功能的process同時compile,nINT在high or low level,
7 |, J5 b1 c1 D$ ]有機會發生抖動,或是有時會發生無法將nSLIDE_INT or nPUSH_INT拉high或low,! j9 G+ w4 I, P9 _6 I- ^9 l
但各別把各自的process mark起來不compile就會正常,
. `! @6 W: a' f$ \7 Y. B在修改code以後,已經有解決這問題或應該算是改善吧," ?% D/ v* @4 U8 e% ?; d5 a3 m
因為更重要的問題來了,我把debug LED拿掉,
" j) p* ^7 E+ i+ S1 A! j) Q7 d5 L- `這兩個要發給CPU的interrupt功能就出問題,
+ g! f6 _! H7 K+ ^1 f只要把debug LED的東西留在code裡面,就正常了,
; q4 l5 }" B0 @+ H, I/ E& Q! v( r不知道板上個各位前輩有遇過這樣的問題嗎?
- _( S8 F& @) s2 w# |- R2 p- M! J1 |' {: J5 c- s; ]
example:6 c: X3 V4 n  h7 s$ ]
......  E: V  {4 w0 @' M
port($ U. d3 v+ I. F: Z/ |& C
nINT : std_logig;9 W1 d2 J5 g3 s4 q- x) b% r
LED_S : std_logic;
! N& c( S9 Z* a8 R6 _LED_P : std_logic! \+ U6 ]- X8 A  D4 D
);
: r$ O) z# z: e( [......
/ J1 d+ ]6 @4 D6 f* u0 Asignal nSLIDE_INT, nPUSH_INT, LED_INT, LED_SLIDE, LED_PUSH : std_logic;
( M$ K- H3 r% j, {  ~+ Y4 E......& s7 |5 f, I8 e
begin/ e4 \: B0 a! t  O
nINT <= nSLIDE_INT and nPUSH_INT;1 ]. s( d- m  Q  W
LED_INT <= LED_SLIDE and LED_PUSH;
. U# Z% h7 X( RLED_SLIDE <= nSLIDE_INT;
! ~$ o/ @5 _7 p1 X& j1 ULED_PUSH <= nPUSH_INT;4 A) M9 N4 Z% y. i9 L% }# K4 h
......
- m3 @: w* G% T# w. a+ A(包含的process如下)
, c* K: U" M' @" P; ]' O* tpower control process
1 q( K0 w! d, s1 w' Treset control process
9 l; z/ Z8 g) u7 m6 ywatchdog process' c# Q1 v. @6 p' F& @# q
read process& ~( f6 O8 |& D7 k, O6 j1 y
write process3 w2 l0 x( T8 Q' b0 h/ k6 q& f6 ]
slide switch detect and de-bouncing process
4 X# y) S+ t8 {push button detect process
# Z5 G: e% N2 k! ]/ D/ |+ Islide switch interrupt event process
, k+ Q9 `% K8 Y$ D) ~/ j8 W8 rpush button interrupt event process  h. |  p6 d' g7 d
......; I. B9 T! G" X" U; {

/ Q' V9 Y3 }/ {現在的code上面的寫法已經正常,
. V8 B0 i- R: z8 G+ j但是只要把這三行都mark起來,
- I; g- P: q) u" {/ M3 t9 KLED_INT <= LED_SLIDE and LED_PUSH;# o7 ^: [* R/ Y0 J( Q7 `* V
LED_SLIDE <= nSLIDE_INT;
6 W  n# v. w+ M$ _. ILED_PUSH <= nPUSH_INT;
+ I& ~. `: z' k; g整個code動作就不正常了!
7 v: ~6 l  K: i( N. M! W我是用Altera EPM570 -5ns那顆來做,
& c' H+ f& s* z6 `9 t1 i0 q不知道說這麼多有沒有表達清楚,其實有很多問題想請教,. j" s8 j! M: ^8 f9 N8 o, m
不過還是希望能夠先把這問題解決!; _, c4 [% W  b1 b. u$ v, [" y
希望各位能給小弟一些建議,謝謝!
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
6#
發表於 2009-3-23 12:39:24 | 只看該作者

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

Dear vatic :
& G3 b  g7 q, V; U. T+ B/ [       請問一下你的問題是否已解決呢?  問題點是在哪呢?感覺上你的問題不是這四行造成的,應該是在程式更前面的部分,資料已經開始有誤差了!
" t% }  f. a: p1 @3 a9 s8 W
0 C* ^+ e- j% l1 L7 ?# `        我是 altera 代理商的 FAE ,altera  原廠希望能知道你的一些相關 information,不知你方便提供嗎?...或者你曾跟哪一間代理商聯絡過呢?..- x  U% ]# h" R7 r

5 U4 ^) u, U' K" g, z      thanks & regards : k6 {9 o$ d/ p& ~# L
hant763  .
5#
 樓主| 發表於 2009-3-22 14:24:49 | 只看該作者
debouncing已經在程式裡面了,9 {1 l1 e, u% b2 o
scope也量過ok了~
& h  c9 a6 H5 y弄了好久~不過最後root cause不是在這,1 _/ P& W4 x: o8 U" w2 M3 F
雖然已經解決,但還要去查一下資料看是為什麼
4#
發表於 2009-3-21 18:13:39 | 只看該作者

push botton

一般機械開關在按下的時候瞬間會有彈跳(bounce)的現象,
' t2 c/ |; N% j' K. s% I在短時間內會有多次的on-off$ }9 W4 \* Y7 J, i
所以當我的電路有直接接到機械開關的時候都會再加上反彈跳(disbounce)的模組,1 U3 c; ?0 f- T, V/ \. {5 V) P
這樣才不會因為機械彈跳的現象,造成誤動作
3#
 樓主| 發表於 2009-3-17 21:04:14 | 只看該作者
我現在有去多試幾種寫法,( X6 s" [7 P# G+ l) v! q# t' ?; S
情況一,如果把這四行都留著,在RTL看到的是nSLIDE_INT and nPUSH_INT後,
. Z7 K3 d. F0 ^( M: f! O& P: @各別會再經過一個buffer,然後才丟到nINT跟LED_INT,這時動作正常# @4 t& A6 R3 {
nINT <= nSLIDE_INT and nPUSH_INT;3 p3 {4 @/ t* V
LED_INT <= LED_SLIDE and LED_PUSH;
$ j, K( z# |$ p( U7 gLED_SLIDE <= nSLIDE_INT;
' t9 v2 m% f! T7 y# w2 LLED_PUSH <= nPUSH_INT;
7 {( R- t6 S( _; _  `: `# x5 g: j( ~) f/ a# H! E$ O
情況二,「只有」remove LED_INT那一行,「或是同時」remove下面這三行" w  w: g# \# T- ?7 G) C& n
LED_INT <= LED_SLIDE and LED_PUSH;
: f4 B8 v3 ?" _$ y- b$ ]LED_SLIDE <= nSLIDE_INT;
% e5 M* r1 R6 }LED_PUSH <= nPUSH_INT;
1 M& p" h/ g5 ?5 l& l3 `8 `在RTL合出來的都只會把nSLIDE_INT and nPUSH_INT就直接丟到nINT去,這時動作就不正常。
: w7 H8 d- x+ [( z$ j
; Z; `( w! v' e5 e# g3 ^  O* |; @5 m$ i$ o. M( A1 s# w9 M! y

0 M0 h3 D+ {$ Y$ x5 i差異是在有沒有多了一個buffer才到外面的pin,/ Q) w1 U0 \/ z' \; o- o1 S: [4 w
但軟體在做化簡時,不是應該會把這buffer也化簡掉才對嗎?
/ q; ]$ m, K1 l# k% E4 ~我不了解這個差異會造成code整個動作不正常?
* y* O+ l0 H( w/ Y3 [4 Z至於altera那邊我會試著去尋問看看!
2#
發表於 2009-3-17 09:37:38 | 只看該作者
請問一下,你有仔細看你的  QuartusII compile report 嗎?  在拿掉那三行前跟拿掉那三行後,report message 上是否有什麼差別? 還有看一下 timing 的部分,是否performace 掉下來很多? 也許你可以先使用QuartusII 的 simulation 看看程式的結果, 因為從你的描述很難直接馬上找到問題點..., b. }' P' e  S, D
    或者你可以直接找你購買 altera  IC 的代理商,他們應該會有 FAE 幫忙處理,不然你可以直接到  茂綸股份公司. B1 d# D  {. a' _. @1 i
     http://www.gfec.com.tw/    02-89132200  跟總機說要轉接  altera FAE  , 應該會有相關 FAE 協助處理。
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-1-1 06:30 PM , Processed in 0.168009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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