Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
各位 大大7 O& Z' M4 K' I1 U) \
請問有人知道uart 16550 的FIFO的電路結構嗎
) z4 y2 Z3 e/ q$ z' \$ B5 Z
+ Z9 W, {, Y8 X/ s' @" L+ g因為以前有用vhdl做一8250的功能
7 ]7 j* N, ^0 c0 c" d* M想加上FIFO ,變成16550的功能0 J! t( i& `3 J0 P9 I
所以才會想了解16550 FIFO的電路結構
6 z+ H9 S/ i% O. n  X& V% p2 |8 y. z' c& Q6 _$ E
依照data sheet看起來似乎是用異步fifo4 d3 t5 ?5 |& _4 o, c; ^
寫入跟讀出fifo可以同時操作
- R7 G" R# h3 Z% P% I
+ d( v/ A) |9 _, H可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會/ k6 t; D/ ^: Q* v
會發生full,empty,level trigger判斷錯誤,如下圖所示
  C# S* }( N4 t3 t) R

評分

參與人數 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 發表
$ X8 ?# W3 I, b5 C0 X& ^! ]: Q在opencores內是不用註冊的, 直接以cvs下載就行了
1 P4 k! z$ r; Z6 A1 s. Y1 m

/ E- }. w5 n0 j; R" g& T原來是要選cvs選項就能下載& l, U# b( E% E+ a! T- o& e5 T) j
! P- }% u6 v9 W9 b- p* w8 O7 E
謝謝 版主 大大回覆
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, 看一下別人是怎麼做的.
+ L9 k3 l, x6 h# H' j+ @3 x* p
" @  }: j2 L1 R另外, 你可以試著用自己的想法做看看, 把TX loop back to RX, 然後接個uC寫個程式測個幾天看看
6 r1 M  e5 A6 ^$ I7 h
6 x9 O9 |( g* Q/ r: H7 A8 N" f7 w也許這樣子會比我們在這討論的有效多了
43#
 樓主| 發表於 2007-3-23 13:43:22 | 只看該作者
您好' n! I% F( X7 u: L
所以是否如我37篇所講: ~! S: ?3 p- A3 w7 f: ?% ?5 Q
這樣的設計會有問題,因為無法保證發生亞穩態的時間
9 o  e6 Q! N. S比/RD,16*BAUD週期短
. a+ D, \% W. _/ n* q* L! F; j
那麼這個問題不就無法解決,因為empty可能再任何時間點8 N" d9 I  r) Y1 N: ?6 d& ^; W
發生變化,而/RD脈波也可能再任何時間發生* g0 L  ^3 J6 D5 F

3 n8 V6 x4 S& U請問這樣的架構,有什麼方式可以解決這個問題# {3 q/ Q  V- Q) w/ a5 L" F
8 R' e+ y9 ?5 |2 p7 A* W( z/ Z
謝謝
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 | 只看該作者
您好* G" x. |% A# u2 o% v6 k% N" P# U/ y
依讀取狀態來說,/RD負緣鎖住empty訊號! t$ q: S" ^$ |3 B& A
而剛好發生metastate,且剛好時間超過/RD默波的週期
/ b! d4 O  u; Z) ^7 N那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
40#
發表於 2007-3-23 08:41:59 | 只看該作者
答案是沒有
+ e' p7 @! x' v0 v' l& l  ^
) s6 R0 ?( [  X( x( Ometastate的時間長短是根據信號跟gate delay所得的, 也許設的計很糟糕時會出現us, 不然的話應該只會有ns的狀態
39#
 樓主| 發表於 2007-3-22 22:36:15 | 只看該作者
您好
0 L4 T( @7 W* H7 u% d關於 metastate$ e# K' [2 _8 Q  Q- N8 v0 i
請問如果一個d-ff假設 clock頻率1 hz
- d+ Y* u: w9 B8 \8 y. t8 u如果剛好發生metastate,metastate這個狀態
* Y2 O" Y, B* R0 J有沒有可能有機會維持1秒的時間長度呢  D+ z0 [) z$ I" }& G6 Z0 ]' l& V

! e( s- Y. S  s3 V2 j0 b7 r) `謝謝
38#
發表於 2007-3-18 12:55:01 | 只看該作者
1. 這是一個很直觀的想法, 全部判斷所有的bit所需要的and / or gate數目跟用multiplexer後只判斷2個bit 所需要的and /or gate數目, 可以評估計算一下, 看哪個比較省, 上回我也沒算, 你可以算算看.
1 w3 x) Z+ ~' V( D* D/ T我舉個例子好了: 如果WPTR永遠指向下一個空的位置的話, 那麼empty/full也可以如此表示:5 K  {4 A- E1 F) v7 f1 P
empty = true if valid[WPTR-1]=false3 S6 K4 U0 t% m8 N
full = true if valid[WPTR]=true
7 k2 i! F4 K* \/ F5 k" @) K& c% l可能還有其他case需要考慮, 畢竟設計的方法不是只有一種而已
+ K$ \/ o# P6 g% N4 H3 o* l$ W3 t: g& n* e
2. metastate是一個random function, 我們不需要去評估metastate的時間有多長, 我們只要避免在出現的時候產生錯誤的輸出即可.
37#
 樓主| 發表於 2007-3-17 19:38:33 | 只看該作者
您好
- l& F- B# E( G  x9 E. k# D1 A0 w. ~% P

; D5 M7 g& |; _1 ~0 O6 F$ f& G1.
' ?* n8 w, u, R' r: g( P   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
- F3 Z* s- U! {9 d0 t: W
3 ?3 x+ `1 {* E) |+ n: j   不了解這段話的意思,可以在進一步說明嗎. W! n: _% [) ?2 C: o

% y1 F4 H- \( [. i2.
; e1 f) S7 R  M& [7 Y$ R3 W/ S  l  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
7 z% ?/ Z: q$ u; P  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
# R; l' z5 D2 d3 S4 p' Y9 s; j9 B  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了
8 R8 d0 @$ ]! c* ~. X9 }; k  請問有辦法評估亞穩態維持的時間嗎
: E; V& b# _' E: v. t  6 |/ o; _$ z& b2 k1 z
謝謝# P8 h# Q. @* ~9 `; |/ D
) Q1 s: a$ ^) e, f& N. w' r
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
36#
發表於 2007-3-17 10:56:27 | 只看該作者
1.不適合做成容量較大的FIFO
8 Y" j7 x) _& P) W. Q我覺得這部分是OK的, 如果你是在PLD上驗証的話會覺得硬體很大' P/ K0 j5 B" H% g( N" B
但是做ASIC時你會發現其實很小的
# C% L& n: W; m7 Z) ~2 \1 J  h$ t1 h$ K- A& Y* U# |6 N

5 W8 E, t( Y% U2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
3 ~; a- U) p2 I' ]% V; j1 M這些valid_bit如果跟著某些信的edge反應的話(latch), 問題會比較小, 不過我覺得你本來就會打算這麼做了
% T$ V8 u7 E/ g/ A1 h! Z# j# l  U+ w, J, w/ O
3.tigger level會用到連續加16次的組合邏輯tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣會有較長的延遲時間,所以速度被拖慢了
- ?3 ~  \% l4 v相同的, 用ASIC製程做時也不會有你講的這些問題, 另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)至於判斷其他的 如flag4, flag8...可以想看看有沒簡單一點的方法.
35#
 樓主| 發表於 2007-3-16 20:13:13 | 只看該作者
您好
8 L+ P; v+ J7 Q! K2 A我想到這個方法除了電路會比較大外還有其他缺點
" C( T# k/ e+ H7 q7 r# C& F3 L" x: F& l( ~* K
1.不適合做成容量較大的FIFO3 b; ?( D+ ^4 D2 }

+ c0 u0 K$ j  C5 h( a2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響
' W! s* s* [7 O3 ~
1 V" ^/ U! F$ ]3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣' c, J4 p" M9 v; X8 }' z' b3 P- {
   會有較長的延遲時間,所以速度被拖慢了' B$ x% [8 [* Y9 v' X

# A; e1 J: J1 {) ~謝謝 版主 大大 再提供了另一個思考的方向
34#
發表於 2007-3-16 09:28:56 | 只看該作者
看起來是個好主意
$ c" p; w6 \, s/ M' t
$ U% c* M6 q7 X如果不管coding style的話, 這個想法很好! z) S2 H- r5 _! u7 R) s. Y
1 t4 z9 l6 e9 s1 l& Z8 H
相同的, 如果不管coding style的話, 我也有另一個想法一直沒貼上來, 就是使用dual edge在/RD下降綠去記錄狀態, 在/RD週期可以讀到穩定的值, 另外在16x baud的上升跟下降綠也分別去update狀態, 有需要的話可以使用2組buffer length給二邊判斷, 我想這個方式也可以解決你之前問的3個問題. 不過還真的非常的違反coding style rule.
6 l2 d3 D* V+ G! {0 |" h. P- p8 j跟你的方法比起來, 我的方法所產生的硬體似乎小一點點, 但是你的方法似乎比較簡單點.
; p( ^6 b% R4 N) ^% B5 [- Canyway, 互相交流吧.7 w; N9 q+ g+ r% s4 H
) \* ]* Q+ W1 {) w& k9 G
改天有空的話來討論一下asynchrous circuit也不錯
33#
 樓主| 發表於 2007-3-15 23:46:35 | 只看該作者
您好
! C, k$ h  d3 D' u最近想到一種架構,用來做FIFO不曉得可不可行( W: f6 {5 Z" q
如下圖所示& V/ [' o1 ?: v+ s. d) d9 h
; D' k- t6 v1 x
先就full,empty討論,trigger level不管' c8 d0 T' J& e$ h6 @( y1 n/ i
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間6 @' W4 ^! j5 ]( E8 _2 o
0 [; [% h7 q& m9 k  b
1.用額外bit(valid_bit)來指出register是否有資料寫入
5 C* D% s6 r9 [  當寫資料到FIFO則相對應的valid_bit會一起被設定為1( K$ u. w( V: o$ V9 ?% X8 u
  當讀取FIFO,相對應的valid_bit會被清為01 @3 ?7 w7 s4 B# z
) {1 \" u# b: b4 p. U7 R
2.wptr及rptr用bin count
  y& V$ S( o8 O" @) _' J% v; e4 S6 Z3 V; s/ w" w' A
3.full將所有valid_bit取and,empty將所有valid_bit取nor
3 W* A  O0 I; O
2 K6 R" w' _5 y4 h1 U% c4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時
4 H  L' U. {+ x  E  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case8 |7 _/ c+ g9 H4 {5 ^# A
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已9 J1 }1 u! q  v* r: n5 c
' e, b1 {' l4 T4 N& z4 k. W! S
5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作
. v+ B" }9 i% S8 V5 r1 ^: L7 ?8 |  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk5 l8 D; n+ H) G6 A0 w  O
  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接+ S) ]4 C0 Z3 G* c; Q. ~% I
  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一3 s0 K, n7 C% g5 Z4 }
  個位置是空但被判定為已經滿了的狀況)
% Q1 x+ J6 V& Z9 M
# i4 P, \5 ^# I! k0 O# D$ E# r以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

32#
發表於 2007-3-13 09:31:02 | 只看該作者
SORRY...上次回時也沒想那麼多
& y+ Y3 F' `& M# q不過那些問題總有答案的, 希望各位潛水的版友高手可以幫忙出點意見
5 u( c7 _4 d: ?4 B8 K/ b( U, f6 {不然的話就變成只有我們二個人在討論了...
& p3 b! {0 V* f' ?2 R. ^/ a* c" }% U& K) V
$ J1 E4 X  J, C過幾天沒人回時我再找個時間來回吧!
31#
 樓主| 發表於 2007-3-12 21:33:33 | 只看該作者
版主 大大謝謝你再提供這些參考的資料+ u$ h8 I' i8 @9 [9 S# q1 H; x
我會好好的找來研究看看
# `$ L8 }- S% k4 Y6 H( [  P$ L7 B- N6 l* M8 P2 i2 v
我本身目前不是從事電子相關行業,不過對於0 l# m: A8 v7 i; s
FPGA/CPLD,HDL,數位邏輯設計及單晶片等
+ Y/ O5 ?, w0 p6 M  _5 Y都很有興趣,之所以要寫16550 code主要是想, u2 g( M4 ~) x: }; _4 R0 Z& E
挑戰看看自己能不能寫的出來,不過似乎沒那麼容易
( ]& T/ |" ~8 P4 m1 m1 i! N( y* \, {, B: l
FIFO這部分我有上其他討論區問過,可是都沒人回覆
$ ~; h! @5 T2 ^3 E- w* Z9 x  v感謝版主願意跟我討論這個問題9 W% D5 X  b5 ?$ h# t
; I0 x- b# t; ?& Q
再次謝謝啦
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 02:11 AM , Processed in 0.134017 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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