Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.' Q7 I# j- G- |5 `( E& {
module fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); 9 A2 w0 \5 v& }. [+ v$ z' h% g
parameter DSIZE = 8; parameter ASIZE = 4; % {! e$ S' I+ G! c# O- ]
output [DSIZE-1:0] rdata;
; G* W( R4 [4 J5 loutput wfull;
7 z! i2 G0 f0 K/ _output rempty;
2 _; Z5 b9 @& V0 cinput [DSIZE-1:0] wdata;
- M( T1 ^+ Y, M$ q" [input winc, wclk, wrst_n;
# X3 Z$ \. A# Y: m* Oinput rinc, rclk, rrst_n;
( a8 ]( {6 A0 T' w2 ereg wfull,rempty; 5 \% B$ J  G' }1 E9 c: D  v% n
reg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr;
7 t; A: Y( a' t2 t$ R' preg [ASIZE:0] rbin, wbin;
6 f' g! ?! |. e$ A" F9 Xreg [DSIZE-1:0] mem[0: (1<<ASIZE)-1];
( x9 e; _! }9 f# c+ wwire [ASIZE-1:0] waddr, raddr;
+ x% }9 ?3 `& W* z5 Cwire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext; 3 L& P- O7 Q$ `: @5 R; f
wire rempty_val,wfull_val;
' ~9 `% a2 S* k7 {2 A; u, o; v2 J
assign rdata=mem[raddr];
  D0 Y  p( G* L/ `- e7 Oalways@(posedge wclk)
) \+ J. V+ C) f; y5 Uif (winc && !wfull) mem[waddr] <= wdata;
) w' r! L/ T6 }- |7 p5 ~5 E/ c+ h6 F* n0 L6 l9 L4 V- Z
always @(posedge wclk or negedge wrst_n)
3 x% i+ R3 U( H4 cif (!wrst_n) {wq2_rptr,wq1_rptr} <= 0; 8 \4 R5 j( T# a6 g
else {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};
9 C9 U4 M/ W8 {7 G9 S7 K( p) o' m" T5 L! m0 @% f, @7 U$ l
always @(posedge rclk or negedge rrst_n)
* Q6 g7 X) O0 q; Iif (!rrst_n) {rq2_wptr,rq1_wptr} <= 0;
6 j; D7 H* \9 O5 Oelse {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; , o2 V* B  b4 @% k9 g' P
9 C  x7 {: R/ `0 c
, k0 U$ F, J% `; e! H4 `
always @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer # K$ A" ]3 N5 ~( P
begin
  R6 A& P5 d& [/ ^, z+ Oif (!rrst_n) {rbin, rptr} <= 0; % L/ Z; t5 M# j7 G( j  q. T) e
else {rbin, rptr} <= {rbinnext, rgraynext}; / U/ k/ W7 F  y- n
end
0 P7 p* h9 v- [; d: q% u, v7 ~

7 j% B' o% \3 q  massign raddr = rbin[ASIZE-1:0];
! m" D. U$ X2 vassign rbinnext = rbin + (rinc & ~rempty);
! G# T1 ^* M/ y0 l( j- rassign rgraynext = (rbinnext>>1) ^ rbinnext; 7 S; S$ d% D1 c3 m

5 ^, r5 r8 V$ T7 ^. N6 X' V9 T6 g" @% K' o6 L8 w; |) A8 {: J
assign rempty_val = (rgraynext == rq2_wptr); 7 |& H0 o) v! y1 W$ ]! V; P& F
always @(posedge rclk or negedge rrst_n) - ?5 n: \: D, O5 g% W7 ?: N
begin
4 E( d, C" v) i/ i. [1 aif (!rrst_n) rempty <= 1'b1;
7 @, S  ~! B( e. J2 J$ ?  F, a5 P. welse rempty <= rempty_val; - q: S" g2 W, {* ^! W  X& S
end
4 ^8 I" }: m+ |, s% q9 V5 _& P$ _9 X+ S5 h& e$ H
* _) l* n& {  V
always @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer ! \, z8 T- l0 J3 _% a# ?( n" x
if (!wrst_n) {wbin, wptr} <= 0; 4 d  f% S# B0 T6 Y- C: a
else {wbin, wptr} <= {wbinnext, wgraynext};
+ U  |- L% U" |0 |: }
5 O& W* v: s% I, Z- _- e6 i; T7 N- H" }
assign waddr = wbin[ASIZE-1:0];
5 v% P$ b/ M1 w4 a% ], xassign wbinnext = wbin + (winc & ~wfull);
8 r, P* R. S6 S  sassign wgraynext = (wbinnext>>1) ^ wbinnext; 5 g* d: ^+ j& B
assign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]9 z' s% {6 T: }8 ?! k3 O
always @(posedge wclk or negedge wrst_n) ( x/ g  N" f$ f: b, N8 n/ h' R
if (!wrst_n) wfull <= 1'b0; # C8 _& K: p6 y+ Y
else wfull <= wfull_val;
& \* J* W! T* K! A4 Oendmodule
. o* L2 s/ @8 G, s/ i8 N" _3 y) q+ @; N0 g) X
[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-9-8 21:17:39 | 只看該作者
您好+ T9 z9 S& }7 Y3 o# }# X4 a7 R. A

/ M- R7 T3 u1 K7 ?7 L2 q這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,
$ A1 \$ n5 T7 I: @ASIZE = 4,實際memory address為ASIZE-1
* k' e+ V2 e6 a' W# i$ h' H主要是這做法用了反射式gray 碼的原故,所以memory address為4bit8 b; \: u9 [8 y
轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你- d$ t7 m' G, x5 z7 j" e' h  f
要在找看看,抱歉我只記得這樣
3#
發表於 2009-9-29 16:21:07 | 只看該作者
多一個bit主要是要用來計算 FIFO Full or Empty
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-7 08:03 PM , Processed in 0.103006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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