Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大% `6 G2 ~+ S* \
請問有人知道uart 16550 的FIFO的電路結構嗎
5 Z$ H" i3 `3 B7 m1 N
1 F4 W6 X7 C1 n; ]# Z因為以前有用vhdl做一8250的功能; j4 z& G$ o3 O$ I
想加上FIFO ,變成16550的功能
, z# c* I+ s( U% E, i2 y所以才會想了解16550 FIFO的電路結構
. y* F2 b  G2 q: }; ?1 X
7 [2 w8 S& T* q' R依照data sheet看起來似乎是用異步fifo
- ]1 b' T0 K, S& C4 G寫入跟讀出fifo可以同時操作
- o2 z6 q- k$ R4 {, Y, o0 K) o+ `; w, }9 c7 I
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會+ O) Y7 Q% D  c4 I9 w4 ~# U. _
會發生full,empty,level trigger判斷錯誤,如下圖所示: A6 w2 b3 Q6 Z

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好' i* d* j2 |" u* v9 c/ d

) e6 r7 z; M# P+ J8 Z' b" G$ }感謝版主 大大的講解,提供解決方式的參考5 Y& m: l/ S# O! c" h/ @5 ?0 z
3 o6 Q3 _0 T) g8 t5 e* [0 a7 i6 A  n
我這邊還是有一些問題
! H5 j6 J& a: {% ?( U( ^$ _1 t$ q" r6 `+ v
1.
; H5 G/ o) g% b! CRX FIFO
/ P5 Y, @+ r! `% f" i' Hwrite_ptr變動對/RD empty的影響就如同大大所講的
! b5 z$ w9 c' Zcpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會* d2 n1 W: g* u3 m+ y" n
造成嚴重的錯誤
% ~( F: V: Y6 t5 `5 K  a7 T可是; |" ~. D9 f( I% F; o( G
read_ptr變動對於寫入FIFO full的影響就很嚴重了! ^: d! z5 O) z: Z4 z
當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作1 I, j9 u2 b* C8 O

