Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.
9 d( M9 f, F$ x* {4 F2 smodule fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); & P- I& Q& ]9 R- I* C+ X# I* z% u# `9 g2 p
parameter DSIZE = 8; parameter ASIZE = 4;   S6 M. G) Z5 H2 _; P" i' N4 O
output [DSIZE-1:0] rdata;
* D6 Q0 {5 m8 w7 w' I. eoutput wfull; 7 A+ N' N1 @& E9 j9 _# {$ u5 b. g
output rempty; % F6 v& j/ C. |" c, O
input [DSIZE-1:0] wdata;
, Q9 K1 I4 q' J9 \input winc, wclk, wrst_n; 7 M: K( R8 G, m' |+ l
input rinc, rclk, rrst_n;
& p% ?9 T1 D  F+ A6 oreg wfull,rempty;
: R- Z9 o" A3 ^) |+ \# oreg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr;
9 `8 u/ v3 s0 L( Y: p# N: C: d$ R4 Preg [ASIZE:0] rbin, wbin; . W0 m" N+ R2 w+ A# D1 s
reg [DSIZE-1:0] mem[0: (1<<ASIZE)-1]; ! F6 @, s+ q) W' g; v4 z/ B+ ^5 A
wire [ASIZE-1:0] waddr, raddr;
$ U" |# w/ O, V  t+ ~% W3 Uwire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext;
4 g; V/ Q( O$ B: Z" w# N: V; Uwire rempty_val,wfull_val; 7 H- b2 X1 |. _1 V7 o& h3 O: T
! U5 W5 |, b; ?8 T7 E9 g/ l
assign rdata=mem[raddr];
4 N' d! E' V. F' |, f% G3 o5 }always@(posedge wclk)
9 d& _+ [; b# a3 [. w  V+ bif (winc && !wfull) mem[waddr] <= wdata; 3 @( T7 A) e  \; P9 o
, u& O+ p8 q. e) E( Y
always @(posedge wclk or negedge wrst_n) 3 L4 E4 W, Y8 n6 Q
if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0; " V2 e- ~* f* n6 ?
else {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};
4 [- N" n1 g) S) g, t) q- a& M6 Q: E6 j
always @(posedge rclk or negedge rrst_n)
8 f7 G, M% @% [' tif (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; 5 z, w. |$ V) X) H* ?- }
else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr};
! a/ f+ I6 l  b
: U0 ~! w, f: _0 Z
8 ^  P6 K' r) P1 Q9 ~always @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer
5 z0 g6 _) b' `& `9 S0 vbegin
8 G. y' z$ y! ?. Q" V1 d+ G; mif (!rrst_n) {rbin, rptr} <= 0; & c4 a$ y) X8 t8 p
else {rbin, rptr} <= {rbinnext, rgraynext};
5 i. l3 t* h- b/ `end
9 m- l$ J5 R+ e+ F& P  D1 J4 T( Z. L' d
% Z* n/ I. f9 e+ X/ K8 l- u9 q1 U. _
assign raddr = rbin[ASIZE-1:0];
2 U7 \9 N- G# v; `3 M4 a( F8 A$ g/ L) D. Iassign rbinnext = rbin + (rinc & ~rempty);
, Y- ]$ G  S* F$ m, E: b- gassign rgraynext = (rbinnext>>1) ^ rbinnext; ! s$ H7 A6 u1 T- L2 ]3 T$ U

* j* P9 J$ p5 A3 r7 @: f, P2 X, I! V5 X1 U' ~, ?$ U
assign rempty_val = (rgraynext == rq2_wptr); 0 s+ L% k: O9 n: [' `; d
always @(posedge rclk or negedge rrst_n) 0 l& ~$ ~% h3 E3 l& K4 M. T2 u/ y4 A
begin
/ G0 s8 D* w/ \$ \8 nif (!rrst_n) rempty <= 1'b1; 4 o* z9 n7 t! V4 B" Z
else rempty <= rempty_val;
  }5 n6 \8 M# e/ K# ^end ' d; O$ P' T, E4 z7 K* B1 i
4 I6 Q5 [% q) r& E. S! P# E1 X: F

7 ?+ q! A3 @% C; c% g* Talways @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer & k4 U: f  \. B& ~/ \5 a/ R" I! h7 D
if (!wrst_n) {wbin, wptr} <= 0;
! q  L  J/ X8 y' y0 p) Velse {wbin, wptr} <= {wbinnext, wgraynext}; 2 b3 q. D7 z( K
2 ^  i+ m- Y& a# D1 e

# L5 L. h! P. n$ Zassign waddr = wbin[ASIZE-1:0];   _* U: s$ {) k9 C# _
assign wbinnext = wbin + (winc & ~wfull); ' I/ x" @7 i! e* v* S
assign wgraynext = (wbinnext>>1) ^ wbinnext; 3 O/ J$ X* m2 E' K
assign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]
  s6 i( x; s9 d1 [4 u0 d' T- ]always @(posedge wclk or negedge wrst_n) 1 h* H5 N) t! a
if (!wrst_n) wfull <= 1'b0; " l/ G! h* R9 B) j+ ]
else wfull <= wfull_val;
9 G5 b5 Z7 q9 E* d7 O; Gendmodule
) C+ E' c2 l+ d0 C. h; {1 P' p' y/ \9 ]
[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-9-8 21:17:39 | 只看該作者
您好
8 e9 J8 s9 C" Z1 A  A7 j) X9 E0 j( S( f1 P) H5 {: Y: T
這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,3 r7 \' i1 H; w  y
ASIZE = 4,實際memory address為ASIZE-11 a1 c3 h/ _: M* I! m& {+ x# N
主要是這做法用了反射式gray 碼的原故,所以memory address為4bit- ~5 l' L# V2 _( u# f* e/ s7 ~2 T6 W
轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你" x* O2 o) N0 u( Y, O! H4 S+ a
要在找看看,抱歉我只記得這樣
3#
發表於 2009-9-29 16:21:07 | 只看該作者
多一個bit主要是要用來計算 FIFO Full or Empty
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-8 03:49 AM , Processed in 0.136017 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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