Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
各位 大大
7 o- S" n* l% t請問有人知道uart 16550 的FIFO的電路結構嗎& Z8 N/ E3 m, ]' S, y: j

4 z# R/ {# l, Q( w6 {+ y因為以前有用vhdl做一8250的功能
' @, a- A9 y/ E: F想加上FIFO ,變成16550的功能* U/ y: P/ f' s; L7 N
所以才會想了解16550 FIFO的電路結構
$ H6 x' R" j5 O! ~8 E: C( Q
& Q  A( V3 {! X; o% u依照data sheet看起來似乎是用異步fifo. @4 D% ]/ q  k/ @! A
寫入跟讀出fifo可以同時操作7 E4 \, \: E# x, d3 p
$ l$ s  `7 e9 v# |
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會
$ t) x+ `6 |7 f- Z# h0 X會發生full,empty,level trigger判斷錯誤,如下圖所示/ W% a/ s5 j2 s9 I5 e/ {

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
49#
發表於 2010-8-15 08:33:22 | 只看該作者
不知道有沒有類似過慮器的架購,謝謝!!!!
48#
發表於 2010-2-1 10:03:59 | 只看該作者
好深奧的一堆問題...有看沒有懂= =
47#
發表於 2007-4-10 17:18:22 | 只看該作者
你找找這篇文章,simulationg and synthesis techniques for asynchronous FIFO design ,by clifford E.cummings。這是一個很好的文章,肯定對你有用的。資料不在我身邊,所以不能帖上去了
46#
 樓主| 發表於 2007-3-27 19:30:40 | 只看該作者
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表7 h4 E8 c5 L! m* s) a% G. d% z. J
在opencores內是不用註冊的, 直接以cvs下載就行了
" P: B3 K' `8 R3 c7 R* S7 c% H# T
' A: |) o' H& k
原來是要選cvs選項就能下載4 N/ \% N' R2 G- j7 f6 L% b: I

8 N. e4 P3 p7 g- }; {9 q2 ^5 H9 U謝謝 版主 大大回覆
45#
發表於 2007-3-27 10:46:51 | 只看該作者
在opencores內是不用註冊的, 直接以cvs下載就行了

評分

參與人數 1 +3 收起 理由
addn + 3 感謝啦!

查看全部評分

44#
發表於 2007-3-23 14:33:38 | 只看該作者
就依我看來, 我們二人討論的這些篇幅內就可以湊出答案了, 給你一個建議, 你可以上www.opencores.com下載完整的16550 VHDL source code, 看一下別人是怎麼做的.. h- ~5 M) t6 h% r, X

1 G$ }- }5 N) ^8 I% Z7 o* z另外, 你可以試著用自己的想法做看看, 把TX loop back to RX, 然後接個uC寫個程式測個幾天看看7 M- X: K0 a, |8 T- I9 d
1 H* Y# B$ U9 ]/ h
也許這樣子會比我們在這討論的有效多了
43#
 樓主| 發表於 2007-3-23 13:43:22 | 只看該作者
您好
/ Z4 Q/ k+ N4 j* ?! n所以是否如我37篇所講
! N) k  o! K3 l1 ^. ^這樣的設計會有問題,因為無法保證發生亞穩態的時間
  n5 w' M6 j6 c比/RD,16*BAUD週期短