+ S) s4 p3 ?4 a. {2.
1 |, u9 J. f8 v5 Y& r16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時2 Z4 Q5 A) |. t# Y) W3 N( E! _! }. V1 X
去觸發中斷輸出腳INTR; M0 n) l5 F1 Q. g8 a
這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件
( ]" S4 R0 L5 ]2 g7 a這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定0 w  ^) V. e( j* V3 j% d/ D: a
這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時
9 H( |8 d1 Z( f% |! R+ [: d0 {那要怎麼消除這毛刺現象呢
# \" O8 ~# J0 S7 C. i3 l; n) s5 W, c# d1 N9 O3 n8 C( _( ~  L0 D0 A* P
3.. ]% x/ \% [; W, ?. g; A0 L
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
' j" e$ H& K$ L( |* W! A  p感謝版主 大大的建議及經驗分享
0 a4 e  f. }: Q( ]對於數位設計的確讓人傷腦筋% U" H% S; \$ O
有一大堆的情況都要考慮進去7 K5 B" y! J1 l4 o
需要發很大的心力在設計電路的穩定性上- @& a3 ^& E8 m2 s

/ A' O$ n6 `& s$ P7 ]% c大大可否對於handshake在這裡與FIFO搭配使用
( U( ~/ X6 a6 o% O9 s再進一步說明一下呢+ [" G6 \- z" G: f# d4 l
2 R7 _1 ~9 _3 [. j- z
我的想法是這樣不曉得對不對% d5 `' N8 Z* v4 b$ J: j5 P0 \
當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO
2 r0 P" A+ f/ L& z  e! ?寫入FIFO後再通知/RD電路可正常動作7 w1 [/ ]7 c+ Z
反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好( W( N: Z* N8 u3 m: w
# n$ h' |/ p4 x4 T: M9 {
可是這樣還有問題我搞不懂+ M9 c+ I: c, b6 D  p1 S

/ U, q; x8 e: ^/ _" n- s; D0 a  寫入端有16Xbaud可以當clock可以達成交握動作0 [! c. ~0 |7 y# t, {) [' k
  讀取端邏輯,沒有讀取端的clock只有/RD脈波, T- R6 }- @/ Q! h  x
  當/RD來時就表示一定要讀取,而且沒辦法; T( V  A" P9 \( y
  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好
) f& g+ J; M) b% H
6 k3 c3 y3 H7 ]# Q3 m+ N這部分我實在想不出來6 Q  I( E: {5 f5 d, l
如果版主 大大可以提供參考例子,那最好不過了# w/ m% V1 O8 T* q$ }9 Z' w$ ~

. ]4 M# G, r: i$ [謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦
( Y4 c9 T. y7 g( j- V+ |: u2 v7 |/ Q
我有找到一些對岸的異步FIFO文章,有興趣可以參考看看, r0 G# ~8 m9 s. i
http://www.21ic.com/news/html/70/show1661.htm
- o* b+ Y7 [1 ~& t% Nhttp://blog.21ic.com/user1/1202/archives/2006/23787.html( e. t# t' V! `) K4 o( T5 l
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率: [1 Q# H, k& s/ W, _8 I
可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷  N$ d3 v/ d0 f, z3 A& ]
碼後還是無法百分百保證正確呢* z8 J- q4 u* X* ]: Z

: W, ~" m- p* V: J0 m$ |5 _還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例
8 {, c4 w" H- a2 K2 X  J$ F) x/ U2 N! I, K9 L+ J
將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
! A8 X$ W2 V$ h5 J& G" t. P7 Q* h7 i1 @7 L& ]' s
1.
; u. E: G$ T+ e  k   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
9 |: _% f, Q) ?   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
" y# }8 r' ^; q  l+ O   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一6 Z5 u; t, x; j. _
2.( O* i# s5 g% F: p( r0 J
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
# x! P) L$ d9 ?: `9 K   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出
% V$ H7 l0 X) s! a   資料讀取週期RC最小280ns) f, p) ^7 w: G6 Y- D
3.: [# j; {' R% ?! A8 [" t% M+ L: m
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期9 a) a9 L4 y' V% l0 s: v
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講9 b8 ^9 q4 c5 D- V
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間9 p+ z# F0 T; B/ G# Q9 x; H/ |
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料# ~7 f( R% `1 i2 y
我會好好的找來研究看看6 ]  N( ^7 }% ^: m+ M

) N) p. x1 |2 k& A我本身目前不是從事電子相關行業,不過對於
* R, B. _5 R. L# K8 }6 CFPGA/CPLD,HDL,數位邏輯設計及單晶片等
& u$ P  q, k$ m, u2 m& ^5 {都很有興趣,之所以要寫16550 code主要是想; D5 P, d1 U! y7 {/ h
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
$ X$ B/ i+ P8 J/ A# v. v% c* ^) W1 [+ m2 Q, C
FIFO這部分我有上其他討論區問過,可是都沒人回覆
2 u2 D' E) `' u4 I感謝版主願意跟我討論這個問題
2 e3 @1 \' C( D0 u/ V! X7 I7 B$ {1 W% m) A. f4 p9 p- ]% Z* ?% d
再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
0 e% k+ k/ \; b# j$ x. N最近想到一種架構,用來做FIFO不曉得可不可行9 e  d' s( h6 l6 }- s8 o
如下圖所示$ c2 `/ b4 A# b
$ D) Q8 ]  y! [/ \) O5 {3 Y" w
先就full,empty討論,trigger level不管
' }; X  l; C, `- ^, n* C讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間/ u$ P! w, E5 K3 v# W. E

* x) G1 y! |" }5 w  H1.用額外bit(valid_bit)來指出register是否有資料寫入
; `6 j$ R3 C& q+ L1 S7 j$ Q4 r9 V  當寫資料到FIFO則相對應的valid_bit會一起被設定為16 z, J9 V: l' U& N
  當讀取FIFO,相對應的valid_bit會被清為0
" Q' \2 J6 G/ Z" L0 G9 C9 \( [  [6 |% Y, j/ k4 W' {9 \
2.wptr及rptr用bin count
3 Q4 Y4 x* Q* [. i6 h/ G! J$ V
% R9 y: y; Q- N3.full將所有valid_bit取and,empty將所有valid_bit取nor
7 |7 a: Y0 V& P" r+ e9 Y/ D+ k, R% T- N1 e6 V+ h/ @
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
, h& N/ _- t3 c* `& D' }  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
' {# e, U. s& `' f) Y& s  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) @, B+ M# [. ^3 [5 C! q/ Q
# s, L( @8 p; a4 g5 u: F3 j1 C3 D9 E5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
2 f( c' j8 P! y; v4 r( X  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
) o1 a+ t% c" y7 @' [4 P  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
  A3 X% o* }8 {, t4 v  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一- O/ d3 U$ X4 O! Z# b6 J& H
  個位置是空但被判定為已經滿了的狀況)2 V% v; C" @7 H8 V1 Y# y6 \3 B9 A

