Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2007-3-1 01:39:00 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
各位 大大
' u& ]1 L9 l( H2 f/ x' t請問有人知道uart 16550 的FIFO的電路結構嗎
8 ~/ C$ I, C: b& s. R& K9 \! c' w6 ], x5 b. `
因為以前有用vhdl做一8250的功能
4 ^9 X6 I' p4 ]想加上FIFO ,變成16550的功能
4 I# U7 K( W: ^8 A: {所以才會想了解16550 FIFO的電路結構
* _8 n8 F6 z0 w/ T  Y
2 u6 N; J& w" l6 E依照data sheet看起來似乎是用異步fifo/ |1 L( e' q3 n
寫入跟讀出fifo可以同時操作
. x; a; ?* R6 C, |. B/ x/ Z  B# @# E1 C7 u  _3 k9 Q' }
可是我想到的fifo結構如果同時寫入跟讀出的話,就有機會( A2 T1 C0 ~: G, V
會發生full,empty,level trigger判斷錯誤,如下圖所示5 \9 z8 J7 Y' b' B

評分

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

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
 樓主| 發表於 2007-3-2 01:16:05 | 顯示全部樓層
您好5 G) C5 j* H8 |3 W/ w( ?( x' S

* K% S4 u! ?4 R感謝版主 大大的講解,提供解決方式的參考
) M5 Y$ V9 i5 ^- _8 r# n8 p/ A' q& }+ t' D
我這邊還是有一些問題; q% ?6 s: q  S
( A% R; d& _# b2 Y
1.& X; f! {: a$ o, ~- C( f3 N
RX FIFO
; ]0 C9 V: m" ^: nwrite_ptr變動對/RD empty的影響就如同大大所講的, f1 O) q3 l1 Z% _+ H
cpu對於錯誤的empty只是延遲下次在來讀FIFO資料,並不會
8 U3 T- x6 F- h" k2 g6 A/ ]  U造成嚴重的錯誤) m# _  [, \. s/ D2 F
可是
; x  d% Y4 B# tread_ptr變動對於寫入FIFO full的影響就很嚴重了& i: V: R  K; b; I1 L, |: |
當要寫入FIFO時誤判FIFO 滿了,這時就會造成溢位的動作/ _2 b/ R% V9 D" _( [3 }

1 G8 x& d- l6 M$ `2.
- C' m) q4 \; T+ Q/ ]$ n; U( P16550有TIGGER LEVEL功能,可以設定當FIFO收到1,4,8或14筆資料時1 O( b% G! w: u/ V% o3 K
去觸發中斷輸出腳INTR: H; z8 B! D, X' a: f
這樣勢必要有TRIGGER_LEVEL_FLG邏輯來指出是否符合條件  l7 ?3 I/ {, Q0 W7 M; v6 u
這TRIGGER_LEVEL_FLG也要根據變動的write_ptr和read_ptr來決定4 M  G* w5 Z' T) w, i7 u
這樣INTR輸出不是就有機會產生毛刺在write_ptr和read_ptr變動時7 A4 r4 r6 h# v! V8 z/ W
那要怎麼消除這毛刺現象呢: ?/ t2 s- X* [* F+ c. w3 p
! x$ Z0 R: y, f! p+ |5 O
3.0 m$ n. R' K  m( M4 H7 K. L
如果加上handshake的話,那時序動作可能就會跟16550有些差異了

評分

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

查看全部評分

3#
 樓主| 發表於 2007-3-3 11:53:27 | 顯示全部樓層
您好
7 ]- V6 C$ H; t2 L, p. y8 l0 G; ]$ C感謝版主 大大的建議及經驗分享& q! ~& m. d; R! d4 P
對於數位設計的確讓人傷腦筋
2 ^7 N% e4 q* f9 @" e有一大堆的情況都要考慮進去) e; `: ^5 V4 j
需要發很大的心力在設計電路的穩定性上% z* s, ]1 c9 _( ~$ e0 ]
* K! p( m$ e: @7 A4 ~8 s! i9 l
大大可否對於handshake在這裡與FIFO搭配使用! e& m: G6 `: `$ h5 W7 o
再進一步說明一下呢5 @6 W' }6 W% U
8 ]9 L$ K; r7 z9 j3 ~, k0 ]
我的想法是這樣不曉得對不對9 x' L. o, G4 n, y5 W% d, N, f
當要寫入FIFO前先通知/RD電路暫時不要改變read_ptr讀取FIFO8 W2 S) ?7 Y. [* j$ N- a4 K0 ]! A
寫入FIFO後再通知/RD電路可正常動作
. S! g, A5 U0 k反之讀出FIFO對於寫入電路也用一樣的機制
4#
 樓主| 發表於 2007-3-6 11:52:05 | 顯示全部樓層

