Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大
& ~8 @& m+ j6 w8 o# ]6 \5 L請問有人知道uart 16550 的FIFO的電路結構嗎/ s7 h& j; ?7 p  s9 m: A4 D
: q% V* H( N3 K( n
因為以前有用vhdl做一8250的功能
5 g" A9 Z4 ~* s7 ]8 ^: O( J5 M想加上FIFO ,變成16550的功能7 F% }+ i5 E) h" ^, a
所以才會想了解16550 FIFO的電路結構
4 F  y" u' X0 C6 `- j
* E' b3 K+ J3 `3 b! O# X依照data sheet看起來似乎是用異步fifo# e/ N2 ~( L, @
寫入跟讀出fifo可以同時操作* F) c. @8 l7 {( J4 |4 q
4 o1 f$ w! j3 v- j) `6 P+ y
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
# n% c: s. H0 o1 I  y會發生full,empty,level trigger判斷錯誤,如下圖所示+ C) Y' P$ R7 v& n; w' \- p' W

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好' t) W6 K" k* N  S7 }
4 L: \4 J$ ~; k  n3 I
感謝版主 大大的講解,提供解決方式的參考# k0 L; Z5 A2 I5 p

0 Y& \. J& O1 Z6 u我這邊還是有一些問題& M$ k$ \9 @# `" [, l. L# P+ L
) A6 A; e7 O; h2 L  Y+ t8 I
1.- l2 w4 O* |8 Z2 E
RX FIFO4 o* I3 O9 d: K6 @' {) I
write_ptr變動對/RD empty的影響就如同大大所講的; L% H" j5 N2 Q
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會) }$ `$ F1 _8 _; z
造成嚴重的錯誤( {0 ~/ [1 u6 E% P
可是
3 a8 |) D) J4 t9 I5 W  J4 h# Yread_ptr變動對於寫入FIFO full的影響就很嚴重了
3 L+ R: u0 i+ L$ ?" _' r0 `6 h/ H" \& r當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作: ?' ~1 v! Z1 R4 L
, ]! [, j: n6 X! [9 R. \) L
2.& ~* J) ?+ I/ L. d- }
16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時
9 d4 u% k, T5 g9 _1 }6 ]5 ~/ M去觸發中斷輸出腳INTR
; }3 z& V  {, f, T' j這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件: i7 X$ N; W5 o& A
這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定
5 @3 O3 u( @% e0 h1 [6 v這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時
: F2 V2 o6 O! _8 K2 W/ Z那要怎麼消除這毛刺現象呢( g/ b: s$ U$ Y9 w" i$ a

4 G( ]3 t, w, k3.
1 q( z$ |6 a# h+ b; L7 x+ C3 F0 O如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
8 {; F- g- ~% g* R感謝版主 大大的建議及經驗分享" i& L6 f4 W/ {+ u
對於數位設計的確讓人傷腦筋: D: N! c6 J5 N
有一大堆的情況都要考慮進去
; }7 L+ e: k2 ?需要發很大的心力在設計電路的穩定性上) N$ Z% n) i8 @
4 }* e- Z. |/ J, W* r
大大可否對於handshake在這裡與FIFO搭配使用
/ K+ c- K- p7 W: m6 f1 m再進一步說明一下呢" W! c; k% w+ n, q3 \0 \+ S) ]* Q: z

+ ]& J7 G0 k5 r5 M# _1 k我的想法是這樣不曉得對不對
' @  B% F. t, R* Z/ |7 n當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO
$ M: L: j( X7 ]( \9 Z" P1 J寫入FIFO後再通知/RD電路可正常動作, @& t5 v6 X$ `# t4 S
反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好
2 X3 w7 D: z- @
0 n+ |6 V0 T+ M, V可是這樣還有問題我搞不懂1 ^' x9 h3 [9 [0 j
7 C# V4 _1 t- s; t( b! ^
  寫入端有16Xbaud可以當clock可以達成交握動作: V, [& ?- R) O
  讀取端邏輯,沒有讀取端的clock只有/RD脈波
6 r& P+ r) p8 r4 L8 A; {% Z  當/RD來時就表示一定要讀取,而且沒辦法
# v3 Z$ I' b. l9 [) J/ s, g  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好. p9 T& `1 h- a9 Y* |* {
+ L) ?4 t: b, _. q5 b$ u* H
這部分我實在想不出來" n! X8 |+ ~% t# R6 e2 J( f
如果版主 大大可以提供參考例子,那最好不過了4 S' z, N) ^! q- d- Y

3 ^) E4 Y8 _7 b! F% \, m* o謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦7 I* T( m, z# G) F% S6 R/ x8 u
1 Z& a& I( Y8 {' _
我有找到一些對岸的異步FIFO文章,有興趣可以參考看看
) _- N3 r" ^; a$ A- q, A$ Ehttp://www.21ic.com/news/html/70/show1661.htm. Y/ ^' M) {# {# b3 m- D% I
http://blog.21ic.com/user1/1202/archives/2006/23787.html  x5 h  }2 j( ?' u) V$ X0 P
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率
6 j, m* v7 B+ k1 e! P可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷) C  l# S* l  f$ s( Y" i9 z
碼後還是無法百分百保證正確呢3 t. u) X. P: X4 |6 v! h0 k