3 J; C; c7 K* O( p* t5 W4 }; k6 t* Y7 t: X( ?, k7 @3 D7 I0 a1 @
那麼這個問題不就無法解決,因為empty可能再任何時間點0 P( o: `; S* Y
發生變化,而/RD脈波也可能再任何時間發生4 O/ X5 a; E' |

6 J: w- D- H2 p' j請問這樣的架構,有什麼方式可以解決這個問題1 ]& `' V  v% x: e1 [
1 Z6 }2 O( S' c& m  B/ `
謝謝
42#
發表於 2007-3-23 11:42:09 | 只看該作者
這是因為2個clock之間所造成empty信號不滿足於那個DFF的setup time跟hold time.所造成的. 所以問題不在於那個DFF會輸出unknow state, 而是如何提供滿足於DFF setup time and hold time的empty信號才是, 如果是我的話我會回到引起問題的地方找答案, 不會去看那個DFF的輸出
41#
 樓主| 發表於 2007-3-23 11:02:18 | 只看該作者
您好3 a7 N  e2 L* H5 M/ i' `9 J
依讀取狀態來說,/RD負緣鎖住empty訊號
/ H) l% ?0 L3 [3 W+ R$ ?而剛好發生metastate,且剛好時間超過/RD默波的週期# f0 H7 Z8 P: D1 m) m
那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有& G; h5 w6 H9 y3 ~; p% o6 c+ y

, N9 z: \! s7 K4 L& H& N- Zmetastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
4 z8 W2 k5 S1 v- ^# I0 Z$ A: k關於 metastate' r$ P- R: ^8 X; x& P
請問如果一個d-ff假設 clock頻率1 hz. z6 N. f5 ^- u% a
如果剛好發生metastate,metastate這個狀態3 T0 S* v: r0 D4 X& R
有沒有可能有機會維持1秒的時間長度呢
8 w- Q6 t6 E1 F1 A) L
% ]4 x1 Y# O- o* y謝謝
38#
發表於 2007-3-18 12:55:01 | 只看該作者
1. 這是一個很直觀的想法, 全部判斷所有的bit所需要的and / or gate數目跟用multiplexer後只判斷2個bit 所需要的and /or gate數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. 9 O) j! f+ Y: z
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:
6 m: O9 l6 [' s1 M" M: X. q1 ^empty = true if valid[WPTR-1]=false
) X6 Q( H6 N/ ?: t6 j( ~0 |full = true if valid[WPTR]=true
6 j  n. w* D# r  M, f可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
* B% ~! C: G7 k: G$ X9 p7 x4 ~( `% Y/ N" ]
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
8 v" ]8 b( e% g0 {# a5 l. R* S; n1 H. ~' Z% R, w4 h4 j4 |
  f  w0 y# q) m+ J
1." m! j" N3 |' i; K6 j
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"' E; V* E- i) j4 a$ r

  r8 I. r3 ?* e- e/ Y   不了解這段話的意思,可以在進一步說明嗎7 ]% ]6 ^1 h- ]. p2 U9 }
1 n3 c" j( J7 c. z+ P& N& }
2.9 b9 V( T. U" n2 Z0 p
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間, R1 E8 s, t4 Z/ y  B3 y. t/ Q
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
& o0 X& F4 M0 d! p9 ~: v  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
( X# z1 }3 t" v' T$ Q9 o: Q/ L  請問有辦法評估亞穩態維持的時間嗎
1 e+ I" ~8 z( h  # Y6 p( X. y- T  \$ o" `- `& N
謝謝
6 a! F- v3 d3 z$ O6 N
9 R  V/ [' u" X) z9 v3 o& q[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO9 F# ~6 ]* G1 _$ `3 `" G
我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
# R  K/ T7 r! J5 x% a  J但是做ASIC時你會發現其實很小的% O- T3 c. y2 K; h: }4 |4 b/ |: a
9 f0 d. ^; ^5 s7 b
% e, r) H6 b. n# d: c
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響2 @* e9 }& P. I% E! `
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
# v( r/ E/ z) w/ q9 V, r
0 Q4 r! d% ~* [# P3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
. g1 D( Y- i) E相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
' q1 }% T" ^. z! u3 L* e我想到這個方法除了電路會比較大外還有其他缺點& R7 t/ N+ K+ ?6 }- g+ ]' U

9 t. m# @1 n. h3 }5 y1.不適合做成容量較大的FIFO* J7 j; k) ^% o- n! w1 W! |

5 M' ?# L/ P% B/ M9 ~) }2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
: R  q5 N' b( s3 b$ R* I% B
- [3 d0 s5 r; n. I3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣: Q8 v, i7 l) M# a: n" S" S
   會有較長的延遲時間,所以速度被拖慢了  p/ O' U: u8 G  D* G+ i, z
9 G' S4 X. |, f2 P, J8 {9 B9 M
謝謝 版主 大大 再提供了另一個思考的方向
34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
2 T4 g( _8 J1 ?6 @& _" D0 Q0 C) m, y
如果不管coding style的話, 這個想法很好
( _, U" w" w5 |5 ~6 F
" L! r, Z1 A1 [; y) J& }; W$ V6 q& v9 v相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.$ s7 A( O3 S: _! k% x& d
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.# ~! x# g" Y" S
anyway, 互相交流吧., t4 R9 u' `( p% P4 `- N

5 `: _( x7 q  B+ `3 l9 Z, _" F改天有空的話來討論一下asynchrous circuit也不錯
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
9 `" ]  l. A3 A' X" Y& G! @最近想到一種架構,用來做FIFO不曉得可不可行: t3 A/ U! x$ a1 o
如下圖所示
8 U; d. w+ \/ q# {; O
! H7 v2 k1 G  P5 G  c! R$ ]先就full,empty討論,trigger level不管! f: C+ o' ^4 A5 }( {: p
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
4 ?2 _# l2 B/ ]" T9 R* b; p( X" m! r* n
1.用額外bit(valid_bit)來指出register是否有資料寫入9 e6 v! U4 \; P/ j# V" v
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
. ]; D5 M2 E1 T4 ]5 o  當讀取FIFO,相對應的valid_bit會被清為0
: V& k/ v& t% E/ {% [* q& @$ W1 [0 c3 v' ~6 p
2.wptr及rptr用bin count7 x- j8 L  p* H3 Z$ `* Y
* i) Z" V0 z0 r5 s
3.full將所有valid_bit取and,empty將所有valid_bit取nor7 Z) D3 c3 W9 Y

5 p; v4 @( v) k' m) o. r, m4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時! v+ a0 ]2 i0 }6 ]8 G
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
( e+ F; J3 D# Y6 x' Q1 Y  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已
) s. t# D$ R5 U% L& ], s+ a! k  H4 N4 s! e: |6 N: M+ j7 w
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作# L6 y5 P9 p( u" K8 @! W+ F) H* g6 V9 w
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk1 S  X. o& d3 T
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接6 g6 u6 F: n5 I6 e
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
7 o* L# k  }* Q( u  個位置是空但被判定為已經滿了的狀況)* {+ t  o/ K  O' x& g
# H4 k3 r" L1 D  T* q* B, w
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多+ F" v" q" r* a" R" y8 ^
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
3 f" `% E  {% n: A/ T3 d! [( X不然的話就變成只有我們二個人在討論了...( ~2 G4 e7 ?, L$ j+ |+ V
# X+ Z6 n+ I4 I! q8 P/ `0 G% }
過幾天沒人回時我再找個時間來回吧!
31#
 樓主| 發表於 2007-3-12 21:33:33 | 只看該作者
版主 大大謝謝你再提供這些參考的資料( J* ]) ]9 T. I# u- ?9 ]9 @6 L
我會好好的找來研究看看( q5 A, }0 ~. x/ Q: V/ ~
( z; A& C1 }+ X! K- Z  Y
我本身目前不是從事電子相關行業,不過對於
8 _: c( f/ Q5 F) |FPGA/CPLD,HDL,數位邏輯設計及單晶片等
* t9 _' j  M. h9 ~8 e% K都很有興趣,之所以要寫16550 code主要是想
# b1 Z- W" G  x挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
0 N: Z4 w$ O8 n' X
6 D5 L/ |% a0 l: J8 t5 p, SFIFO這部分我有上其他討論區問過,可是都沒人回覆
- C' h$ c) T# F! E' D感謝版主願意跟我討論這個問題
2 C% x6 H$ P+ o! x4 t7 p7 t+ i5 Y3 `6 C- l- \$ x' c* J
再次謝謝啦
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-18 10:07 AM , Processed in 0.135517 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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