Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大
/ ]2 [. `7 q+ S請問有人知道uart 16550 的FIFO的電路結構嗎
: N/ f4 @. m/ u, y/ `+ r; s* a7 l( P  M8 [
因為以前有用vhdl做一8250的功能4 u( K- L, C9 y# A1 a; b9 o
想加上FIFO ,變成16550的功能& c8 K1 O+ I0 H5 h
所以才會想了解16550 FIFO的電路結構
2 |5 ?% l4 W* B
5 }8 ?6 z3 n" ]依照data sheet看起來似乎是用異步fifo
6 W& A( O" Y5 n$ X/ K寫入跟讀出fifo可以同時操作( Z' n% f+ p+ n! Q

( k1 [( u$ g& h5 s# Z可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
9 K6 ]2 }& E" m: f) v會發生full,empty,level trigger判斷錯誤,如下圖所示% `+ D  D9 ]" M. v# C8 U2 q

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好4 P- u/ {7 ~/ b, s) I
; R% d: N/ ~4 @5 C- m. R
感謝版主 大大的講解,提供解決方式的參考- b5 P2 _' K8 A, d5 u7 r/ q- }
. s- L, H) S. ]9 |" b; y6 M6 e  Y
我這邊還是有一些問題
9 L  }0 ^4 a7 ?! _0 Z2 z
+ S/ W+ C6 Z8 v; U* r3 d3 Y1.; y! h3 k6 E: V8 }7 Q% @4 h4 k! w6 X9 p
RX FIFO
( x6 f2 [; M5 K; pwrite_ptr變動對/RD empty的影響就如同大大所講的8 \. \+ ]9 A  E
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會
: W/ G  B' k* f; e9 u9 L# a  X造成嚴重的錯誤2 N! Z' a9 H7 M6 E9 _# V
可是/ G5 B4 X9 ?8 X
read_ptr變動對於寫入FIFO full的影響就很嚴重了
3 N& w0 Q& w. U當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作
7 U) S# u1 t% s* I1 U' ]
! V. _; x; F  f3 p) x2.
: v% _, i6 h' v' }# N4 ?; D6 L! x$ ?16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時
, U4 n$ A3 V! v7 S, p去觸發中斷輸出腳INTR
: \' C( O% y9 f; ?0 g1 I4 ]這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件
' s- n( Z5 p% i, ]這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定6 G$ {3 y, L) O5 i
這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時' d( Q6 c; n' Z! g
那要怎麼消除這毛刺現象呢/ c* c3 q9 T5 z0 G  S, f
6 ?9 v" \% v  Y- l2 z
3.7 }0 g* ?8 ^+ q* H# c9 U1 t
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
  ^1 B" J& Q+ k# Q# l$ F1 Q感謝版主 大大的建議及經驗分享9 L) L4 ~- f: I- h4 _+ A, I
對於數位設計的確讓人傷腦筋- F6 m7 Q/ g6 S( ^7 k9 \; W5 s. v4 P
有一大堆的情況都要考慮進去
8 x( n+ G# g5 T1 ~需要發很大的心力在設計電路的穩定性上/ j3 m$ m, i) q" G; {+ z2 R

9 c& j1 U7 Z4 z! B2 ]8 p! ~大大可否對於handshake在這裡與FIFO搭配使用
, f1 b! |# L# I6 l5 T/ e) Z7 `再進一步說明一下呢( K: m7 G; X9 Y

1 h8 R0 |) p7 ?我的想法是這樣不曉得對不對" _/ e' \5 t5 \, w. X+ `6 q
當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO
8 e; f$ u$ V# T2 p5 v6 l& N3 L0 U寫入FIFO後再通知/RD電路可正常動作5 g1 o$ w8 ?5 b1 V6 R6 v) C
反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好
2 N' I, K1 s4 A, T5 |4 d9 G
1 B, B% v# ^" r0 ?8 E/ a% p可是這樣還有問題我搞不懂3 F" m0 G# r2 Q% E6 N) Q' j
, M' @; B- m7 N2 z$ Q
  寫入端有16Xbaud可以當clock可以達成交握動作