2 b1 {$ X3 c; A/ A+ e1 y還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
) e& v6 `3 K6 y! G- g" T* }9 E4 R6 s
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
' i, K& U$ ^0 N7 Y; l3 {. c7 [  g- I" {0 a8 w! ^% V
1.
/ y+ R5 n: Y  ?; o   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
0 ~9 P& k0 M! Z+ J# C8 [   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生% r* U3 C6 H  g* O! l
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一  G, W8 W" u7 i& }# B
2.
% A$ L) z" i# |! i1 t; ]   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
, O- \% T- K/ j0 i+ A9 [& Q   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
  M' e: [- X% d( _4 z; s   資料讀取週期RC最小280ns
+ c4 N# c8 H1 A1 @3., s0 ?: \( P6 k+ i& ^1 B
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期0 i; M% {, i0 g! z6 f5 l
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講* N5 p1 N+ E, s. C% L9 d
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
& V& u2 g2 Q2 L   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料7 V+ }/ \5 l7 I$ M2 `/ S  `  d
我會好好的找來研究看看
! s, ]2 V0 I  s/ I( U- t) m4 n3 q4 A% x! m
我本身目前不是從事電子相關行業,不過對於
0 U9 D' o8 |+ b5 SFPGA/CPLD,HDL,數位邏輯設計及單晶片等8 Q. _  J, Q  R: ]5 ], L% u
都很有興趣,之所以要寫16550 code主要是想
' M- W' Y, g3 e. e挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
3 R- H: P  ]6 x; W% Y) c; @0 |! p+ I& A- E  r8 W
FIFO這部分我有上其他討論區問過,可是都沒人回覆' O) j% ]$ z- I. Z1 `
感謝版主願意跟我討論這個問題( N3 m' d6 G3 |8 V

% |1 O; C/ b' j6 ^$ B6 ^再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好. |5 ]1 q9 h; y- U/ J1 X* ^/ I) u% W* Y; L
最近想到一種架構,用來做FIFO不曉得可不可行
* o4 Q% E5 p* y; C9 B如下圖所示
' }* G& X9 g5 S& ~8 F5 H, K! I) B3 N2 q+ |" @
先就full,empty討論,trigger level不管, a8 Q/ }! F% _9 L
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
8 Z  l' {! Y3 J: F* U2 ?- m9 r4 ~$ f% d& ^' X% L8 [" e& I( T
1.用額外bit(valid_bit)來指出register是否有資料寫入
( o& `: F6 A5 t0 p5 @, e  當寫資料到FIFO則相對應的valid_bit會一起被設定為1  x4 t, R$ ]0 s+ V
  當讀取FIFO,相對應的valid_bit會被清為0
) y4 H; S" H4 u0 W- s- z8 X/ y, z3 m0 H6 e5 e) }
2.wptr及rptr用bin count
0 U/ Z% d# q& V/ [* n! O) e  g7 l
; E0 V+ n( ^8 o5 A2 z2 ^3.full將所有valid_bit取and,empty將所有valid_bit取nor
! I1 U+ s7 n5 [5 ]- J) B# ?# _) Q- ~* w# F' ^" I
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
5 v1 Y/ }! n/ G0 V' E1 ~  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
: D* S. [7 }/ i4 ]& D1 `' \  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已8 d" f' H5 V% m' Q0 A6 z6 Q

. L. v/ l" b6 j( N1 @( [& R5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作% X% `$ K0 u  A" @/ X
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
# b7 {) w; S2 A' o; U3 D( v+ y' s) q2 i  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
  u2 r& |% Y# C& w; U2 O, ^7 _% e  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一8 s0 p  ~% ^/ w; h' @! m
  個位置是空但被判定為已經滿了的狀況)8 b9 P* U- j- F9 r  W& o9 m

5 X2 j& U9 C6 q1 R以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好, u" l4 w# [: M9 D: F; p7 S' {1 G
我想到這個方法除了電路會比較大外還有其他缺點
. K( J- e6 d; z# W* g2 d3 j& O: f3 f
1.不適合做成容量較大的FIFO9 A: W8 ~/ H+ G) N

( c) S8 c: m" U% |  ^  q2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
4 V  R1 X5 Q' `/ u4 W% Q
- K$ q$ z9 u) f$ |" {2 `, w3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
$ t& a' l8 \( m1 A% r   會有較長的延遲時間,所以速度被拖慢了1 p0 o9 r4 v* S/ g