$ \1 O( W" z2 k) A以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好) L' J, k  n; O
我想到這個方法除了電路會比較大外還有其他缺點
5 S+ H: d# D6 @5 J7 r6 m$ v* C* [3 e8 H2 C  T
1.不適合做成容量較大的FIFO
# {/ L4 z' B9 x6 n" s" Q8 G( K! p1 a. |7 F
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
2 F+ x4 x- T2 ?2 D* u7 a- x  Q9 s, S9 \! e
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
9 v& G! i1 @( s* g   會有較長的延遲時間,所以速度被拖慢了
8 G5 o- [8 R- j- S. J
/ A! ~  Y  b$ `7 t+ b9 o5 r謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好
; b- b# A  N* z$ m
/ b, N" e8 m$ A8 ]6 ?' S+ X; [
& Y1 [% c& ^4 R5 B( X1.5 ~7 ]: y. U& V. f0 l( c9 s
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"; S+ s: e. M3 W: c% W, c
  W: t0 f, ^7 a1 t' w
   不了解這段話的意思,可以在進一步說明嗎% f! Z9 O" \5 n8 H/ }, s

# w7 n, K8 G  @2.
' A* F* W+ g$ ^  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
* F7 Q8 u0 e$ x8 W  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會: R7 h! }( ]4 |* l2 A' i* C
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
' M9 |6 c6 o3 F' e  P  請問有辦法評估亞穩態維持的時間嗎0 w* f- W- S- A9 v  g- F) A+ Z
  " q$ ?2 R( X% K/ C  G
謝謝
% X/ [9 Z- f$ j' G0 t& T, \& c3 s! z$ v
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好& m' ?) O2 g( p% u: E4 }
關於 metastate2 M; P3 O$ d$ @5 t, w2 _6 Q" P
請問如果一個d-ff假設 clock頻率1 hz
# k% l& U1 d2 I7 V如果剛好發生metastate,metastate這個狀態6 f2 V% ]5 e. I5 M: E
有沒有可能有機會維持1秒的時間長度呢
. n) }& f: h$ H0 `  C2 ~  L0 i* T+ q" l3 Z) S
謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好; _3 _% Z$ C* d- J3 G
依讀取狀態來說,/RD負緣鎖住empty訊號
* }6 ]6 Q$ I6 R7 W而剛好發生metastate,且剛好時間超過/RD默波的週期; W; ?: }+ C* e' o( x
那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好. _& v' ]7 K" w
所以是否如我37篇所講4 {. b8 e  O8 l/ t
這樣的設計會有問題,因為無法保證發生亞穩態的時間$ }; S: A9 y; x7 ]
比/RD,16*BAUD週期短! g% T+ T0 ?6 q; U. R6 @7 ]$ A
' O5 _4 h" _+ N* s. S
那麼這個問題不就無法解決,因為empty可能再任何時間點
- a2 L5 Y; G3 L% b' s  ]發生變化,而/RD脈波也可能再任何時間發生
: y- _3 [1 i1 X$ h: h+ _# k- V- o  m6 d& K( ^
請問這樣的架構,有什麼方式可以解決這個問題
$ g# G1 k5 m$ H! i
( ^- ^  b, {, n2 j5 Y5 S; i) m謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表- w* Q/ P5 [# j0 f; G$ `5 C
在opencores內是不用註冊的, 直接以cvs下載就行了

3 v+ a3 z: ^, P9 m* H5 I7 Y4 [) Z  x' U
原來是要選cvs選項就能下載: @; Q2 `% X3 v
) y( ^1 k  B, k
謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-20 03:29 AM , Processed in 0.130517 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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