* B/ ^8 d# k$ l  讀取端邏輯,沒有讀取端的clock只有/RD脈波
) [' H5 {0 {. r2 t! T) l  當/RD來時就表示一定要讀取,而且沒辦法9 H& h8 j% J2 \
  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好
# G3 S& D. ~  g1 I( E7 h+ p0 B/ m
6 H* m+ O/ `& r這部分我實在想不出來! K* X6 S- m3 N8 E# ~. A) A
如果版主 大大可以提供參考例子,那最好不過了
2 {7 W, y( d9 K8 x. u" ?2 X& w9 e( I- p' q/ b: p
謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦/ x& t7 U: [8 j6 C4 E8 h

2 X  w9 I3 d/ q4 J7 q  @我有找到一些對岸的異步FIFO文章,有興趣可以參考看看$ C* Y- M+ s7 I" U5 y
http://www.21ic.com/news/html/70/show1661.htm
2 D, j2 B+ ?  H& \) U# xhttp://blog.21ic.com/user1/1202/archives/2006/23787.html5 U& j; n4 ~4 U* X# d
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率
1 ]( s& b- l/ v; t可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷" E7 i! a2 ]9 v2 f
碼後還是無法百分百保證正確呢
0 K, q8 A; y; R' h7 y% _; X& R( }& d3 I# p
還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例. _' u; d0 p  p/ d  Q
: U5 S9 o# f; M: y
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論4 M: R% [, k1 F; `$ @6 e9 s
6 E" ]0 k! L! X& C( q
1.
$ N7 Q  U' M* _- ^/ i% |" ^) r   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
9 c4 V) l: Z# k* M   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生4 c; E4 F6 ?: d0 ~' V
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
1 }1 l7 `( G: j4 m; j, t( \# q2.8 c+ P' U1 x, L! l  T
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
+ \( ]5 Y9 M: g4 ~   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出* m( n( L) A) V; n9 k
   資料讀取週期RC最小280ns
" ]9 \- C/ Z. \2 j3.3 A7 C, s- d1 }. ^: R/ \) W0 P
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
  k( b: G, ]1 Y   小小於wck週期的case,會有問題,以trigger level造成的INTR來講( @' v7 e' T9 ^# A; B8 v# w
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間) N! V, T  Y1 b8 ~
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料3 U6 p, L. r8 a) E3 Q
我會好好的找來研究看看
5 H; b8 U: W4 z! l' `: H
' x. M' Q1 r' u) I! G! e我本身目前不是從事電子相關行業,不過對於- P+ n6 {, \1 Z0 w# w' Y" y5 x% ]
FPGA/CPLD,HDL,數位邏輯設計及單晶片等) z' I% o' v$ s/ t6 S
都很有興趣,之所以要寫16550 code主要是想1 K; ?' t6 i3 A0 X8 h0 m
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
" o! H3 G  ]% v7 S
1 N( ], Q2 t- s; \  aFIFO這部分我有上其他討論區問過,可是都沒人回覆0 t) d7 t* N9 x" p5 v# b# t
感謝版主願意跟我討論這個問題4 F$ p' Q3 d% j6 D

