Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大
+ f: T! x5 D3 Z  f4 E& s+ U請問有人知道uart 16550 的FIFO的電路結構嗎4 H) P6 Z, ^. j, z# |; ~' l8 n
2 g) U+ ?1 n% v2 D% f
因為以前有用vhdl做一8250的功能: a! c+ C+ W1 f7 n5 d, D& T
想加上FIFO ,變成16550的功能
6 M6 f/ m- E& w- m& d所以才會想了解16550 FIFO的電路結構7 x  I& K( D- l6 u
7 a. n9 ~( v; A" {7 [
依照data sheet看起來似乎是用異步fifo' [# o$ @* j# A9 \; d$ O
寫入跟讀出fifo可以同時操作
  c: E' [- d+ l* c5 F+ S5 i/ S% Q8 L. o( c
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
8 f4 T9 t& }0 _( ~. y$ s& m會發生full,empty,level trigger判斷錯誤,如下圖所示
7 f9 x* a) W2 r2 a

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好
' a8 t' z/ w! |0 V' T2 x" [5 U" J
感謝版主 大大的講解,提供解決方式的參考9 ^* F4 k1 w  x  s' G
4 J: m3 j6 X4 A' ~
我這邊還是有一些問題
) `$ `6 y# C- J" Q
4 n# p, J7 h8 B5 ]- l1.
" @4 u. s- y  A& \" zRX FIFO# O' j5 I' K# V" t* f+ t
write_ptr變動對/RD empty的影響就如同大大所講的0 l5 p  _7 a+ j) P9 o
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會
2 U5 |8 s; C5 c( g造成嚴重的錯誤9 a6 r! Y- w& f7 D" ^# F
可是
! n7 @4 \. Q, S" g$ g* }! m6 Bread_ptr變動對於寫入FIFO full的影響就很嚴重了. {: L: K8 Q4 E) }+ S
當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作' X' H! f8 Q0 K$ F0 k# X
. ], R- Z* O# t2 ?6 w! Z& A
2.6 ]* c) C) c7 |2 X
16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時
( Z1 P5 v6 ]2 `# B6 X; d/ N去觸發中斷輸出腳INTR! B; o( ]2 P% i
這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件
1 ^3 }2 F8 k  s  @5 f& I這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定/ m* j- e9 U" Q
這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時" a- w) }4 {# d0 E2 W) X6 l0 ^# Q
那要怎麼消除這毛刺現象呢
! n; C" i. n% y2 p1 b  u& T$ n9 B/ {
' V5 z1 {: E6 c6 Y  M6 \' ]3.
4 k! h; t/ H5 i/ I. Y如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好$ D; a6 j4 s8 g: ~! Y  \0 ]
感謝版主 大大的建議及經驗分享
! E+ c+ d; A4 |對於數位設計的確讓人傷腦筋- A: r* C2 L; R( ^6 z$ |2 l& Z
有一大堆的情況都要考慮進去, M% ]. H) D/ r, b* l- b
需要發很大的心力在設計電路的穩定性上0 V9 H8 _2 Q% z7 b5 [/ n$ X

( C# m  K+ ]/ U! W大大可否對於handshake在這裡與FIFO搭配使用
# j/ W2 I- K' i* ]$ j再進一步說明一下呢8 |7 r4 }4 \7 W: _
# h3 }8 U6 g) a" H. L* c
我的想法是這樣不曉得對不對
  [" H; Q( _3 {" j% B4 D; j當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO* W7 U" t: ]3 c( C: ?0 ~7 r
寫入FIFO後再通知/RD電路可正常動作
; W  G7 p: X) C# H+ h反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好$ }$ F1 _0 X% G( h' {$ K4 B
9 f: Q0 L3 D1 ?- Q- F' D
可是這樣還有問題我搞不懂, P- ~! e! q0 j- ?+ X, q8 @: v
; M3 M( I  I: i& Y" d
  寫入端有16Xbaud可以當clock可以達成交握動作
0 s6 R; p! g+ x% {  讀取端邏輯,沒有讀取端的clock只有/RD脈波5 C  q6 ^( p+ G: D
  當/RD來時就表示一定要讀取,而且沒辦法
  R! _8 e' g' {4 P; m4 r8 ]; V  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好
  P5 G# j# [: j
: b3 D- Z# S- V這部分我實在想不出來0 U7 q+ n. P) v1 w
如果版主 大大可以提供參考例子,那最好不過了
1 h: ^6 Z+ d3 y- h4 m; c  B' @2 W0 M/ n# \! G. X
謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦3 a$ \$ E; P/ a# l" z. m; r9 y+ L2 a

, g; }: f; {! Q/ l0 k5 e我有找到一些對岸的異步FIFO文章,有興趣可以參考看看2 b! J( N, Y2 U0 [& W1 G4 s
http://www.21ic.com/news/html/70/show1661.htm
* z: E% B6 ?9 X0 g( Rhttp://blog.21ic.com/user1/1202/archives/2006/23787.html
* \7 q/ Y! \, \# D+ n& S根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率
9 y$ D: d2 a. A; T* \& O* W可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷
4 N4 k# _) o2 g' c- m$ L/ S碼後還是無法百分百保證正確呢
3 x7 d2 U( M) y& J6 [5 C  ^2 Z7 T# E. \$ Q$ o$ \9 W
還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
; ]) s. _% ^! Z" |/ d+ u, ?
, d2 p6 S* ^5 ?將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論/ w! i( c8 J& @

3 b& |1 D0 K0 Q% c( l3 \1.7 Z5 ?! w5 w( r: n
   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"+ b0 p8 H! S& _% @: y
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
1 D% j. E: v7 v0 ?! v' i0 I6 Y! O   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
7 x" x9 H; a2 x% n2.+ U% R: X* O2 T2 {# N
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
  _+ y5 @5 j' z' T  G   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
; f' p# k; G4 c- e" u, n) W   資料讀取週期RC最小280ns  m. g5 U# I. ?! L% {. k
3.
4 V% l" n# ]3 y1 j   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
# x8 o9 u& O# a" R# H   小小於wck週期的case,會有問題,以trigger level造成的INTR來講# h6 s2 i1 A- q0 |( e
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間9 G7 j* R1 s) ]2 i- L1 W
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料! u: g2 j1 I, T6 t4 {+ O
我會好好的找來研究看看0 p# J9 q1 [7 _. O/ z

' e- D9 }3 k2 C* h8 |# v3 k2 n我本身目前不是從事電子相關行業,不過對於7 X  z8 f  }! [0 n+ l5 ?( Y0 C
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
1 N, |" z5 H: e+ [8 v都很有興趣,之所以要寫16550 code主要是想4 N8 L0 x- g3 g. A8 `
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易8 K9 t7 ?0 D1 U# w