" x* m7 d2 b; H) L- x1 [; g2 u謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好
5 _' Z1 u( T) o
/ j- s; j4 j6 ~8 z" ^  n# R
+ l6 e/ W2 G  |: Y. ?$ ^1.
- \0 P6 D# s! X( Z   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"( E( f: J' @" B; H
% F; }+ W+ d6 p: C% A! n
   不了解這段話的意思,可以在進一步說明嗎& S3 Z3 ]1 x' U4 W  s5 ?

& l' u* f/ y% {3 K2.! t) ]( R+ {0 }) h$ V
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間/ J0 G4 S% z" E/ U/ `4 V& ~+ v2 P
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
) Y" [- N- d7 K* I2 o  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
6 q. c2 P8 A5 X2 G* J: C6 [' h5 m  請問有辦法評估亞穩態維持的時間嗎
4 ~" ~% e3 \$ H  
" G7 i0 ^6 J# X: o/ `/ z謝謝
1 Q% y! ]& H) f6 h- E5 c( Y& u* Z) v" Z8 ~
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好" J" [, s$ I! c0 ^" d/ E
關於 metastate: M" G1 O0 R" m! m! U3 p
請問如果一個d-ff假設 clock頻率1 hz
0 Q# w2 \/ p1 v% P  q/ `如果剛好發生metastate,metastate這個狀態' v) A( U& d% M
有沒有可能有機會維持1秒的時間長度呢
6 Q6 ?# {/ ?! c9 s) n/ l
: o! N0 q9 L1 z) o' w/ |) ]謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好1 M3 r$ c, N3 \" \% p
依讀取狀態來說,/RD負緣鎖住empty訊號
+ `  |6 P0 ?7 R! y! R而剛好發生metastate,且剛好時間超過/RD默波的週期
. d' a- t3 D2 s; _  m那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好
+ y( X9 F8 I6 J7 w0 ~5 u8 i所以是否如我37篇所講
3 C6 q) y* L3 v+ S  K/ L這樣的設計會有問題,因為無法保證發生亞穩態的時間% K, x# g; F& e/ ]
比/RD,16*BAUD週期短' U! A; B7 @. P3 P; m7 q

4 l' ]( ]4 h3 B" f6 b那麼這個問題不就無法解決,因為empty可能再任何時間點
" r4 ^) X: G2 T- v) ~發生變化,而/RD脈波也可能再任何時間發生  ]& P1 a; H6 x% q+ o. F- _
- r/ n* J; v+ i6 |9 X$ Y
請問這樣的架構,有什麼方式可以解決這個問題2 f7 C7 V6 P% Y6 N

# i! ?3 s6 _0 t% P9 ^* a謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
5 l4 l4 @  [9 {1 Z! F) a在opencores內是不用註冊的, 直接以cvs下載就行了

) F, S# q! A' ?* b+ i) d
2 s& I) q/ n' G7 @原來是要選cvs選項就能下載1 E/ R" }) m7 Y2 X3 |

8 i+ N9 G" o0 h/ H謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-14 10:29 PM , Processed in 0.124015 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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