Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

[問題求助] 网上一个经典异步FIFO程序

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.
/ D+ v% j4 i& N, Gmodule fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n);
$ r+ d( L4 t1 e9 k, Z" B& Pparameter DSIZE = 8; parameter ASIZE = 4;
! \- s  x% v$ Foutput [DSIZE-1:0] rdata; 7 J) A9 S- M2 e, L* y0 X. O
output wfull;
6 n6 ^; J7 b: u7 u! Loutput rempty;
  T2 q. s( |5 T  m: i* P5 b' n1 kinput [DSIZE-1:0] wdata;
% h" y) S) m# t, W7 B  B; xinput winc, wclk, wrst_n;
( c0 C3 P" K* \% v/ sinput rinc, rclk, rrst_n;
7 u( j8 i, B7 G- Greg wfull,rempty;
+ _9 p7 C. I# K9 p% T8 g  F. Oreg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr;
9 A8 }1 P2 D5 X0 xreg [ASIZE:0] rbin, wbin;
9 f/ }5 R3 y1 U, B2 }, u( [reg [DSIZE-1:0] mem[0: (1<<ASIZE)-1]; $ T# ~. w5 b/ d) ]6 l8 A
wire [ASIZE-1:0] waddr, raddr;
0 R2 l9 k& q. \* o1 K, @8 hwire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext; ! a8 E! U, B3 o6 F! s
wire rempty_val,wfull_val;
0 f1 Z0 @$ k+ j3 B1 g- |' H
( f. }" Q7 w1 d7 W1 a1 ]. [assign rdata=mem[raddr]; 2 }; I' I; H* [) i: _5 L
always@(posedge wclk) % m* P) f+ X8 z/ i$ G
if (winc && !wfull) mem[waddr] <= wdata;
- O+ E& V0 O9 |$ m& I
3 g, ?# g1 I+ P) X; z3 oalways @(posedge wclk or negedge wrst_n) $ c" y: l4 D+ b/ z( z5 T* ~* o
if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0; & J# S1 P3 _3 ^) e6 X+ S9 U9 `( |
else {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr}; - a+ {' r5 [' w
% k! j, Q3 V  p8 t
always @(posedge rclk or negedge rrst_n)
1 Z) Q2 Y/ c- m$ g. c3 Xif (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; ; e% I. j- j; K! {8 i! f
else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; 6 C2 I; B) F$ u0 L( E' b

3 c$ ?5 ]: J( _- ?1 K- T8 d4 D7 C7 E3 {: B, O, [
always @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer
" M+ j% {! s$ ^5 t4 P: Ibegin
. {& H9 f) C: e: \; p; Pif (!rrst_n) {rbin, rptr} <= 0; 3 i! I, g+ L( B6 t- @) S
else {rbin, rptr} <= {rbinnext, rgraynext}; 4 \: Z0 g* ^1 P$ k+ D& L
end
0 b: O/ f3 i/ j& L4 ]4 D! r" N9 y9 s8 p& L! B6 m) _" H

8 G6 [0 W% Z8 P- Q" b0 o0 jassign raddr = rbin[ASIZE-1:0]; / I0 J% B% r* o$ j: g% ?# X
assign rbinnext = rbin + (rinc & ~rempty);
5 U) }" U- [. Z. ~$ i* X* v- Fassign rgraynext = (rbinnext>>1) ^ rbinnext;
" S1 g/ f: t9 ?; C, X
$ n9 O$ P0 Q2 G8 f% p
; ]" v, s; B6 M$ a# Vassign rempty_val = (rgraynext == rq2_wptr);
) j" ~3 b9 ], V/ S6 E* salways @(posedge rclk or negedge rrst_n) 0 R* r# M+ {5 e; r7 y% r/ [
begin
* C- t/ u8 I& D8 hif (!rrst_n) rempty <= 1'b1; " l! T+ k& f8 @$ x& f" Z6 Q
else rempty <= rempty_val;
4 q+ ?4 x& q! k! \end 2 z6 b3 E! \4 l" e, o3 S- z& r8 J9 I
$ q/ B; n7 y. \+ L2 ?+ u" x# d) Z% }
# m4 y2 b" V9 K
always @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer
" C" S8 i3 j* o- S4 A) ~& {if (!wrst_n) {wbin, wptr} <= 0; 2 A& g) m9 X' T  u
else {wbin, wptr} <= {wbinnext, wgraynext}; 7 |% v1 y  v; }9 ?: I# Z

6 a7 d  c( q1 n& g/ `$ M9 X, o5 z1 e& E/ @" J
assign waddr = wbin[ASIZE-1:0]; % e9 h+ y, C9 u/ J
assign wbinnext = wbin + (winc & ~wfull); ) ~' H' z3 }: Q! B6 m+ Z" W# g: E
assign wgraynext = (wbinnext>>1) ^ wbinnext; ) z) F5 ~3 K/ c" H2 o$ z! f
assign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]+ x1 p6 l6 k1 f" M7 _
always @(posedge wclk or negedge wrst_n) . n6 b" M4 T6 ?$ f
if (!wrst_n) wfull <= 1'b0;
8 ?3 L4 d$ u9 [else wfull <= wfull_val;
! `" h/ N. C- }3 t8 ]endmodule: |  B* A: p1 k% v4 @; i

, o* f4 u: {) {, L' u( ^[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-9-8 21:17:39 | 只看該作者
您好* P- g' Z. i! T7 M8 e0 `! d

9 c+ I- U1 I, N" d這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,
0 `0 \  F4 R. a! g/ WASIZE = 4,實際memory address為ASIZE-1
- o$ j+ \8 E/ a/ f  \主要是這做法用了反射式gray 碼的原故,所以memory address為4bit
9 u, k0 W: r  n, t轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你
0 q1 x; T! P# P3 B/ t0 m" @7 C要在找看看,抱歉我只記得這樣
3#
發表於 2009-9-29 16:21:07 | 只看該作者
多一個bit主要是要用來計算 FIFO Full or Empty
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-1 09:54 AM , Processed in 0.156009 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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