Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大
" m, e1 w* @2 {6 c/ P請問有人知道uart 16550 的FIFO的電路結構嗎
2 _/ j; Z# V- u% j/ `$ _0 z1 G
- t' g5 z& Q- o因為以前有用vhdl做一8250的功能0 J: Z1 E7 y6 m! q( f
想加上FIFO ,變成16550的功能2 l9 N& i# I2 b, ^# V* A
所以才會想了解16550 FIFO的電路結構6 o& Q! A  \  y$ t6 e

$ b+ i+ T" W4 l3 r. l0 }% E/ D' A依照data sheet看起來似乎是用異步fifo
# f# |3 g% f: w寫入跟讀出fifo可以同時操作: |! L/ w* Y2 b9 e' Y6 f7 }
! `" ]3 E: G: k
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
6 o" I5 T& z9 C# U% V' f; p1 F3 n會發生full,empty,level trigger判斷錯誤,如下圖所示3 j$ C1 ]( [/ L+ x3 _2 w

評分

參與人數 1Chipcoin +3 收起 理由
tommywgt + 3 好問題

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好/ e5 T3 H2 M/ a
1 G0 E% d1 L: J  @. B* w
感謝版主 大大的講解,提供解決方式的參考
, _( ~5 _4 u7 F( W
3 }7 m2 ~' J( J1 l9 g我這邊還是有一些問題
% X9 D: b& _0 ^3 q2 ?0 m. |
6 a- _9 T2 t- W& Y( u2 V2 V- o& I: b1.
6 Y, }! d) v  u$ T  _2 qRX FIFO9 G# r3 \! C. ]5 O4 f! h
write_ptr變動對/RD empty的影響就如同大大所講的7 ?- c7 G; ]; s! w; n: o6 i
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會* N; L$ @" x; S3 |1 w! _2 P6 _
造成嚴重的錯誤
% U7 ^+ S6 _- Y+ E+ f4 g6 |( j# R3 D可是/ N) Z" l# ]/ h" v6 h
read_ptr變動對於寫入FIFO full的影響就很嚴重了. d$ g, R; R% r8 ~4 o: b
當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作  h: u  U  m2 C- x( G4 v, V8 B

! J! I7 c% X, P7 p' j2.& r) T0 g* @; ~
16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時
* Z/ J9 ]( F5 l  Z9 w. F) _去觸發中斷輸出腳INTR9 D0 C( D1 a* A5 E4 m: y
這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件6 i( x6 b& \0 P- R( o) |
這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定
: ^( M: p- G/ S! d$ [& t; M7 D$ @這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時
5 D2 g% k2 J  o. W, C* u那要怎麼消除這毛刺現象呢
) `( f( X6 P1 `7 V6 d" v+ _+ R1 A6 D/ v; n+ x' @
3.+ C& K. ?$ @' s& f& Z* K0 j
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

參與人數 1Chipcoin +3 收起 理由
chip123 + 3 勇於求知!多問多感謝囉!

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
: d. v( m. z* s感謝版主 大大的建議及經驗分享
) Q; w9 x! F% \+ G3 Q( s. o) @0 ]對於數位設計的確讓人傷腦筋! m. ]  V3 c$ _% {5 c3 ^% E& q
有一大堆的情況都要考慮進去
2 q6 m# {4 e2 s需要發很大的心力在設計電路的穩定性上
: u% x; Q. A# Y* Q! w  w+ R5 N9 v6 _7 |5 ]( Q
大大可否對於handshake在這裡與FIFO搭配使用
  a/ O3 i( X# Z/ t& S再進一步說明一下呢
3 v7 C8 {. l) J, u, x( I# @4 e! [
8 J+ k+ {, j+ p6 G7 \3 j% M3 _/ J! j我的想法是這樣不曉得對不對
  y. ]+ ?4 G* K2 S  z當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO# e5 p- w+ V6 H" e* H. |
寫入FIFO後再通知/RD電路可正常動作
( J2 f% A0 x; `! Q' Z反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好
) @; C) `  G1 m3 R. Q
1 _- ]; P4 @- i; `3 {% R可是這樣還有問題我搞不懂
# H: G+ F* A8 ]. f: b. @
; J. V! Z+ @+ R& K4 Y3 L  寫入端有16Xbaud可以當clock可以達成交握動作
) \( F8 A& ^; r6 O. s  讀取端邏輯,沒有讀取端的clock只有/RD脈波/ w( k5 C3 E4 g1 w. ~& u$ ]; X
  當/RD來時就表示一定要讀取,而且沒辦法! b5 `. ~! {# U
  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好: z4 G4 b6 M4 ]/ P' w( Q2 [, u! }6 \

" i' [# N6 F) _/ n這部分我實在想不出來2 }2 W+ k+ R" ^9 v2 d/ [! A
如果版主 大大可以提供參考例子,那最好不過了
, L) W  \+ e3 F/ I+ o$ q7 s* F% G& b& S/ t& I6 j' A5 t4 g! c) M" q
謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦
1 ~; C, P( V' p5 X. ^8 d
% G( W6 Z) u( H/ L6 s3 r我有找到一些對岸的異步FIFO文章,有興趣可以參考看看+ D5 G5 O# V- d( N
http://www.21ic.com/news/html/70/show1661.htm3 Q+ w9 w4 K1 U" w: E5 a
http://blog.21ic.com/user1/1202/archives/2006/23787.html; y$ c% ^5 G" k( p5 O1 b
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率# _% ~: J4 U) f5 B( r- U3 H& f
可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷
% c0 ~2 k" u/ E碼後還是無法百分百保證正確呢1 V" X0 `. {* u2 D( @" B
7 U8 f' P4 Q6 A6 P0 ^
還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
# |, I# W, b6 T) j3 p# {
3 s  p' _4 I8 @將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論* ?- D* u: N( B. A! p

0 k$ h" U" {3 `0 B1.* h/ \! c' Y- ]( j4 f1 z) Y
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"' M7 T' a1 I3 l! m5 k
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
/ J) P3 P' c1 X7 X$ M' Y( A   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
: G  W2 p* b* ~% v: g% r2.
# }# ^7 d* ^" e, I, J   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
  j. ?! s# Y& V   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
3 x. ]- j' W, g, }8 a* L: w   資料讀取週期RC最小280ns3 @- ]5 i4 F! ^- ?* w
3.
) w) `7 w. R8 l% C+ Q. x- }$ M   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
( B% n5 Y6 G& T+ |$ j( c& r   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
" @" K6 w6 j; h   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
! Y, W; V/ N* ?1 A5 h   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料9 M0 T3 B; V. }. v2 s% L' ]1 ^
我會好好的找來研究看看
- d5 B+ F* |- \$ V
2 m9 q$ ~: R) S3 i4 q' a0 q" J我本身目前不是從事電子相關行業,不過對於
5 ~4 n; l& Z* b- A; nFPGA/CPLD,HDL,數位邏輯設計及單晶片等4 [" d8 y5 C" I: A- `5 I
都很有興趣,之所以要寫16550 code主要是想+ u  p5 Q+ \" H8 f$ c
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易+ ^# T2 T  ^8 e& Y7 @, ?

3 R; Q  K9 j% C+ F% ?/ R5 P5 XFIFO這部分我有上其他討論區問過,可是都沒人回覆
$ }- b% [% Y4 H1 q( ]感謝版主願意跟我討論這個問題3 E* A+ x3 @) q0 A, Y' b$ R
# O2 U% z! K4 m: _; R
再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好# N6 P. @8 S1 n2 E0 A
最近想到一種架構,用來做FIFO不曉得可不可行1 Y# L# ]: C& f$ m3 r; G3 D$ E" _
如下圖所示
2 p/ M4 n, G0 h
# D. ^* x# ]; @: P3 h! E, G" X先就full,empty討論,trigger level不管7 m6 ]$ }: i( y3 n5 {
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 m) a; Z7 `! S0 @$ ^9 }+ A$ i. V( F4 O( S8 n
1.用額外bit(valid_bit)來指出register是否有資料寫入
5 q$ }4 a& j' \  y6 S' J  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
! z# p: B/ Z& |0 F: i2 A1 \9 _  當讀取FIFO,相對應的valid_bit會被清為0* Q% c9 Y% T5 m1 L7 x, P3 M
1 o/ c5 I7 P! F' O# l1 p6 P& F, r' X
2.wptr及rptr用bin count
- f$ {3 ?( ~# u/ W7 m, i) _. t
0 D# u" H& l' P. o" J3.full將所有valid_bit取and,empty將所有valid_bit取nor
8 W) F, L4 W, |2 `& s$ t* u! R" ~. ]# ]9 @2 P1 T
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時3 w6 V2 C6 f  B# ~
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case& ~& `8 U9 K3 h8 {  Y. C
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
& M/ A7 `' X- o4 a7 E
) U; O$ z; _4 O% O, J* C. S5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
# j4 C' C/ v9 F- O5 d/ E  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
, r8 F0 m+ U  Q  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
: o& r1 F' h/ b  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一* z0 P- D) M) ^/ M& B$ Y) ]
  個位置是空但被判定為已經滿了的狀況)
% a1 l7 X2 c( |! k) T5 w1 N, m
- O# `; ]: `* d以上的推論不曉得是否正確

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x

評分

參與人數 1Chipcoin +5 收起 理由
tommywgt + 5 好主意

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好
6 Z) c( w2 v4 }0 _我想到這個方法除了電路會比較大外還有其他缺點9 Y+ o. X) P7 l" J2 a! e
. j! \9 g. P8 l; K: J3 ^
1.不適合做成容量較大的FIFO
' f! A$ v* @" l" }; h$ L
5 Y3 Q) L1 N, M# V& R2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響6 O0 R( U' a2 y6 b$ b' m: ~
/ W$ `% V6 n( S' z; w4 V
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
. K( d% Z) c/ r9 s   會有較長的延遲時間,所以速度被拖慢了2 W1 W; I6 K) l; q+ d
) N0 ?6 e- {- D+ K: `* U& i
謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好. _2 P8 K" x; W% {" Z1 w+ X$ d

% k# g. F" ]* Z) ?# K3 H( a: h$ }5 p: x  V: \) b( H
1.$ O8 o7 \9 l0 n; U
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"9 E, V: v+ |7 l! H; Q: I, y) ^# l

  g6 q5 u; H" n2 a   不了解這段話的意思,可以在進一步說明嗎+ ?" R0 Q( Z  f) n' L0 k5 @+ r

" y, U/ G" n$ w5 L+ h2.. L1 Z  I! z/ z. l1 k
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間5 L8 P5 ^6 [: M/ R- Y
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會6 `. K* O- a# W& a& t1 c$ n. j( x
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
2 O; @* Z8 @1 A' |2 Y5 i  請問有辦法評估亞穩態維持的時間嗎& f0 l& ?" B9 H$ q0 f
  
; S  |6 ]  X5 b& s謝謝& a1 q, P! W4 R! R3 `
# L. D  r. C6 J5 A% l8 W
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好: \0 @: V/ s! ~/ o1 {# [' w0 B
關於 metastate; ]& ]8 M, h, L3 _
請問如果一個d-ff假設 clock頻率1 hz# }+ J+ G2 V( c: A  i9 g- k
如果剛好發生metastate,metastate這個狀態
* M# [- C, a+ X1 ^: z有沒有可能有機會維持1秒的時間長度呢
* g0 H& r, B4 E6 g: F7 G3 a1 G' D$ w/ {  ?
謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好
1 ~, f& N* c' c( z- q依讀取狀態來說,/RD負緣鎖住empty訊號
" t* I4 l4 d) W! k* [而剛好發生metastate,且剛好時間超過/RD默波的週期
9 `9 k# {' x+ m. E5 f' |% c+ B: I那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

您需要 登錄 才可以下載或查看,沒有帳號?申請會員

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好
; j  i$ L- Y* h  e! j& p所以是否如我37篇所講
* H# Y- ]" k+ }8 b這樣的設計會有問題,因為無法保證發生亞穩態的時間2 R1 @' u# n, ?+ D" M4 j* n4 G: u; X, O
比/RD,16*BAUD週期短
" O( M( z" m2 p) P- g
& y( \! l( `) Y那麼這個問題不就無法解決,因為empty可能再任何時間點& g) t; z! M6 a5 n! N) |5 |2 y
發生變化,而/RD脈波也可能再任何時間發生1 S+ X; D5 n8 M9 `8 J
7 X3 Q( t3 c% F  r2 h# @
請問這樣的架構,有什麼方式可以解決這個問題2 s# P0 B% ^* P! q( K' q: `: `
7 v* ^* V% U1 ?* x; O
謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
; F, v5 S0 K$ S) x在opencores內是不用註冊的, 直接以cvs下載就行了

1 u+ ~7 k5 N9 _2 q  G& S5 E1 w: q/ q% N% ^) {, Q# r' O; k
原來是要選cvs選項就能下載
& h3 \' p; x# ^) E7 x, K. L4 F
2 Y/ O; k  S5 x1 B; p0 ]$ W# ]謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-30 01:08 AM , Processed in 0.129017 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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