6 |- |& Q" z+ o0 C. K- M. ]; W1 N4 o再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
$ F- X3 G/ x, m+ f9 [) ]最近想到一種架構,用來做FIFO不曉得可不可行
/ M7 l, P7 l  w2 L: j( I如下圖所示
! B' F5 f# x4 w: N! `2 M0 [
0 o0 s% a) g1 j0 l; u% L先就full,empty討論,trigger level不管
5 ?* ^: N% w( `# r. G讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間! |- N& c- H- }3 S4 A

0 S! R& s& p/ M4 ?1.用額外bit(valid_bit)來指出register是否有資料寫入
1 C- d' l9 s$ X3 ~  當寫資料到FIFO則相對應的valid_bit會一起被設定為14 w# A1 S! t' K( Q! N- ?& l
  當讀取FIFO,相對應的valid_bit會被清為0
! n7 k: \% c/ \4 j( }! f* d2 X. N! V2 J3 I8 C7 n# h
2.wptr及rptr用bin count7 K: S: Z% z2 E

9 X- u+ x; x' J' X6 j3.full將所有valid_bit取and,empty將所有valid_bit取nor* s  T5 K! [5 s1 i! v! B5 Y

9 m7 C$ s* u  N" A+ r4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時: o# `+ U0 e. J4 P
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
" }$ m0 F$ `, i$ Z  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
& V4 B$ I, e! C4 H+ g9 f& Y) f! @# m7 R9 H+ c6 t: ~0 E& ?
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
7 h. X* g* ^, r! u: {' d  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
3 f2 e: j: F9 a; U9 l  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接. S, H, E+ [1 w5 q6 n! n
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
- X6 G% @' X$ }) |$ v# Z% G  個位置是空但被判定為已經滿了的狀況)
. I! [% j, [, [* x2 G' M! K/ o
' b: w6 \) O& b以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好
; p& {5 `; m4 W( ?: P* r, s: v我想到這個方法除了電路會比較大外還有其他缺點9 n& h" V8 `' s4 {
: Q8 w( T" L* K
1.不適合做成容量較大的FIFO
$ ~8 l' D/ v# p, e' f) ^# w' X( }3 D+ D! _
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
5 P6 p# Q' ]# `; e7 T
7 u! ^8 z7 O2 \3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
2 f# \2 I1 R6 E4 L   會有較長的延遲時間,所以速度被拖慢了) |8 y- m7 s1 c" n: s" t5 X. f: |

0 E* U7 {0 l, W; }謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好, _/ ?' Y6 ~* R- N

* [) b! z" f6 l9 @7 ~* Z/ S% r+ n+ U* E/ b/ ]' L( R% J
1./ f- }) T% K, ?# X
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
6 G/ X1 m, j# @* A! f7 G+ R1 z$ F$ ~) j( w7 ?# Y4 ^
   不了解這段話的意思,可以在進一步說明嗎1 Z: Y1 M  s  Z) t0 I: W0 K

( Y2 D$ Q! p& A9 u# D1 S$ O2 X2.  M# M% B9 Q  t! z4 q
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間% Q0 D" L# Q8 F: h6 {/ B
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會& \+ b3 r$ G1 d9 D5 r. w
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了: c# r: e. b; k6 c  M6 g, t
  請問有辦法評估亞穩態維持的時間嗎
- Q, h! B' ?  N% f* O( @3 d  
2 K! A: S3 U3 z謝謝4 ~/ A+ ^5 J) e; O9 M' f

7 q. e( [4 z( Y+ {) @! V6 o4 {* H[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好
& _/ [; g9 O$ c關於 metastate& K6 ?: s% J" N! R2 Y9 R
請問如果一個d-ff假設 clock頻率1 hz
6 Z/ ~: t% V+ X, z5 b& K如果剛好發生metastate,metastate這個狀態
) `( {7 b8 H" g7 n0 T7 ]有沒有可能有機會維持1秒的時間長度呢/ v' _* {: A4 g' M1 [. P& V; N
/ \2 k! j8 s, H9 B$ v) R0 T- o! l7 T
謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好: t" H" d* y6 X$ Z# A7 y
依讀取狀態來說,/RD負緣鎖住empty訊號
5 a( r( Q, d: N而剛好發生metastate,且剛好時間超過/RD默波的週期
4 @; n5 @# y, H那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好
' o5 i( a. u0 o6 A  n" U, E5 R9 X1 w% c所以是否如我37篇所講
! A: W2 M  Z, ]% d/ Z7 ]這樣的設計會有問題,因為無法保證發生亞穩態的時間" Y" X2 E2 E/ H2 d
比/RD,16*BAUD週期短. U! r' {! }% p2 l

2 R/ u: V; ]. g( r3 ]; K那麼這個問題不就無法解決,因為empty可能再任何時間點% }. A/ i& f* Y# M  T" W
發生變化,而/RD脈波也可能再任何時間發生
7 f8 ?; E7 R  U0 ~
8 z; y- e2 w: G- ^/ `" ~請問這樣的架構,有什麼方式可以解決這個問題
' o' w! r2 B* P7 `9 t
4 M' e$ k9 l1 v+ M& a4 Z謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
+ J7 `+ S+ C( B在opencores內是不用註冊的, 直接以cvs下載就行了

/ z* i* W5 C* v4 Q. A
" P/ e+ d( Y- ?/ o4 U5 l3 y4 @原來是要選cvs選項就能下載$ `0 L& y- f" K
$ ~+ w" F0 b1 P$ n
謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 03:30 AM , Processed in 0.121015 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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