, T$ B+ B. ]5 O, t  ZFIFO這部分我有上其他討論區問過,可是都沒人回覆
3 ~' z8 u7 d! |3 w+ X感謝版主願意跟我討論這個問題
, H7 ~* j% @4 ]' b9 V' t5 P. K7 X( K# s" q" E
再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
0 Y( k' k! R2 |. [5 Y- J0 _最近想到一種架構,用來做FIFO不曉得可不可行# w2 i% F# T( t- j1 j
如下圖所示
! J2 c* J  j6 S" @  f! S3 Q( Z3 o& R
5 ~) M- t5 E# @8 L1 N" i. e先就full,empty討論,trigger level不管+ I/ M2 T: ^% S* g+ q
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間6 E% \" a5 U7 h5 t& n  s# }2 C6 P/ x
+ @' y, _5 w2 P/ e' s' f2 d7 N6 d
1.用額外bit(valid_bit)來指出register是否有資料寫入' ^: t- ?8 h: [( E5 S
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1; d0 P# U: n  k3 N0 K
  當讀取FIFO,相對應的valid_bit會被清為0
" F: ]! V, ^9 Z4 y1 w( |
2 c( d% t9 S6 `3 t: i2 Q0 p8 I+ G2.wptr及rptr用bin count
/ E# O$ t4 I  x* a: _2 Y" S0 v3 [1 m6 P/ u
3.full將所有valid_bit取and,empty將所有valid_bit取nor/ _: t5 u6 V' k" ^+ u/ ?) @* w

# x9 k( v: P7 d$ Q% S! j4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
" R) h( H% l9 Q. i3 M6 X$ ~5 n: Z  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
3 z& {" j+ |( [0 s! ^6 j  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已0 I1 k8 B8 p4 E/ j) q6 z

& w% c( C+ M- ?6 W/ A  p4 T5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作. D: i* d( J1 y8 s
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
) r. J2 u: F- y! o6 j8 a  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
5 }9 W4 V7 \3 W) _" i& |  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一" Z; I; a- s1 G; W5 z5 g
  個位置是空但被判定為已經滿了的狀況); e% `" P; H2 g) K  k8 M2 m- [
  r1 U$ \- U9 v! a/ ?9 G. F# j; {
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好
2 q$ }$ R% y5 I. ~1 U5 z" R我想到這個方法除了電路會比較大外還有其他缺點
- a  P5 k# f$ F) G, B, q8 N8 O  f2 B1 {. T$ n6 U
1.不適合做成容量較大的FIFO
; v( k4 `) u  J$ w9 \$ q/ h
& v' H) x6 w0 N2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
/ |6 t) e: {% _0 X, C. v+ T0 c% ]* Y' T* E" O! u
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣- N& |) r" I- N6 ]0 P0 G1 e, O
   會有較長的延遲時間,所以速度被拖慢了
  i! M, Z: H9 b2 k
& c/ B7 F1 H: M謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好
- \3 ~& w5 r( e, Y5 P
" z4 n8 a7 f' Q2 e* x! ?1 q7 f/ G/ G) E- r
1.
( X7 ]* z% J/ l4 p  l5 z; h   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
$ X+ `2 A+ y9 M- u& g) ]7 U
& N6 _7 q9 r% U/ y, I* U' s, j   不了解這段話的意思,可以在進一步說明嗎. p, u2 a& b; f6 I# ?1 N