回復 #7 tommywgt 的帖子

您好
4 x& z& [: v8 w- L& h! ]/ a
/ O8 d# N- L- e) R可是這樣還有問題我搞不懂' I( A+ |( p; C$ T& V) b. P8 E
! a! `! w9 @- {0 O# L. n8 A" M
  寫入端有16Xbaud可以當clock可以達成交握動作% y% U9 J4 Q2 J
  讀取端邏輯,沒有讀取端的clock只有/RD脈波5 X) I( u. w- w% [9 d9 u) ^3 L
  當/RD來時就表示一定要讀取,而且沒辦法
9 x8 p9 `0 X  A' y: \  產生及判斷交握訊號
5#
 樓主| 發表於 2007-3-6 20:06:05 | 顯示全部樓層
您好- [1 ]6 v) l: o3 H: U
, X* T0 w& V3 {0 {' U5 l8 s+ }
這部分我實在想不出來  v7 v4 R$ C) t5 q
如果版主 大大可以提供參考例子,那最好不過了) O* }) q, L1 a' K$ O0 @& m0 F

. L4 c$ Y% R7 z  B5 P, |# L4 L" U謝謝
6#
 樓主| 發表於 2007-3-9 10:23:42 | 顯示全部樓層

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦
! R* ~" q4 i: G' ], B6 v: V- h, L. x: H3 H
我有找到一些對岸的異步FIFO文章,有興趣可以參考看看
3 ?; C* ~$ U/ q5 @  b& Q; Mhttp://www.21ic.com/news/html/70/show1661.htm
% \1 m/ q% Y) f& {0 x. y& Ihttp://blog.21ic.com/user1/1202/archives/2006/23787.html: V  @" A9 _4 ~- x2 {5 X/ [2 ~
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率
1 n; [" ]+ a2 R) Y; x可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷0 C' p9 K. N$ b  v  z+ f; q% e
碼後還是無法百分百保證正確呢
* G- \9 Y1 V2 m- t( _4 Z
& A$ K7 u7 C9 g. W- e4 i還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
7#
 樓主| 發表於 2007-3-10 22:53:27 | 顯示全部樓層
謝謝 版主 大大提供的參考範例% ]6 r6 ]3 w3 L2 w% h' L+ u6 K

" v4 ~4 v! Z, H; E$ \7 }: W將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
( |; J: N( r5 y$ Q. a0 h. `; i0 y' L; n" ]: v
1.
& |* D3 Y$ k3 K  Z; V) I   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"
) c- m3 O$ e) _3 i7 k; Q   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生/ a- j" u+ k  ~
   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一
1 W% f! h. o9 Z2.
1 u9 I# a, I: @: r$ v" C2 ?, u   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高1 D+ ]# O  ~$ B
   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出" Z4 ~% g" A5 q0 s
   資料讀取週期RC最小280ns
9 J3 H. d! r9 _2 ~! m3.  X, E8 w0 D# [
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期' n: I" D. f- D4 d& Z2 C, w
   小小於wck週期的case,會有問題,以trigger level造成的INTR來講
* p. W% q6 z# W/ @1 b" t: j; Q   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間
, ~% k" u7 M" N4 F   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
8#
 樓主| 發表於 2007-3-12 21:33:33 | 顯示全部樓層
版主 大大謝謝你再提供這些參考的資料, A0 W( w5 D, t( A
我會好好的找來研究看看
4 z" K, W# A1 {
  ^7 J$ R/ m6 w, `, k! u, ~8 I我本身目前不是從事電子相關行業,不過對於# |7 N5 f# ]" d& p
FPGA/CPLD,HDL,數位邏輯設計及單晶片等/ {7 d# I% g4 B4 t
都很有興趣,之所以要寫16550 code主要是想
+ Z, d5 a6 V6 @, X# r挑戰看看自己能不能寫的出來,不過似乎沒那麼容易" x; B# R/ L2 B9 k3 z
( `2 I/ W6 D& E
FIFO這部分我有上其他討論區問過,可是都沒人回覆
4 J* u+ S7 P; C* u感謝版主願意跟我討論這個問題+ t" V: P) O& `" K9 k3 u1 ~! D
1 N  Y1 w9 v! \& N4 ^" F! l
再次謝謝啦
9#
 樓主| 發表於 2007-3-15 23:46:35 | 顯示全部樓層
您好
5 [1 A: G, x: y最近想到一種架構,用來做FIFO不曉得可不可行
  P$ V7 u& z, ~; g+ B+ n如下圖所示
, s$ l( Q! W$ M' i: H
6 _1 q. r8 @; k1 n: s先就full,empty討論,trigger level不管3 g: y3 l1 C: q" f
讓/RD脈波,16*baud rate週期大大於亞穩態出現的時間
7 e: K* P$ j" i3 U5 \; ?4 O( v3 |/ ^2 ^3 k" n1 u
1.用額外bit(valid_bit)來指出register是否有資料寫入
2 A) W% t* F1 Y. ^4 o9 a- C( V+ M. u  當寫資料到FIFO則相對應的valid_bit會一起被設定為1) e* H, s) c- x- {* B  V1 M
  當讀取FIFO,相對應的valid_bit會被清為0
' P3 _" v  o4 p) @* }
! [# Y8 s5 J0 P) \2.wptr及rptr用bin count
. K9 {1 D  N5 h) v+ j$ v$ s! g! u
/ ^& T  A) q' j3.full將所有valid_bit取and,empty將所有valid_bit取nor
8 m9 B" \% j" u. [1 h% z/ D6 b$ @2 D. Z* f1 n
4.讀取狀態empty時,/RD下緣將empty訊號鎖住,如此在讀狀態時$ f  u9 q4 O* ^% M5 ^" D) v
  worst case(有一筆資料在FIFO可是讀到的狀態是空),這種case0 k) g# P8 F- L3 c8 r8 j& o7 F0 R
  出現的機會不會太頻繁,就算出現也不過延遲一個讀取週期而已$ `* {! C) H- M6 ~

" l, z& R) ~/ U  N0 @5.16*baud rate下緣鎖住full,接收狀態機16*baud rate上緣動作1 ?% {4 x0 {( e; k6 N, n9 Q
  當接收狀態機要寫資料到FIFO時,如果遇到full(lock)=1時,下一個clk
/ P, W/ I. {) M; B! T0 q  週期再判斷一次full(lock)如果也是1,則判定FIFO真的滿了,否則直接
0 E, N3 X4 Q/ d+ I1 u  B! E; `  將資料寫入FIFO,如此就可避免可能會發生的worst case(當FIFO還有一
0 [  }3 V; S2 [  個位置是空但被判定為已經滿了的狀況)$ y/ m# d7 @0 f. l  a! h6 |
) i' Z6 i; r5 w, v* p/ s
以上的推論不曉得是否正確

本帖子中包含更多資源

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

x

評分

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

查看全部評分

10#
 樓主| 發表於 2007-3-16 20:13:13 | 顯示全部樓層
您好
  N; h+ H5 w% y4 s我想到這個方法除了電路會比較大外還有其他缺點- B1 \3 f: u2 V' j9 ^3 p- R
" t# p5 B2 I. z1 i: C5 c/ k/ V% Z1 g
1.不適合做成容量較大的FIFO
7 U3 Y5 _8 X2 f+ B- ?# ]8 {  s$ X. R9 s4 D
2.清除valid_bit邏輯,有用到回授清除的方式,可能會造成其他不好的影響, k3 I1 t) @/ X$ I( F; L" U4 B

6 M. j5 L, D/ X- N( Y0 \3.tigger level會用到連續加16次的組合邏輯(把valid_bit全加起來),這樣
+ W) P$ g) C" v4 H8 V   會有較長的延遲時間,所以速度被拖慢了
8 J2 z& w1 Q- s# P( M' R+ C$ i- q5 H" Y* K; o7 ^7 A) r! v
謝謝 版主 大大 再提供了另一個思考的方向
11#
 樓主| 發表於 2007-3-17 19:38:33 | 顯示全部樓層
您好7 m+ x  G1 d( C" f3 }# [
7 L- R; k. o5 v! N' ?; }
+ z- J& E. Z) w) r0 h$ O% P. u# Z" L
1.6 ~/ P5 n* U3 J* H
   "另外在判斷empty跟full時, 不用全判斷所有的bit (因為這是一個circle buffer)"
9 T6 w7 v/ y- j# W4 s8 x# t# ~2 D' D  z2 A
   不了解這段話的意思,可以在進一步說明嗎
3 t/ G; y/ w8 `
+ X/ [+ h0 O/ ^3 j7 A1 Y2.. d" A* i2 F: p; o, _
  我這方法是假設讓/RD脈波,16*baud rate週期大大於亞穩態(metastate)出現的時間
' D1 \$ z+ ^* R0 h( I  才適用的,可是最近看一些關於亞穩態的文章,發現亞穏態維持的時間是不定的,有機會
; o4 ]  D$ H- }; F/ t8 b4 j! H0 z  超過/RD脈波及16*baud rate週期,這樣的話我想的這個方法就不能用了# Q" c" {6 @' q8 y7 K1 ~
  請問有辦法評估亞穩態維持的時間嗎
+ a7 q  ~0 F0 p9 t2 ^7 U  
/ @4 n6 i$ p% J謝謝2 P! z! x5 q  u% Z; W1 K! D2 u2 l4 R
. \8 A8 B: a% n3 B& N8 J
[ 本帖最後由 addn 於 2007-3-18 10:34 AM 編輯 ]
12#
 樓主| 發表於 2007-3-22 22:36:15 | 顯示全部樓層
您好$ I6 [# G+ f+ f3 R
關於 metastate
( s0 R6 N- [, J5 S請問如果一個d-ff假設 clock頻率1 hz
6 Y: b6 A4 Q' d- X: m1 p" _3 ]如果剛好發生metastate,metastate這個狀態' X" |: Q0 T+ F  O+ I* c& _
有沒有可能有機會維持1秒的時間長度呢0 Y+ W  E3 k  z* q

4 i7 F* U6 l& j5 |6 u" K謝謝
13#
 樓主| 發表於 2007-3-23 11:02:18 | 顯示全部樓層
您好* b1 x& D% L, O9 T5 J* `" ]- k3 p/ s- @
依讀取狀態來說,/RD負緣鎖住empty訊號$ w7 ?9 @, y/ {
而剛好發生metastate,且剛好時間超過/RD默波的週期
2 C8 X7 k# a. O$ E1 y( S7 v那讀取到的empty不就是錯的嗎 如下圖

本帖子中包含更多資源

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

x
14#
 樓主| 發表於 2007-3-23 13:43:22 | 顯示全部樓層
您好3 T0 {" |* f: B* U$ u
所以是否如我37篇所講. e8 _# o$ B, @$ c+ S
這樣的設計會有問題,因為無法保證發生亞穩態的時間" b, G% j+ U! ^2 Y6 U" ^
比/RD,16*BAUD週期短
2 M5 ^" }5 P+ u1 t2 ]
/ E5 m  Z3 F* ]那麼這個問題不就無法解決,因為empty可能再任何時間點8 c1 F( |( ^( w9 N7 n" O; h
發生變化,而/RD脈波也可能再任何時間發生3 ~" [! F2 O' p8 `" o. c

* i" S# n1 d6 y請問這樣的架構,有什麼方式可以解決這個問題. R" k7 C9 g  k  I( ~& C% b1 z
2 _% O1 R5 Z1 L6 d; z/ x6 }; m
謝謝
15#
 樓主| 發表於 2007-3-27 19:30:40 | 顯示全部樓層
原帖由 tommywgt 於 2007-3-27 10:46 AM 發表
! `2 _* Q& Y' s- r3 u5 z在opencores內是不用註冊的, 直接以cvs下載就行了
+ O5 c" U. Q! U0 N( D8 Y6 t

* z& D4 F8 b+ O# f2 @1 ]原來是要選cvs選項就能下載
; m7 O# E4 f$ c& J6 u4 l3 k" b! E* u6 X) N! a1 R6 _# ~4 Z. t
謝謝 版主 大大回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-15 03:51 PM , Processed in 0.128016 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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