Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大7 `  h- R9 A% d: A
請問有人知道uart 16550 的FIFO的電路結構嗎6 P; t0 J9 _8 p  ]2 K

6 b; @6 v# u) T3 [! o7 _0 U3 I9 `因為以前有用vhdl做一8250的功能" ^1 ?& n9 ]- ~
想加上FIFO ,變成16550的功能
0 ~. J0 c+ P  u# l+ t所以才會想了解16550 FIFO的電路結構
0 e% @3 P, |$ [7 ~* S1 @5 S6 l$ Q1 q4 k7 ?+ J" S6 U  a
依照data sheet看起來似乎是用異步fifo1 L9 m/ M$ N- a% n. ~2 R( ^
寫入跟讀出fifo可以同時操作  Y- Y3 D9 l3 |/ W! _

0 F: L* ]5 F- ~5 R7 V可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會, Y/ L( {# S) s( G, s
會發生full,empty,level trigger判斷錯誤,如下圖所示7 Q% \8 n; n  ^4 {4 T3 C; T

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好
7 I  u: \: N8 b- f7 n
$ H: o2 [" \; z' f, g3 z. Q4 \感謝版主 大大的講解,提供解決方式的參考  O0 S5 U, C% \

+ i5 G6 H; K$ O# O+ V# A  C0 M5 j0 w我這邊還是有一些問題
3 }$ V) j: T) D; r
+ a: Z( t; f* B) j* C1.( R. P' p" w1 E- Y9 s4 w
RX FIFO0 C9 g. S8 W  P! x8 b: R
write_ptr變動對/RD empty的影響就如同大大所講的% A3 f0 @+ L: c$ g0 p
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會1 b/ m* O& H$ Y/ r
造成嚴重的錯誤* `0 B/ W$ Z5 q0 _8 V3 r% v5 g
可是
# p, k6 ^% j. o8 s. xread_ptr變動對於寫入FIFO full的影響就很嚴重了/ o+ w3 X- [* g' m; O
當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作8 q5 q# I' p5 U

& z- ~2 _/ I* m7 ?: q% h2./ M, z5 H* y& M
16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時6 e1 U3 T7 u( Y0 z+ w& S
去觸發中斷輸出腳INTR
7 E! g2 w0 k, D4 j2 c$ Z這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件9 l/ g% D- G* y) I
這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定
# q" ]) S# n! s4 o, u" j- ?% k( y這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時; [  W- i7 T7 Z- W, {
那要怎麼消除這毛刺現象呢
% J" N' _! e* |  G: I8 ^
2 a) Z8 z* Y9 e( e/ `9 i3.* W% o: K! {( ~
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
9 O& t3 {$ L3 _/ m4 U感謝版主 大大的建議及經驗分享+ ~  i2 W1 X. a# \1 s* \
對於數位設計的確讓人傷腦筋
( Q4 R8 a3 E9 L9 _5 ]- `1 e有一大堆的情況都要考慮進去
& T9 w; q6 r5 c" A# l需要發很大的心力在設計電路的穩定性上' t2 u% e2 E, j% E) `* ^, I

) C3 \  j, F% |1 Y. |大大可否對於handshake在這裡與FIFO搭配使用
8 _0 y, Q  r5 q- O  R再進一步說明一下呢: N8 @# L4 l( C' x0 x

& u4 P# N, q3 r; I# m我的想法是這樣不曉得對不對8 ]8 l# }9 y! z* B' S, q% q. c
當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO. y! K' D! _4 Y$ Q9 _
寫入FIFO後再通知/RD電路可正常動作
$ X/ T+ x/ Z  Q  J反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好1 L. P, m$ A# Y! v2 N: n. v

, [* W/ S: ]4 U4 I1 f可是這樣還有問題我搞不懂
2 J" E# _/ G* a* w8 M  n# H
4 k8 J9 X1 U+ i3 y, s' M0 \! p2 x% w" C  寫入端有16Xbaud可以當clock可以達成交握動作
' _7 T* I+ y' \" I  讀取端邏輯,沒有讀取端的clock只有/RD脈波
( j  b0 Y+ X& ^) c- O" c" H' l  當/RD來時就表示一定要讀取,而且沒辦法
4 w9 F  \3 A5 z* c6 i  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好3 w# D( i8 Z- R
* T! A- S7 f6 }5 v. N
這部分我實在想不出來; ^' t$ p4 E  \- \
如果版主 大大可以提供參考例子,那最好不過了
* U0 P" M3 @% a% f" ~  |6 x. p* j  s/ p: L. F4 Z& D+ X% b. x
謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦+ k3 Q" N" a$ `+ w, t; ?$ v! K5 m* q; x
. i7 U) Z. D3 Q5 h1 P( W
我有找到一些對岸的異步FIFO文章,有興趣可以參考看看& Z  z" i: e+ C. W5 ?* e8 n# U% O. U
http://www.21ic.com/news/html/70/show1661.htm5 w3 m; e* @6 l# K2 u9 d
http://blog.21ic.com/user1/1202/archives/2006/23787.html
- M& f0 ?7 I# ~. @7 @根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率  a& t6 f3 [1 V, p6 w
可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷
- n3 q! `! y& r碼後還是無法百分百保證正確呢) _' j+ U0 @& E: G2 S0 ~

7 ~! X6 H/ z# T0 y& w2 M2 ?還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
" p7 a' @  M% d4 h/ o6 W, ]
( U: O5 u" Z; Q# K; |9 u5 O將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論( ]: e, u! b9 Z# b) E4 L# `) T
2 x3 F) j3 M) N2 O
1.$ \) P* B. S0 O, i" R: [; R/ N
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
% Q. M% R* E& v8 c" ]   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
; o( M  K+ h6 e8 U: L   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
% E: h, w7 N- i+ X9 _9 }0 L' j. J2.
! A0 q; S2 y6 @# I7 M" X   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
" `. n2 W8 v/ ?9 J: l   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出  `" E- f% y  y$ U0 `
   資料讀取週期RC最小280ns& i+ q' n) J) R2 h3 F& e; X
3.2 t2 @7 |4 O# M
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
4 D9 Q' K# e9 d8 M* ]( F   小小於wck週期的case,會有問題,以trigger level造成的INTR來講4 z5 ]" l) i0 v  }2 c
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間. b! q' R$ W# R# G3 T6 I) A
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料
0 [& t! W4 `6 Y+ j5 F1 s+ d; I# C. u& b我會好好的找來研究看看
1 |$ [+ M4 [2 G
+ P, g" b6 @6 @8 S2 C3 J* V我本身目前不是從事電子相關行業,不過對於
- e" c2 f5 Y( ~. e; sFPGA/CPLD,HDL,數位邏輯設計及單晶片等1 `1 `4 B: a, H2 O" X
都很有興趣,之所以要寫16550 code主要是想
, T! v3 c. _7 P9 D: K挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
  D$ p4 M7 f' [0 Q
) Z2 W9 i7 ?3 m4 b3 n8 ?: }FIFO這部分我有上其他討論區問過,可是都沒人回覆- ^+ a3 X) b" ]& l4 X8 D& A. p
感謝版主願意跟我討論這個問題
+ A! s4 h6 R* I3 q/ m0 Z) \9 C+ S- G/ S) N, h
再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
6 m) A1 A; c. R" f0 _/ G最近想到一種架構,用來做FIFO不曉得可不可行
: @, C1 r/ H! n6 D; N& Q  v如下圖所示
% T9 F3 c2 A2 m
$ H; Q$ g5 i8 S9 y6 K& k先就full,empty討論,trigger level不管
/ ^) C3 K) S) V讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 r/ f2 I7 C+ M* }8 ?' K  G) M# t# O. I# N
1.用額外bit(valid_bit)來指出register是否有資料寫入
3 b5 D  i1 C3 }1 t) t2 W( b  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
' s  y- d$ M7 P5 ?  o0 P  當讀取FIFO,相對應的valid_bit會被清為0
5 y. i6 P9 E5 W+ a- T9 e! M2 p- H+ p' \% v" ~3 {1 N
2.wptr及rptr用bin count2 N6 ~; c  D1 K% {2 p9 r5 Q
2 c/ |! D* w: c: ?. H" ~
3.full將所有valid_bit取and,empty將所有valid_bit取nor6 F- F- V+ K5 f$ v7 u7 ?; t
2 u6 s# P; u7 S" R; c
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時+ g/ f; r* x* P8 F, j, s6 x
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case4 Y' B! e% I6 D, [  E9 P
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已6 M3 h- y' f8 {
. d( n- E, c6 Q/ Z" F
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作4 E$ ^6 F: {; b1 [: q
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk( {$ B" p5 s3 n) S
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接; D, w' }1 z$ M' y& r+ s
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
# F/ [; D: s% C# w  個位置是空但被判定為已經滿了的狀況)
( s2 E  ]9 Z$ C9 X2 l% d4 ^" w+ ~4 W* F% J, e& L
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好0 h! f* O! |# z( f4 O
我想到這個方法除了電路會比較大外還有其他缺點- q( G4 z5 F; r2 m
9 T+ M! @1 {& H) r
1.不適合做成容量較大的FIFO, B8 Z8 @* f: q$ {3 c

& C# a3 d, @* A# K2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響) o& i: n/ m0 p; m( S5 V

" b% d) d- K# D4 w$ U2 W3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
, R  t2 K! q7 Y& |' _; ~) M   會有較長的延遲時間,所以速度被拖慢了5 v) N8 J8 ?5 I! y, l3 A2 e

4 R- x& o, M1 [6 r& c. G" h' u! T謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好
" k) y7 E2 R" k# ~
( z  R- J9 `$ ?$ E% E+ Q' Z2 N/ G5 P; n7 l
1.
6 L5 k9 Z: B' y# ^   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
; [/ l# S0 o" P7 f! `' I: p  u. t. \& M1 |! Q
   不了解這段話的意思,可以在進一步說明嗎+ B) C2 z. P5 v. C  O, J

5 ^$ A) ?8 [- G3 `2.
- W7 L) m" t' B( Z% T9 {, T  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
8 U  q" h/ y( T# @2 k. `  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
2 l; k2 p% U, v/ h  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了0 D, H9 ^8 ?/ }& ^) f
  請問有辦法評估亞穩態維持的時間嗎
: M' k+ ^% Z$ L  d  ( p! @4 [- V5 e* z. K! c
謝謝
1 I9 G, K8 c" o; u5 v" ^: C% N4 k1 l2 x0 `4 t! j: w8 b
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好1 L, |4 s9 i/ F1 e2 C
關於 metastate
& V- ^$ S7 N( ^& V2 d3 i7 A請問如果一個d-ff假設 clock頻率1 hz- X5 x: B. W4 o% e* O
如果剛好發生metastate,metastate這個狀態
7 b3 E$ Q0 R: _( |# B$ |) X* F有沒有可能有機會維持1秒的時間長度呢
" A7 R, y5 G* g6 g
: f0 n; q; G9 P, b3 _2 @謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好5 Q! f6 i3 [/ p+ m
依讀取狀態來說,/RD負緣鎖住empty訊號" p& s. i4 p' O" P
而剛好發生metastate,且剛好時間超過/RD默波的週期2 O0 \) W: c  Y* F
那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好
0 M8 k( ~8 R8 A/ c6 Y% z所以是否如我37篇所講
6 E+ U2 J+ W/ `. I; ]( \這樣的設計會有問題,因為無法保證發生亞穩態的時間, l3 k" B! w# l- {
比/RD,16*BAUD週期短
8 l( n: j! E" N& {8 h' T# j9 \, N. r0 G- [( O6 H' P9 @
那麼這個問題不就無法解決,因為empty可能再任何時間點
, \* ]! }! H% V% }- z  p1 T發生變化,而/RD脈波也可能再任何時間發生
. T; W; d* c/ |7 x/ @' J1 \% J$ E; }' B
請問這樣的架構,有什麼方式可以解決這個問題! r4 O9 M4 T) e, h8 h! Z/ K# C

- Y/ ]- S- j, K: w% P6 j# [. y謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表: p" c5 n8 c, Z6 z" Q4 v, A
在opencores內是不用註冊的, 直接以cvs下載就行了

( O2 A: ]6 g! {2 D4 P0 t0 z& M% Y4 j; X/ g
原來是要選cvs選項就能下載
5 d4 s+ D. e+ G8 ?8 e8 e, W* x/ y' u% z) H6 L+ G
謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 08:07 AM , Processed in 0.129517 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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