Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.
6 J# ]0 H! O8 Mmodule fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); " t$ H& C% c% p: X
parameter DSIZE = 8; parameter ASIZE = 4; - Z' I, l+ u; l( f% v7 n( x
output [DSIZE-1:0] rdata; ! t' ~" s( `2 [* }7 k
output wfull;
" m" T" ~8 ~# ^& Z' b! b2 @/ Aoutput rempty;
. h) Y; k0 L5 A; Z" X2 ]9 Xinput [DSIZE-1:0] wdata;
. P- a2 m9 W& l" i+ minput winc, wclk, wrst_n; 4 v5 {% h, [# z6 B& v4 @
input rinc, rclk, rrst_n;
7 Q& }* }- |- r6 m( F, o5 l1 Ureg wfull,rempty;
- |2 r6 t# [- v( u7 M1 \reg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr; ; e  A0 R3 ^$ r+ P0 N% N/ @: L
reg [ASIZE:0] rbin, wbin;
0 a. s: ?8 G. U! Q. Z+ |5 M5 {4 jreg [DSIZE-1:0] mem[0: (1<<ASIZE)-1]; 7 A. b4 Y! c8 Z7 [9 G/ O
wire [ASIZE-1:0] waddr, raddr;
0 q) U6 G& _. Xwire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext; ' I. W3 c0 a" p$ _9 n
wire rempty_val,wfull_val;
2 u& m7 F4 `# W9 e5 e) |
* ^9 T5 Z; ^7 w# }$ s* O9 ~  vassign rdata=mem[raddr]; . O, Z! j, W% s* k2 r+ g
always@(posedge wclk) - o$ _, c. ?' y" ~" w
if (winc && !wfull) mem[waddr] <= wdata;
9 z2 b8 P* u" N0 l: w
' y; u: ~) Q$ p+ c) M# w. Qalways @(posedge wclk or negedge wrst_n)
' D) e8 r7 o0 m) y3 \# `& |if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0; + G0 {7 M1 W+ @9 U8 J& \
else {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};
9 @. N$ T8 S' D) b# _& g" j( _9 G9 _# u0 D
always @(posedge rclk or negedge rrst_n)
, ~$ c( _" c7 ~  [' N3 i- Sif (!rrst_n) {rq2_wptr,rq1_wptr} <= 0;
1 v0 H/ [1 u, p; aelse {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; 8 Q5 ?( ~# z- b2 ^# ~. z" s
% P3 Q) g% F) L' I- a9 H  G

5 p6 e* s. x- F# F' n8 ?/ ~+ malways @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer " D  v) g9 y, j7 i
begin . @. U: e' i0 f, Q; ~
if (!rrst_n) {rbin, rptr} <= 0;   p$ |1 X9 j2 |9 ?6 P
else {rbin, rptr} <= {rbinnext, rgraynext};
. ]- k' I0 |8 p: p- e6 a9 ]3 Qend
& p! H* }+ Z+ i. i/ R  h( U& x# J* ?# e( P3 W/ h& o$ P# |; s4 J( b8 W

0 y2 \1 s) k6 passign raddr = rbin[ASIZE-1:0];
" l( L6 y( A# D8 B( Dassign rbinnext = rbin + (rinc & ~rempty);
* s0 D+ n8 V& w3 \9 K$ c. bassign rgraynext = (rbinnext>>1) ^ rbinnext;
) _8 [6 q6 B& d6 d0 N" L7 O+ U/ ?5 o# ^. W3 R( V2 G

# d$ z$ \% _6 i; {( r9 Kassign rempty_val = (rgraynext == rq2_wptr);
, A- j/ A% G0 s; F& }. S' [always @(posedge rclk or negedge rrst_n)
+ q  A6 D7 S6 Gbegin
! J8 o/ U9 W# E/ O, [. Vif (!rrst_n) rempty <= 1'b1;
  {) n! D* K9 c# F+ ielse rempty <= rempty_val; & i$ H8 g( h( b; p9 s; P. y4 y4 N
end 3 o/ _1 o4 z- `+ Q, _6 w9 P
( H: Y6 E0 R2 p. d# D; v! v
( q; e. v" C* l1 t, E' B/ p; D
always @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer
* O$ |) C3 F; s' C+ A7 h1 Mif (!wrst_n) {wbin, wptr} <= 0;
* `) K4 d4 ^' {" p: B  telse {wbin, wptr} <= {wbinnext, wgraynext};
8 x3 F5 {8 {( X+ o9 {3 r9 F, R5 m: ?# L. y2 F

3 ]& Z  r4 u7 B4 Yassign waddr = wbin[ASIZE-1:0];
& J' ], V& X) i6 C& F( Gassign wbinnext = wbin + (winc & ~wfull);
+ |4 W- E0 Q) j/ G" l+ J6 Jassign wgraynext = (wbinnext>>1) ^ wbinnext; 3 C$ I9 ]: x7 j- i& r+ J) F
assign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]
. B  t( V. [" p! q- }+ g6 R9 calways @(posedge wclk or negedge wrst_n)
: H% X8 p. D: {& Gif (!wrst_n) wfull <= 1'b0; 9 |0 n1 F5 u! Z$ F( b6 G
else wfull <= wfull_val; 1 c7 c; v4 v% D. b/ }
endmodule1 R* Y; I! o8 u0 g7 b% _+ f

2 _# |3 j& |/ y, h+ [[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-7 04:23 PM , Processed in 0.097005 second(s), 17 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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