Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

搜索
1 2 3 4
樓主: addn
打印 上一主題 下一主題

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大
3 U$ L) S7 c9 u: x# l2 s6 \  Y請問有人知道uart 16550 的FIFO的電路結構嗎
+ x: L9 O3 E# N, e- U* [/ m" V3 t3 G1 v: s& J
因為以前有用vhdl做一8250的功能( M. s3 f' k! J/ Q. [
想加上FIFO ,變成16550的功能  q; t( `& }/ k9 }/ A% T- h8 D
所以才會想了解16550 FIFO的電路結構
9 X0 s8 D8 S$ V6 s$ g( K; Y. K" {6 m
依照data sheet看起來似乎是用異步fifo
# Y% a9 G6 G$ y% R3 n寫入跟讀出fifo可以同時操作
$ Z" T: c- K. ~
  X+ [! t$ ~  C' x+ X可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
0 N. V# e6 ]+ \$ z. H會發生full,empty,level trigger判斷錯誤,如下圖所示
( g- L  i( F$ G8 p' o

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好
/ w+ c) ]& ?! X
' o8 s. c* S8 I" }" V  C' M" I7 I感謝版主 大大的講解,提供解決方式的參考
1 o7 R- N* v# Y/ b; o0 d1 R9 @2 H3 x3 ?2 O/ a: A6 c
我這邊還是有一些問題
  a& _! C. G! {0 _5 e- h
- n4 a) Z6 D5 w9 ~1.
! v0 P1 T+ G) s9 F+ \/ @! C" Q7 }, p4 uRX FIFO" t, l+ B; p! I# e- U1 [6 M3 }
write_ptr變動對/RD empty的影響就如同大大所講的
  S& G6 H* L9 p4 s( icpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會
' Q9 C" \- A  A2 n8 k造成嚴重的錯誤( v& }: d, N# g" |3 X& Y; ^
可是
/ q+ q/ B- I/ |read_ptr變動對於寫入FIFO full的影響就很嚴重了
5 j" M1 ?5 k* w當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作
% u" a. A& p+ r% {8 v% y" u
, a+ Y3 R# E0 p+ w2.
' W) l* C; w) }. Y/ _1 e2 ?& u16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時8 V  e* i9 b# u5 f8 _: g6 d
去觸發中斷輸出腳INTR$ w2 y4 g% e8 J1 C! J  K* L
這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件' E0 L$ t% ^% d
這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定
: h$ I( V6 ?. @: I# P這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時
' G5 q3 H, V, U6 k/ Q  W那要怎麼消除這毛刺現象呢
" ~9 k5 d" R6 W: h/ G6 Q5 P  M4 e" j* `
3.1 N6 C- Z: w6 T5 w; ^! ?
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好8 G! s  Y! P% J- Z8 _
感謝版主 大大的建議及經驗分享
0 T% `6 o" @' U* T對於數位設計的確讓人傷腦筋
0 D7 i# A9 N8 X6 D有一大堆的情況都要考慮進去% i0 r+ @* o) O) _: T% Y) N% I
需要發很大的心力在設計電路的穩定性上- C2 J# t* r$ d0 _4 `0 N

6 \# U7 B8 w) z- {- L- i; {2 T大大可否對於handshake在這裡與FIFO搭配使用. A% n6 k2 |- r5 b/ d4 J
再進一步說明一下呢
* j* }- ]+ _7 v/ z8 m
( s6 S: L0 b7 }* \- O我的想法是這樣不曉得對不對
8 @6 d; o9 K: N& g) e& P. |- }當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO
( a3 f. R) j: M/ L- a寫入FIFO後再通知/RD電路可正常動作
) t' V' W5 w, S. ?9 P" O反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好
0 e8 D! O# X5 T3 n0 H0 e$ Q/ t; A* @
/ H8 W5 `( D2 `; G0 {' S. o- v4 r可是這樣還有問題我搞不懂
4 Q& l2 U2 M, {8 c% z' l$ }& K- u8 C& I/ w9 u
  寫入端有16Xbaud可以當clock可以達成交握動作
% W) K0 x& i: b: ]# ~  讀取端邏輯,沒有讀取端的clock只有/RD脈波
0 \0 a5 x% \$ m. M3 j. b% F" q! e  當/RD來時就表示一定要讀取,而且沒辦法
0 s7 j$ P0 i7 R/ m' K5 d8 f  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好- b3 @* X5 x  k. L3 I* `
: l% C( t" j# T/ p4 X
這部分我實在想不出來
9 \) I& E; W1 J2 c5 t; n) n; Z如果版主 大大可以提供參考例子,那最好不過了
* v- A# {/ S5 g' c; b2 f$ @1 h) ^" P, W7 C1 v$ [
謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦
2 m5 Q% c& q3 X. D) M* e, F
3 ~4 H% I/ k' H  t7 p我有找到一些對岸的異步FIFO文章,有興趣可以參考看看2 \3 Y9 ^7 g3 {
http://www.21ic.com/news/html/70/show1661.htm
8 }# Z" c, V+ i& D. a! Yhttp://blog.21ic.com/user1/1202/archives/2006/23787.html4 d& f, \+ y; `" P& [  p" U: y. k
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率  \: s& n, [* [2 j7 g) M4 A. U
可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷4 Y1 a$ ^8 p* L! `1 U  h1 d
碼後還是無法百分百保證正確呢! C$ G# f/ s  `: k" R0 I

! g2 L( ^9 h: ^還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
% R( h8 q8 H/ K& ]' [$ D6 x4 J) O$ D) g
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論4 i, M4 v( w! S0 Q5 S) {
! I& j$ m: n6 C# F7 P
1.
. |% N: `% r9 k9 W, E   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"+ f$ z' e' p, k: }" c
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生- |' g- d6 @( ?1 j
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一: w" g! `6 Q+ N( `- P5 s- j! \6 S! S
2.. w- q; u3 ^& K. s9 D+ Z  P5 B
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
) O/ f( m1 y  e   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
. J1 f$ g  C8 x& e   資料讀取週期RC最小280ns5 \6 X/ O& X9 ]& C9 y
3.4 V5 [9 n. D& e, i- @
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
. E! z) n4 I7 D2 n* F   小小於wck週期的case,會有問題,以trigger level造成的INTR來講5 o7 ?  r/ @" Z" j
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間" \3 j( @% B/ e- Q* K0 E
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料
7 Y7 |; c8 Y4 V+ f& _我會好好的找來研究看看0 P5 a8 n  a, h3 |
& x6 u* J; `9 W/ @% y4 G$ E
我本身目前不是從事電子相關行業,不過對於0 K: B7 f6 k0 ^( {& h
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
1 t1 K9 Y/ B* F# P都很有興趣,之所以要寫16550 code主要是想
" R$ g1 |$ M& a% L6 o5 V# H2 r# f3 n! z挑戰看看自己能不能寫的出來,不過似乎沒那麼容易% X& t; j, H( {) @7 O2 I
- J, O1 Z5 T& B7 J: `
FIFO這部分我有上其他討論區問過,可是都沒人回覆
0 _% B: w: l. j  G& _5 R感謝版主願意跟我討論這個問題  V! F' Q( \1 ]% W: f# ~

% x& o3 @+ F. P- s, E& H( J再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
! L# ^# A, h6 b! P; W2 |5 R最近想到一種架構,用來做FIFO不曉得可不可行
# b6 g9 e& S4 F. V* k$ p如下圖所示0 T- F7 o* t, }& k% s

, I. ]3 y: o! A  b* V- Q0 w先就full,empty討論,trigger level不管
  i; x. f- P* R) j& F7 K# i讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 l! f! E( g, P, M

# k  [* N( `& {( l  O1.用額外bit(valid_bit)來指出register是否有資料寫入" u- L' [% \$ @, l& u; ^6 }
  當寫資料到FIFO則相對應的valid_bit會一起被設定為17 ^) F5 F; D& \! F$ L( b6 w& x* j
  當讀取FIFO,相對應的valid_bit會被清為0
2 t" b, N4 q& }  {1 s+ I" k! R, L5 V; N# Y, j. t; ?; F3 r; T
2.wptr及rptr用bin count# t, L% A% Q$ F8 \- l

4 k3 ?3 Z. Q) t3.full將所有valid_bit取and,empty將所有valid_bit取nor, W8 x. L$ e* n7 b6 B" }( N

- Y  f4 e0 b" \. {  L4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時8 a9 L- P" a9 n- c; D
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
6 M1 l4 k5 j$ ]) U$ d7 o2 ]& i0 D  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已, d; n8 o# V# q# U2 ?  Y1 ~. B  c# w

; `3 a% q, {; S# ~1 W) \5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作- i. J  }$ O7 S$ Y3 O% Q  W
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk' y# N! o! \/ K8 ]6 L
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接/ ~' s9 k/ q) \
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
" k3 j1 d7 L+ B$ J( Y9 R% K7 j  個位置是空但被判定為已經滿了的狀況)) N% k' W: l+ n' b4 d
9 C; f$ P, X- o# ?
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好
3 w! l8 }% S* f, X. W( X/ W# f我想到這個方法除了電路會比較大外還有其他缺點
4 W% g9 P5 y5 d; r
" Y" o( a5 L* i. i7 |4 Q1.不適合做成容量較大的FIFO) \* [7 S1 D& e4 R% _! p" P7 _( B
* {1 J( u: c, T& A9 D4 `6 r/ o( \- b
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響$ A% L$ {: H! }

* b- y& M" o- y7 Y2 F/ q3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣# ^. y6 w" E: }/ P
   會有較長的延遲時間,所以速度被拖慢了
& R9 M5 M( A1 W. u
0 `$ E) f/ |9 d5 L謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好
# X5 F/ c0 Z7 i/ D$ H, @
; U% `5 p" D' @6 ^
8 J/ y5 }! f) @: Q1.
' {; S, V* T& ?$ d   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
5 L) Q- i1 }0 f3 K) s2 k( P7 Q  G+ c1 n/ t
   不了解這段話的意思,可以在進一步說明嗎
, t5 U  w# l; Z4 o0 W" v6 n7 Y1 z9 V$ A, w2 Z  Q
2.
1 L2 `1 z& q- c- w+ h# t$ N, s4 q  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間: _7 F3 {) v, y3 k
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會7 s& P) `, p0 p, p  i$ j5 e
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了$ z; d8 t3 D6 F; a7 ~  M1 o1 \, l
  請問有辦法評估亞穩態維持的時間嗎
6 D" d- J  G$ w( E: H% g  
- [! ^- [, U2 r3 R+ ~  r謝謝$ q- b6 t8 v# Z1 u! n) S8 h

, S; f. k  E$ h( E[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好
* s2 p7 N1 K! `關於 metastate
! z1 q: `1 y* q7 ]# o: S請問如果一個d-ff假設 clock頻率1 hz" O: G$ O6 U; F- H) u
如果剛好發生metastate,metastate這個狀態! o( j5 i1 ]# ]' l6 U/ T4 j& y* h1 i
有沒有可能有機會維持1秒的時間長度呢
( h5 j  ?0 L! m9 l. q$ H9 B! r
$ w( i" z! c8 \1 Y% l. w. p8 [. w謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好+ c, _# P8 f) W
依讀取狀態來說,/RD負緣鎖住empty訊號
3 t" L9 M/ F6 E: O( E0 ]  _5 O' @而剛好發生metastate,且剛好時間超過/RD默波的週期; t  _* \2 }' t* _/ U
那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好
  y/ u- h9 d/ k$ d所以是否如我37篇所講
& o  x! g# o* d" V+ P$ p這樣的設計會有問題,因為無法保證發生亞穩態的時間
  x* V! j3 K; y比/RD,16*BAUD週期短, z. u/ [8 Z9 J% R" S
( A& u. k& x, x4 _* j$ x' e
那麼這個問題不就無法解決,因為empty可能再任何時間點
5 t% G( H3 R1 L0 W: d; [發生變化,而/RD脈波也可能再任何時間發生9 o1 R8 n  X: K% N5 \: C8 w6 r7 t
/ M5 C) p( y+ n: M
請問這樣的架構,有什麼方式可以解決這個問題
, q6 b. k( @4 q# V0 }: C
$ W& J- O9 A. y2 I: M  Y謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
, a/ \, F% ~7 `7 o5 R在opencores內是不用註冊的, 直接以cvs下載就行了

# ?5 L0 R, t- d! R. `
0 }; i) y. d2 }: x" _' @原來是要選cvs選項就能下載
9 k2 z; L; D" P1 Y  h6 I
) h. f) l+ ?% P  J/ f' |/ ?% [謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 08:38 AM , Processed in 0.127016 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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