Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] uart 16550 FIFO問題

[複製鏈接]
30#
發表於 2007-3-12 19:55:51 | 只看該作者

[ref]asynchronous circuit

有關非同步電路, 先給你一些參考吧!
- n; V. ~. [/ h1 a8 n4 C( O0 `
5 [  T. \* D- t% i' G9 H[1] Bernard Cole, “Asynchronous logic moves toward mainstream acceptance”,  Embedded.Com, March 2006. [link]
0 U4 f0 u3 F1 z1 {8 P( q# D[2] Chris Angelini, “Asynchronous Logic - Who Let The Clocks Out?” ,Computer Power User, May 2005. [link]6 @  |# I2 G1 c- l* D
[3] David Geer, “Is it time for clock-less chips?”, IEEE Computer Magazine, May 2005.
3 ^! n* y- H, e( f. H# S[4] Website of USC Asynchronous CAD/VSLI group. [link]
6 N; \9 a% ]9 F! u3 Z[5] “Epson develops the worlds first flexible 8-bit asynchronous microprocessor,” Website of Epson, Feb. 2005. [link]
# u1 m; i/ S5 G  H% l+ ][6] “Asynchronous array of processors chip presented at ISSCC 2006”, EETimes.com, Feb. 2006. [link] 2 L! E# M5 N) X- G: H
[7] I. E. Sutherland, “Micropipelines,” Communications of the ACM, Vol. 32, Issue 6., pp 720-738, June 1989.
29#
發表於 2007-3-10 23:42:10 | 只看該作者
第一個問題我想已經不是什麼嚴重的問題了
. x) M8 b' ^) f. w7 Y' H
5 l& g% X' ]. i7 @; K第二個問題, 如果你不介意把外接的clock接高一點的話也就OK,不過可能就無法達到你要的相容性了
; v- w9 J* K+ p! P3 }9 y4 q+ f9 B
第三個問題還是clock rate的問題" j* b# X* Z& a2 \3 g0 n8 ]

$ b3 f& \: H4 g& G: }0 }, i第一個問題留給別人回答好了...
. i  R  W% N; |2 t2~3問題的確是問題沒錯, 誰來接手一下呢?
8 B  D+ `4 C9 T# }& D
' P# c( |, ?5 _! `! D' @# eaddn大大一直都很細心, 做什麼的呢? 不介意的話請addn大大自我介紹一下! 讓大家多認識你一下吧!
28#
 樓主| 發表於 2007-3-10 22:53:27 | 只看該作者
謝謝 版主 大大提供的參考範例) D- [' H% N) c: e8 o( B

7 t+ y; ~' X/ W將code研究後,發現可能會有一些問題,所以將問題po上跟大家討論
. i/ `8 _9 K/ v3 t4 A- M+ d$ i( X6 m/ @2 y6 E
1.
' p5 W: H7 n2 n8 ?( z! K5 n! K   版主之前的兩個假設 "/RD動作時狀態不能改變"及"wen動作時也不能改變狀態"5 v" _4 ~7 `2 ^1 H" }
   這兩個case是發生在best case,可是還要考慮到worst case就是/RD,wen同時發生
( k) P( y1 {4 g9 y& X   wptr及rptr同時發生變化,同時兩者又互為判斷來源依據之一& I9 n! ~! Z" [, W  R5 H' l
2.) h3 _. ^4 |6 O, m: t
   由data sheet看起來,實際在操作上未必能符合wck的clock rate比/rd高
* o- F+ d7 C0 i; F   假設wck的clock用16xbaud rate或者直接用1.8432 Mhz,由下圖可以看出! K9 I) @$ B9 J# h& S6 b
   資料讀取週期RC最小280ns
% j2 p8 f+ G* {+ E3.0 G) S7 d- n! X  u; y% h
   full,empty,trigger level等訊號之設定清除由wck觸發同步,可是當讀取週期
) I7 e* V# h. K$ N   小小於wck週期的case,會有問題,以trigger level造成的INTR來講% a8 v6 M1 ^2 Q
   當FIFO裡的資料都被讀完了以後,INTR不會立即變0,而要等下一個wck的時間, p2 F$ r9 U) X' N' ?+ d
   而這段時間不會造成多餘的中斷被執行嗎

本帖子中包含更多資源

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

