Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
各位 大大5 ~) W* i" V' o$ `7 d: [
請問有人知道uart 16550 的FIFO的電路結構嗎
( E8 _9 ]" `% s- s# g
/ p$ M2 X' c0 m& h, S' L( _0 `因為以前有用vhdl做一8250的功能
9 o5 h0 y* R# I( U. ?" I6 \- G想加上FIFO ,變成16550的功能
' c! C" o+ V. u- a) r所以才會想了解16550 FIFO的電路結構! N8 J; I, C; U9 y0 H
0 T. z4 O: j; _/ P, L
依照data sheet看起來似乎是用異步fifo
! a2 u, P" _) _& z( E寫入跟讀出fifo可以同時操作
' _* o: r+ x& i" E9 e. {+ i" x2 X2 {
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會/ L; H3 \  S/ ~; M
會發生full,empty,level trigger判斷錯誤,如下圖所示
3 ~1 [  G0 _$ @

評分

參與人數 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 發表
3 n/ J+ C. _. |( H4 G在opencores內是不用註冊的, 直接以cvs下載就行了
' s9 z, B' L2 \& E
. \$ i+ E. A5 A1 R' R' ^+ g5 v0 `
原來是要選cvs選項就能下載: [; a  m% f$ x8 N/ M7 R
* |+ E' k! [( B6 k2 [9 q
謝謝 版主 大大回覆
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, 看一下別人是怎麼做的.
. p, q2 n) h; C! q* V
8 _& I- K! B: o: }+ r另外, 你可以試著用自己的想法做看看, 把TX loop back to RX, 然後接個uC寫個程式測個幾天看看
4 [" q2 \( B; Q1 V9 N; t% O) h" ?+ e5 @5 M
也許這樣子會比我們在這討論的有效多了
43#
 樓主| 發表於 2007-3-23 13:43:22 | 只看該作者
您好
7 D3 g; O* F& O" p6 P" i( J- T3 j所以是否如我37篇所講
2 K0 H* K9 B) G& P+ Q這樣的設計會有問題,因為無法保證發生亞穩態的時間
# {: n- o: l1 A. f5 ]比/RD,16*BAUD週期短" R0 d* u, i) J

4 c; u6 p- v5 ~2 b( l- _; W: H那麼這個問題不就無法解決,因為empty可能再任何時間點/ x( ~* ^) ^- O& N3 f: u6 q
發生變化,而/RD脈波也可能再任何時間發生
( m1 Q6 C3 z# \* X' [4 Y8 N" D8 P* I6 v* r- C- ?
請問這樣的架構,有什麼方式可以解決這個問題
7 c4 |) V/ Q% m1 T" k! t# P! D2 x) O' l# L2 O3 h6 b* 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 | 只看該作者
您好
0 {6 L( k3 n5 N7 n% `依讀取狀態來說,/RD負緣鎖住empty訊號
% B3 G# D- Y" @. S+ O2 p而剛好發生metastate,且剛好時間超過/RD默波的週期, Z  v) O! o1 J- f
那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
6 R* y7 B" A% ?4 Z/ L. e. D* E% z
0 K4 ?( ^1 R: [3 ]metastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好% N. @6 u  R8 c6 ^; ]8 P' x, f5 Q
關於 metastate( P8 O7 Y) P2 g' ?
請問如果一個d-ff假設 clock頻率1 hz
; D# n. V. B+ E1 m8 n如果剛好發生metastate,metastate這個狀態) p3 N( \/ J+ l2 t
有沒有可能有機會維持1秒的時間長度呢
$ {3 t$ O4 P* ~, e, R- H/ o% d7 M) Z- M- b( U7 |; x
謝謝
38#
發表於 2007-3-18 12:55:01 | 只看該作者
1. 這是一個很直觀的想法, 全部判斷所有的bit所需要的and / or gate數目跟用multiplexer後只判斷2個bit 所需要的and /or gate數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看. 6 e+ F& f0 t/ ?- R
我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:& K% K/ M# w. }
empty = true if valid[WPTR-1]=false, R# b& H! ?& [3 N+ a8 i/ Z
full = true if valid[WPTR]=true
# I& V) L0 T' H0 L2 k! D+ }$ B可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
6 k( R: U2 U  y- X( x
0 A2 w2 V) y' s0 n+ c; z2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
3 }. D! |- M* B- T6 X- o1 \* s
) h- H$ f* |" \
8 T& n; Y* m4 q: Y9 Q3 Z! t8 B8 L/ \1.7 f2 g. @. L! {! J" ~
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"7 O9 ^# D. k' D
2 ^) S% [1 |4 Y8 {4 G
   不了解這段話的意思,可以在進一步說明嗎$ d) c" e/ M5 U7 v6 l' w9 c

! V, L/ K* A3 `+ `- A& o# |2.5 l6 D' ]7 v  z6 G
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間; y1 S! ^1 i& U% T9 t8 w/ }0 |
  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會8 _& U5 t0 i" h  S) z4 ~- J! Q. H
  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
3 {( ~$ w9 B4 K) x8 s. X7 J  請問有辦法評估亞穩態維持的時間嗎# E9 C" i8 k% X" L. F9 r
  
6 n" c; V$ F" b謝謝: c5 t. y% u# ]
: \: ]+ N" v0 E1 l
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
* A8 N" W6 r/ n9 V; A2 k我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大
4 [" u5 r7 G5 V$ C" Q4 m但是做ASIC時你會發現其實很小的, G% x. u( j/ L8 e3 _' \

4 `1 p, B/ K8 s
; s# y7 p9 s; b. ?/ N9 \2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響4 w7 B4 p+ j" L
這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了5 j) g, M" w2 @0 {0 B

- ~2 C4 e) e9 f3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
, u/ H8 ]7 w3 c- u( c9 M& E相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
7 m7 v2 e8 ^2 [! _/ u) U" e  b我想到這個方法除了電路會比較大外還有其他缺點) ]2 x( v( \' D9 {' w( K
5 A9 J2 o  m: z5 y% F5 C$ |
1.不適合做成容量較大的FIFO& S' z: s/ `; \0 w9 Y7 e7 {" C6 l: y) n
' ^4 s* Z- A2 k* x+ `0 _2 Z
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
  u8 q4 V  E- ]( O! n4 ^9 E- T" W# A/ ]% P- G
3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
# L/ k5 [. n8 l  j* Y$ d0 h   會有較長的延遲時間,所以速度被拖慢了1 _. q% d5 v2 C# n0 y5 Q: t
. |6 q* q9 v. I* u
謝謝 版主 大大 再提供了另一個思考的方向
34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意% v: {: {/ r% ?2 t. f% F
4 T- Y/ h& m4 y' X5 C
如果不管coding style的話, 這個想法很好
0 G# W  K4 ^4 J! {5 ]8 g, p# S8 ~- `  q* Z' T3 Y6 k5 Q" H) t
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.% h, I( V, n$ K* f
跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.8 b, b8 U3 A9 `2 W9 Q
anyway, 互相交流吧.
9 @  E5 C8 t8 Q8 i( O( g; H9 q9 K% W, p; r' O. Y/ e8 ~: k! x) B
改天有空的話來討論一下asynchrous circuit也不錯
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好, U+ a# p) e" j! c
最近想到一種架構,用來做FIFO不曉得可不可行
, I* V2 r- e- N如下圖所示
% J+ M  w$ g% M) q1 l( r  Y9 K* C! O; F
先就full,empty討論,trigger level不管
6 u- w! v6 ?! P( `$ A, ^  @讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間7 m. K% q) \% H& ~( Z* i
$ G; h0 i/ Z; W4 l7 a% Q
1.用額外bit(valid_bit)來指出register是否有資料寫入( C+ Y" m# `* \" o0 w' J+ Z
  當寫資料到FIFO則相對應的valid_bit會一起被設定為1
9 m( n$ R& h0 A& @5 q; s9 ]  當讀取FIFO,相對應的valid_bit會被清為0
* Y" t3 K( [& C5 p$ ^& p* z0 k2 G' U3 l: B( ~" Z2 @
2.wptr及rptr用bin count
' F$ F: o: A4 f) b, \7 W# ?4 S% X. a- m8 n
3.full將所有valid_bit取and,empty將所有valid_bit取nor8 E; E  O6 k  [/ b6 _' k/ T9 g

" p# W; S9 G' t2 J" G+ F4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
( t2 ]8 [$ h. V7 @, k  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case
+ f! w1 z: J" G) ~2 V. C0 `  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已% x  v8 i  @! N4 t+ C' j& m* \) {, D
) ]% k  T1 T# w( u, S' q  c
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
! D( L9 K; n: e* C  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk4 N. m# g# F4 I# t6 y$ a( }
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
( m- |1 K. Q& @  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
* y4 z4 t* t: m, q4 d: s3 R  個位置是空但被判定為已經滿了的狀況)
# @5 ~2 A0 C2 b( u- P7 \; o7 k+ A
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多: `9 K2 D& C3 ?8 N! j) L; Q6 t9 G: S$ _
不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見+ N7 Y* M$ ^# F* g( M
不然的話就變成只有我們二個人在討論了...0 x+ r7 I4 r: n$ q/ {( O
+ j& ?  {" }! k. `. F% y, F, Q$ o
過幾天沒人回時我再找個時間來回吧!
31#
 樓主| 發表於 2007-3-12 21:33:33 | 只看該作者
版主 大大謝謝你再提供這些參考的資料
' o7 @7 l" G. X8 D. g9 d我會好好的找來研究看看) f: U  A' k/ f2 L1 m% j
1 o3 R9 W: l; a. q+ u! K
我本身目前不是從事電子相關行業,不過對於6 G2 B/ g- k1 Y
FPGA/CPLD,HDL,數位邏輯設計及單晶片等: B! L! |7 [9 A+ ~5 F, b
都很有興趣,之所以要寫16550 code主要是想
+ J# o; b: X3 G7 D9 O! g) S# W挑戰看看自己能不能寫的出來,不過似乎沒那麼容易- I( M/ V, P; q1 U6 h% J+ b/ s

  a& a3 X' @* i! y5 B" X# qFIFO這部分我有上其他討論區問過,可是都沒人回覆
1 M$ F$ ?7 a" m% x! r! S感謝版主願意跟我討論這個問題
0 d) o  l; H' r6 f
* y% R: y+ [: o) G, p  f& U再次謝謝啦
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-16 01:43 PM , Processed in 0.131017 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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