2 i/ v* I9 x; O% N, W3 i2.% M0 a% f) ~; k3 k. G
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
5 U  z) ]) I2 V, S- s( v+ b! [  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
3 V+ w$ P1 Q/ W7 l% t  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了  W5 E4 M: b0 E/ ]% A
  請問有辦法評估亞穩態維持的時間嗎$ B) h+ J* h5 N. m! w& [
  ! U! d# _) N$ f+ @  X9 O
謝謝# C. X3 X# E" ~" J) K. A- Q+ P

: x7 t9 }  q7 x2 T7 q[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好; B1 k6 H' f- g3 H5 p
關於 metastate8 O! }( Q. y7 d# _. E) b1 x) X
請問如果一個d-ff假設 clock頻率1 hz
! Q( F8 S) q' R9 `: }如果剛好發生metastate,metastate這個狀態
+ N! K1 R$ k. C  w+ M* Q, R' h, z有沒有可能有機會維持1秒的時間長度呢
' w. w/ z, c6 ^1 O& j: [: |+ R" h+ h, s9 Y. k' b6 k
謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好+ E9 a9 `9 t2 Q& Q+ p
依讀取狀態來說,/RD負緣鎖住empty訊號
' H' j! E6 y  E" p! H' L! F7 n& ~而剛好發生metastate,且剛好時間超過/RD默波的週期
! o+ n' ]) ~. G0 o+ ^& I那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好; R0 _; b. M+ R  ^8 N; V# {
所以是否如我37篇所講
4 ^9 _8 T9 }& `& h- C( ]$ f8 ?這樣的設計會有問題,因為無法保證發生亞穩態的時間
! o7 R7 ~, J* e- P1 V* I: P- T6 A比/RD,16*BAUD週期短
3 C$ M  l. r  n; N# N) V* W; a
: b+ F0 j' M' Z9 \, M* M% e- g那麼這個問題不就無法解決,因為empty可能再任何時間點7 q, y  k" a7 h6 j: R0 j) ^4 Q
發生變化,而/RD脈波也可能再任何時間發生
! w) V7 `& w2 p2 o# M+ G$ z$ [
+ {; c) z! i  I3 u8 U, v請問這樣的架構,有什麼方式可以解決這個問題
2 z1 z2 J& \' q4 ~9 y& l; {( R: g% L' ?$ R$ r
謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
6 K' H7 V, d5 g; ^3 ^在opencores內是不用註冊的, 直接以cvs下載就行了
' {- n+ x# t$ H3 E4 z3 r8 V

0 i6 n! F5 Z! {: U+ D原來是要選cvs選項就能下載
' i' v8 n- g. e. y
. V  b. o- d( w7 W謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-1 11:15 PM , Processed in 0.136517 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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