x
27#
發表於 2007-3-9 20:39:03 | 只看該作者
好像跟之前討論的結果有很大出入...管他的, 你看能不能用比較重要...
26#
發表於 2007-3-9 20:33:41 | 只看該作者
前題是wck的clock rate比/rd高( A) C& Q' \5 [' e
) j. Z" {- {" o6 z( J. s
好像也沒思考太多, 直接key的, 有什麼問題再討論好了...
25#
發表於 2007-3-9 20:31:43 | 只看該作者
最後是你最關心的部分
) F! m7 |2 m/ ]& }+ p. v我先做些假設# q3 a. g3 f5 ?; F! K/ h1 i
1) /RD動作時狀態不能改變
. h  D+ n- U& r2 d& C7 P5 y2) wen動作時也不能改變狀態
- d# p. `; L) u- ^9 s如果只有這二個case的話以下這段code或許可行
1 W2 W4 ^+ n! C/ W3 a7 v$ H
8 A* N2 d3 R8 Q2 ]$ ~4 @! @status:process(nSysRst, wck, wen, nrd, wptr, rptr)( O  b/ m, B7 v: Y8 d2 E$ p0 T! K
begin) M, g- u% Y" d8 Y6 d
    if nSysRst='0' then
0 r* D0 x/ \! a5 ~9 V& }        full <= '0';
# x# w3 E/ f0 R0 w        empty <= '0';" j$ G8 z7 P2 S" x! [, x* b
        flag1 <= '0';( \8 @7 Z" }) J- E7 R# Z
        flag4 <= '0';0 \. @0 `* Y2 Z' E' E1 E1 g8 c
        flag8 <= '0';) D2 b  z0 p4 F7 @
        flag14 <= '0';
/ D1 [# K( L, w8 |    elsif wck'event and wck='1' then
  C  _  a2 _; ?        if wen='0' and nrd='1' then: |1 a% T, W( @* d+ Y
            if wptr/=rptr then flag1 <= '1'; else flag1 <= '0'; end if;- B/ K$ |- u( N
            if wptr=rptr then empty<='1';  else empty<='0'  end if;9 l' k; ]5 m3 j: d
            if wptr(4)/=rptr(4) and wptr(3 downto 0)=rptr(3 downto 0) then full<='1'; else full<='0'; end if;8 A: F$ j* S! Z, a1 P+ ]/ j7 p2 p
            if wptr-rptr>"00011" then flag4<='1'; else flag4<='0'; end if;
  b  s8 n  R: R            if wptr-rptr>"00111" then flag8<='1'; else flag8<='0'; end if;6 j$ x/ O/ e& d; |
            if wptr-rptr>"01101" then flag14<='1'; else flag14<='0'; end if;
  r, z# O# ]1 f0 `4 @        end if;! [4 Y; a9 n+ ?' L; U2 d2 P8 a6 A
    end if;
' v2 k' P5 {) w  Iend process;5 ]3 o" p3 ^6 ~% E3 I! K+ E8 w

6 h/ f: n5 v4 A7 a) v- L4 k$ l[ 本帖最後由 tommywgt 於 2007-3-9 08:52 PM 編輯 ]
24#
發表於 2007-3-9 20:18:11 | 只看該作者
write buffer 部分0 M/ z! b( T8 g" A+ \
' e* L. ?2 J$ ~& X# b
write_buffer:process(nSysRst, wck, wen, wptr, wdata)
$ \( E) `; U9 S0 Xbegin
' ^$ A# r2 D; t. `7 F4 l; q3 c    if nSysRst='0' then
, C# }1 s8 L3 d3 f: o        for i in 0 to 15 loop
9 l1 g, s' V  `4 Q! ?' q0 t            fifo(i) <= "00000000";
- _6 R% W( b/ @( |5 U) x        end loop;
7 p8 i% I* M- B. x    elsif wck'event and wck='1' then3 V+ \/ e+ j' b+ I2 _
        if wen='1' then$ ^! E+ L! Y) R
            case wptr(3 downto 0) is. ?, S$ ]& v  m" A4 i; l
                when "0000" => fifo(0) <=wdata;
