Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大% G: W7 Y/ ^+ u. n
請問有人知道uart 16550 的FIFO的電路結構嗎
; c" d4 w- ?- e7 ?4 |, p9 ]3 i! C
因為以前有用vhdl做一8250的功能. W! c4 y  ~8 A) y
想加上FIFO ,變成16550的功能
8 X% R! O0 ]& d7 W, \& q! K4 y- ^所以才會想了解16550 FIFO的電路結構
1 p8 ^# k6 u4 p
8 m8 B3 r4 N! g1 A' P2 ^& _依照data sheet看起來似乎是用異步fifo
- H( x* ^, p6 j) Y3 V- Z寫入跟讀出fifo可以同時操作
* c' n; |7 G9 d3 I& y3 \0 g$ e( [
2 o/ G& \! I- u+ ]$ R7 W可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
6 g! Q* A! P4 r+ m會發生full,empty,level trigger判斷錯誤,如下圖所示
4 W  }( e, N. v# I$ k

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好2 j3 x+ M8 x. d" q
7 `& ]; `2 P, L  w
感謝版主 大大的講解,提供解決方式的參考) O- S6 _& R1 m3 t# D
) ~* A% K5 ?' \3 J
我這邊還是有一些問題
- Q: ~1 o8 y2 [* Y# r; C" I  n" r# P5 C- R' b
1.
4 i2 E+ Z: ~6 ZRX FIFO
9 N2 a; [$ K# _" r# ~5 ?write_ptr變動對/RD empty的影響就如同大大所講的; D; M$ l$ ^1 Q
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會
9 K7 _; @- \' C& U  F  K$ Y' x  b造成嚴重的錯誤, o: f* c5 I6 [1 C7 _2 P
可是0 c4 S" g3 b: ^0 G4 W
read_ptr變動對於寫入FIFO full的影響就很嚴重了9 M! J- d+ g6 l/ O6 o* N
當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作) @+ z) A" o3 j" M) \, ~