3 e. r. z0 |$ _$ Z3 F                when "0001" => fifo(1) <=wdata;
7 [" z1 L7 R% m; A+ Q$ X                when "0010" => fifo(2) <=wdata;
( H1 U0 l; V0 h  T- f( x                when "0011" => fifo(3) <=wdata;9 [5 h5 _& D$ K  O! Q" t- O
                when "0100" => fifo(4) <=wdata;
& g9 x( @$ k& T( V* z                when "0101" => fifo(5) <=wdata;
# d9 K' n, }* r$ N/ p                when "0110" => fifo(6) <=wdata;6 `, V) S( s4 }
                when "0111" => fifo(7) <=wdata;
0 O. ^4 v" I* x) T                when "1000" => fifo(8) <=wdata;5 R! g0 X$ H( F! X/ P  ]4 E  ?. u
                when "1001" => fifo(9) <=wdata;
* k0 Z+ ^8 d1 F4 m' R/ j3 D                when "1010" => fifo(10) <=wdata;' Q: |/ t! s4 I1 u2 Z" F& M
                when "1011" => fifo(11) <=wdata;2 N% C6 I1 d* e6 D' O# C1 c8 M$ j
                when "1100" => fifo(12) <=wdata;: ]& B& o$ L* v. y  Q
                when "1101" => fifo(13) <=wdata;
* f1 u; f/ J: e  ~( x                when "1110" => fifo(14) <=wdata;
: x' {- x+ C% H- H5 x% R                when others  => fifo(15) <=wdata;
/ b" D  E8 r; I* f, E) e            end case;" e# ]' g8 Y7 ?, P( k. p
        end if;
+ |) s8 ^' j1 {7 t$ t/ d( y    end if;
* N0 ^3 `5 Z: jend process;; m; _) ~5 D, T( S5 P
- C- w. M. e( w" H9 i
[ 本帖最後由 tommywgt 於 2007-3-9 08:37 PM 編輯 ]
23#
發表於 2007-3-9 20:12:35 | 只看該作者
直接key怕按錯的話會消失, 所以分段key
( q0 F/ x& A" r2 N$ _6 |6 O: P  V4 V/ s. V( @' @9 u
Read buffer部分
+ r; D8 d2 G- b+ E! \, Q: F/ r/ v2 B& u6 e+ r) x9 x8 ]6 p1 ~; a
--read_buffer
- ~7 K. w% {4 {  H4 fwith rptr(3 downto 0) select rdata <=- q7 v( S0 V# K3 q; z, _
    fifo(0) when "0000",6 y6 o0 F1 I/ A0 J. a
    fifo(1) when "0001",5 k) J% K! X2 h1 j# D9 @6 x
    fifo(2) when "0010",1 p7 p$ d& ^- M# p
    fifo(3) when "0011",5 v/ B, s6 Z% }' d, l; C/ `/ l
    fifo(4) when "0100",
0 E2 b3 u* A( q" |1 ~% N; \    fifo(5) when "0101",
" p/ ~& }: `% T( Q. \    fifo(6) when "0110",
/ S* z2 ^7 B3 N0 T/ F( \    fifo(7) when "0111",
: \( K1 \7 e5 H( ?7 @& o    fifo(8) when "1000",* S, j4 Y) q& `  F* {
    fifo(9) when "1001",+ W# f/ Q" }8 `$ }0 \. ^( t2 f- g
    fifo(10) when "1010",
% T3 Z6 @0 y% z4 A    fifo(11)when "1011",
" ~5 ?" {' l' G5 q, f" Q    fifo(12) when "1100",
. i7 Z6 d8 g1 ^% p) z    fifo(13) when "1101",
4 n/ @* g& q, m1 m    fifo(14) when "1110",# `% K7 l# y1 X# g
    fifo(15) when others;
22#
發表於 2007-3-9 20:07:12 | 只看該作者
大部分都跟你想的差不多
' l5 j/ @3 K- i
$ Q$ z, I# Y7 Y( x, Q: o那些信號也先估且如我假設一般
5 M# w% }0 k* n4 _. T2 x8 T4 Uwen是RX收到一筆完整的資料時所送出來的
. `  H$ r( |3 j. U1 O) B因此我想rptr 跟wptr會像這個樣子(這些都是我直接key的, 語法跟細節再麻煩你檢查一下)
; W8 E6 n) `% y4 A+ H! dprptr:process(nSysRst, nrd)
: b+ F' D5 Y7 E% S2 ubegin( S- J* O6 o7 r% }5 O/ k. C
    if nSysRst='0' then
3 A7 w3 R' @0 N3 Q7 s        rptr <= "00000";  l: D1 h/ ?, b6 W0 w, l* }
    elsif nrd'event and nrd='1' then4 r: K1 U- I6 @8 w
        rptr <= rptr + '1';7 F" _9 s( m5 n1 _. l8 N3 Z+ @
    end if;( F" v" V; ?4 G% m
end process;
4 X; ^2 I" N( W3 s% ]; G
9 m7 j0 U6 a$ X0 f# l$ o9 T' Q" Upwptr:process(nSysRst, wck, wen). ]/ M1 I8 C! }* X( ?7 W1 w) ^/ ^
begin
, B8 {/ ]5 @) ~8 M! L# s9 p    if nSysRst='0' then1 K$ m( \) a% I2 L0 c# f1 r
        wptr <= "00000";
) W1 u5 `; F& Q% \9 D    elsif wck'event and wck='1' then
: o5 F/ z3 A6 ]/ k; ~        if wen='1' then
5 v& J6 R& Q9 u/ ~+ I# l( d% G0 D( p            wptr <= wptr + '1';
% @8 X8 G7 d( a. ?& a        end if;) b1 i/ D: @$ L+ X
    end if;7 z$ X$ M+ T6 C+ Y$ T
end process;
6 d% l9 z9 }2 |2 U% L% g& h; F0 I. d3 ^3 j0 g5 L
假設buffer長度是16的話, wptr跟rprt為什麼都要用5bits 呢?# j' e5 {3 q4 |4 H, Q  L' q
你一定猜的到主要是為了判斷full跟empty, 後面的code會拿來判斷
21#
發表於 2007-3-9 19:56:47 | 只看該作者
我來回看看好了.... }6 r$ ]0 ^3 S5 E. [3 @* ?- {0 r

. l. [; }# q/ U2 c6 R  V2 O( L這是我剛想了一下畫的圖你先參考一下

本帖子中包含更多資源

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

x
20#
 樓主| 發表於 2007-3-9 10:23:42 | 只看該作者

回復 #19 tommywgt 的帖子

版主 大大 等你有空在幫我解答就好了啦
. j0 J. \9 X$ @. S4 {) }. `+ O9 F, v5 A% ~: y! v2 d: y
我有找到一些對岸的異步FIFO文章,有興趣可以參考看看7 O2 {2 Q0 c+ J4 L/ N
http://www.21ic.com/news/html/70/show1661.htm# _3 A& a3 P6 R
http://blog.21ic.com/user1/1202/archives/2006/23787.html) D7 M6 p( B/ k! C, c
根據文章用格雷碼當ptr的count是可以大大降低亞穩太被取樣到的概率/ ~' b* H$ Z* b) g: L
可是還是會有最高兩位元同時發生變化的情形,這是不是表示使用格雷
. F$ J9 x! h/ |. N( B2 j% E$ t碼後還是無法百分百保證正確呢' q1 t  a1 F) }

% ~1 n; I2 z. L! R4 H$ S+ g還有trigger level要如何由格雷碼的read_ptr,write_ptr去判斷呢
19#
發表於 2007-3-8 00:39:42 | 只看該作者
addn大大0 u$ s; P9 ]2 `  k7 N

( x! K8 ^, _! p) P- \其實我這一陣子好忙, 所以常常有點無力感...1 u8 O0 F& y. N! w
# F+ E) p+ u9 n- u7 T, N  D: L
你想一下這個東東, 如果再沒答案的話我再PO個CODE上來好嗎?5 Y; g! q- ?5 l+ i- r! [

8 e3 D2 g# a& Q+ P" k3 j+ f你可以試著把那個ptr改成gray code counter看看嗎?
18#
發表於 2007-3-6 23:18:36 | 只看該作者
嗯...感謝你把standard cell based design flow貼出來, 可以給沒做過digital IC的人瞭解一下下
17#
發表於 2007-3-6 22:26:28 | 只看該作者
clock問題,一般來說都會設計成"A主" B,C,D.....跟隨A"clock . }6 i: O, X0 [8 {# [' \

4 m; Q% J+ k* Y6 v( K/ r+ k新產品通常都是跟隨舊產品clock,除非新品有更好的clock產生器.
16#
發表於 2007-3-6 22:20:52 | 只看該作者
原帖由 bosscck 於 2007-3-6 22:20 發表
! m  L( a8 [) F7 G- E

本帖子中包含更多資源

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

x
15#
發表於 2007-3-6 22:20:31 | 只看該作者
原帖由 bosscck 於 2007-3-6 22:20 發表
8 {. R! ~% i" J% P# W

本帖子中包含更多資源

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

x
14#
發表於 2007-3-6 22:20:06 | 只看該作者
原帖由 bosscck 於 2007-3-6 22:19 發表) Q9 l" t4 x+ b( b

本帖子中包含更多資源

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

x
13#
發表於 2007-3-6 22:19:47 | 只看該作者
原帖由 bosscck 於 2007-3-6 22:19 發表  W6 T$ F7 R: a7 ~

本帖子中包含更多資源

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

x
12#
發表於 2007-3-6 22:19:18 | 只看該作者
原帖由 bosscck 於 2007-3-6 22:10 發表
  v+ A4 E" v6 f
( @1 a# A% w/ N8 f
& K/ [! {9 j2 d! D) U% H" w) i( O, @+ _: d. n' _
時序的問題這方面我去找找看,我學過我會去翻翻資料.這兩天回覆

本帖子中包含更多資源

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

x
11#
發表於 2007-3-6 22:10:35 | 只看該作者
原帖由 tommywgt 於 2007-3-1 14:07 發表
3 n1 e, ~  H* Y( \: q+ o8 H類似因為不同clock而造成的問題在設計時常會遇到" r* F6 M, C4 l* F' y1 s3 [) a

5 R" m, ?, R4 c/ _+ v有人有別的好答案嗎?

7 \! ], k" V! U& Q' S" @) l
; m( i9 ]7 e, r9 j  e) [, Y
8 R& l& b( J3 a2 N9 x時序的問題這方面我去找找看,我學過我會去翻翻資料.這兩天回覆
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-5 09:11 AM , Processed in 0.142018 second(s), 16 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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