; M$ `  l& u& E1 N' H! e; _6 Y2.' [+ i1 _1 g8 l! L, ?9 c7 }- y3 w- b
16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時+ S+ |2 W5 `. Y& M
去觸發中斷輸出腳INTR: v/ [! z3 X' o' K3 V! S. B
這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件
4 H" ^- A8 ~' K  [* v1 N. L4 X這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定
- X1 Q7 Z, g" z- E7 L這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時
" ?  D: {" c3 F- Z那要怎麼消除這毛刺現象呢$ Q$ R! [& @$ y: e6 F8 {
. i* H1 V7 C9 u1 a
3.8 t! j0 A, N' M6 }
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
. S, m& i! e9 Q0 G' y( v. e感謝版主 大大的建議及經驗分享9 w' Y" a2 u. R$ Y, ~3 _
對於數位設計的確讓人傷腦筋
" u; d8 J4 h% |$ \& W: i7 ~' E1 o有一大堆的情況都要考慮進去9 i' ^) ?; E2 G( I5 f
需要發很大的心力在設計電路的穩定性上' ?0 \" d1 i* W( Y6 H4 r
- S& l0 ?8 K  w. R2 r5 A. A
大大可否對於handshake在這裡與FIFO搭配使用4 F% W; p) A( l2 O, K( J/ o
再進一步說明一下呢( K5 ~8 c) n' G* s
# _/ p8 H  Q* i% Y( a5 c
我的想法是這樣不曉得對不對
9 i3 X& F8 |8 F9 I當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO& s6 f. a7 G) R: u% X9 S) ?3 Z3 R3 x
寫入FIFO後再通知/RD電路可正常動作
; _  m& W7 Z$ A8 a& ?, ^; K0 K; T反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好1 K4 p  u8 W: [' a' z& W

  `, a. ]' u. X7 N# a可是這樣還有問題我搞不懂2 U* l5 j0 k; h, e) v
: l8 t9 k7 E: u, ^
  寫入端有16Xbaud可以當clock可以達成交握動作1 }+ x1 o6 D5 X& t5 ^5 [/ g
  讀取端邏輯,沒有讀取端的clock只有/RD脈波+ B& N) k1 t- g5 P# p6 n4 M2 Q
  當/RD來時就表示一定要讀取,而且沒辦法- t: J2 X; H  X9 G
  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好9 q- {$ O& |# `& ]$ C' i

' K% g  K- b/ F$ i這部分我實在想不出來. e5 i, d( Z* d! y
如果版主 大大可以提供參考例子,那最好不過了' b- e3 n. p5 a) E; r
' h# O( B$ L; e3 F3 a6 Z5 P- V" s
謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦
7 I( ^, o& k% Z8 l+ _6 B# i) @' r1 ]. V1 i
我有找到一些對岸的異步FIFO文章,有興趣可以參考看看
$ |$ l- u( D1 ahttp://www.21ic.com/news/html/70/show1661.htm# _2 C2 Z' n: I0 ^# K1 b% ?+ f1 D; N
http://blog.21ic.com/user1/1202/archives/2006/23787.html
; r" t# z9 g! f8 Q+ ]: x, F根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率
& Z/ [/ A& N5 Y9 W& S7 f3 }可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷
2 }% b( E% ?/ N( D6 f碼後還是無法百分百保證正確呢
4 l/ I# E2 B. q4 T) X* M3 M
5 i' M& [$ ~7 H* G$ k/ u! J還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
: Y  B$ m% t& V9 l" C: g
7 \; V2 B' O3 Z* w, t將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
3 Q, ^" @' u4 m7 r
9 x: A, `! F$ m/ T1.- G6 L  Q3 g; X+ z/ S4 K
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
5 _, `+ x, N) l& G& t+ P   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
8 s1 j. x& ~" d; e5 W  v   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
- [  ?$ Q9 A) m- h2.
5 c1 L3 Z9 r) D$ R   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高; a5 x2 ^8 y' ?; I" Y
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出. n) m/ m5 e/ s. v( S; Q% E
   資料讀取週期RC最小280ns8 q1 x; F9 S! J$ L9 }
3.  y" T" V9 t; N2 b; `4 _
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期/ o% H1 k3 g9 _
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講0 m2 R! X7 G2 D- |3 ?# X
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
) t* A/ ~/ s9 J   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料* V4 k; q, d5 ^- |
我會好好的找來研究看看
# r: j" }7 Q5 R/ F/ C- A1 c1 }. H( q0 W# _
我本身目前不是從事電子相關行業,不過對於) {2 g6 D, R& f5 ^% U
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
3 R: y9 Q7 V( w! h7 M5 Q都很有興趣,之所以要寫16550 code主要是想
% i/ d& a" ^, d" T% ^9 g挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
$ M9 a5 P; p1 u& F  j! q- |/ {) g) d8 u% ]2 w# a& b6 C) D1 M' T
FIFO這部分我有上其他討論區問過,可是都沒人回覆& k0 x# T" a# V; ~: p0 y
感謝版主願意跟我討論這個問題: W' W+ U3 w) {+ h
& X* W, M# D. U5 R1 q" t
再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
" U& g3 ~+ Y* ^* k最近想到一種架構,用來做FIFO不曉得可不可行' X: e6 u: n/ G- @0 t8 x: u
如下圖所示  r( o8 {; z6 j1 J3 F& P4 w7 s( s
. k4 U5 x  _$ z" b( t. L& t
先就full,empty討論,trigger level不管1 x# X  Z7 Q0 `4 a
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間$ N$ ^: c" c- c( r3 l8 `

. b: b! v3 |$ k' v  w, q5 m. q1.用額外bit(valid_bit)來指出register是否有資料寫入1 H' v, {1 {$ E
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1: l" D; i$ t" d; i  H
  當讀取FIFO,相對應的valid_bit會被清為0
& T/ u1 P2 s: }: p. ~
& M% \% k: ?6 O: g2.wptr及rptr用bin count
* I: c* c9 `' Y# f0 ~0 @* X2 C
* m% |0 P/ @  |" B- S3.full將所有valid_bit取and,empty將所有valid_bit取nor$ q! m$ i7 P0 P9 V7 Q; K

  P, l- U% {1 P0 D9 D4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
! X$ L9 `) n9 ^/ H: U  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case+ \( j  }( \2 M$ |; g5 e% U
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
( U" R* w; o2 [; O. Y
, P, W! ]8 r# c, r& |5 E5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
  S, R  D( p/ m6 V  C5 o  \4 f  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
7 h- \+ t) j' L+ O2 N: V1 P7 X+ S2 p) J  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接' F7 ]" t: [0 T
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
+ A- y' A' e6 K) L) L8 R  個位置是空但被判定為已經滿了的狀況)
, N* G# Q( [  F* y6 ]. Y6 P
( V# l& [# G. q6 ?/ p以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好
# R2 {1 z* d2 ?4 `& D! k+ o1 o我想到這個方法除了電路會比較大外還有其他缺點( _! n0 N) ^+ K( M

" @4 T# M* D" k; X( C% F1.不適合做成容量較大的FIFO# p) r$ p) x- J

7 z2 Y* ?6 ^* M$ ^" v8 u- \2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
8 D! r" t( r8 k/ Y: U- }4 Q, S" a6 ^5 r0 h! A
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣( n6 W! e7 o: g% [$ m
   會有較長的延遲時間,所以速度被拖慢了
" Z* ?  ~8 c) T- I9 p4 w+ ^- c
謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好
5 ~) i+ ?9 J" ]4 p: L$ B
; U) m3 x( `% Y4 G% j4 @1 z0 n! E/ B
1.
: x: b' H" O1 M* k( E" ^   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
# w+ ]& E7 A; X( |
6 _7 u2 H& c2 q. @   不了解這段話的意思,可以在進一步說明嗎
2 S; ~2 Y" l4 E, B. s
, L* D9 Y. _0 Q* h' e$ Q& P2." O# x' C1 A1 o( O" E
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
6 z8 D* B7 ]. @( g" m+ X4 Z) A; G  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
5 i3 ]( o  \, G3 w- C; L  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
$ O- O8 V7 l  {6 P- f  請問有辦法評估亞穩態維持的時間嗎
6 c! w5 _& X$ ~/ A3 m  
5 b6 t2 I  n* x$ v6 \謝謝( a* c: x5 e7 B) x& J

+ S# E  }2 Z$ z8 m% a[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好
- m7 h7 R% W$ Z. C關於 metastate
# v. Z0 T4 f0 F: y7 L" B3 D8 f請問如果一個d-ff假設 clock頻率1 hz
% e0 i/ s% s" a) o6 p( a0 i; Z; p如果剛好發生metastate,metastate這個狀態4 U+ p' u, p* Q" X9 @# Y* e3 \! z
有沒有可能有機會維持1秒的時間長度呢
7 o! R+ l& ^0 [' t9 N
; j: s8 F$ [  Y! p$ }謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好
1 x, r, |7 ^  Z" R5 X+ t; R7 g( Q依讀取狀態來說,/RD負緣鎖住empty訊號/ V% V# o3 z4 }$ M* F. S$ O( n2 v
而剛好發生metastate,且剛好時間超過/RD默波的週期
7 m. M) L4 x7 c. u8 Z) X& ~# e" X那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好
1 b3 U; p& h  d3 [' ~, Z. l$ B4 K/ z所以是否如我37篇所講
. J2 G' t" X; L3 U; z2 v  ]* p- h這樣的設計會有問題,因為無法保證發生亞穩態的時間
8 x! d8 y% W7 Q. p比/RD,16*BAUD週期短0 ^1 i; J" q+ c+ ]$ |( }1 {7 k; q  }
' i# k, w* v7 L# _
那麼這個問題不就無法解決,因為empty可能再任何時間點
/ p$ z5 s$ {) u$ I4 u發生變化,而/RD脈波也可能再任何時間發生
2 d- z% H7 }2 X0 z; @, O8 [% r: U/ A9 T
請問這樣的架構,有什麼方式可以解決這個問題) x% f8 a: m6 ?, G1 [+ V# }
5 [" _2 v" p! s9 _2 X2 V. `9 N
謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
# m) {; e# M  ?  C- S在opencores內是不用註冊的, 直接以cvs下載就行了
. ~: @6 `* b( L( d
) u9 y! @/ r1 C: K" s0 e0 H
原來是要選cvs選項就能下載
; s% P. n: o6 o3 K# G3 ]1 f1 @' B9 z6 g" `
謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 03:05 PM , Processed in 0.123516 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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