Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.) [: ^, ~6 P3 [/ a
module fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); ; j+ C+ D; m1 o# B
parameter DSIZE = 8; parameter ASIZE = 4;
  q$ m1 u: t% }2 u9 q8 Joutput [DSIZE-1:0] rdata;
; W" Y2 F" s$ W  Y4 Q0 xoutput wfull;
& g: ?! Y6 ^/ L% koutput rempty;
; t& L, R4 P3 Z1 s- T0 [* vinput [DSIZE-1:0] wdata;
  b& c4 T. Z( c' ~1 Z1 E: Xinput winc, wclk, wrst_n;
( n/ k. a9 H( m; k& S. Hinput rinc, rclk, rrst_n; % Z+ C/ v0 A  k6 Z
reg wfull,rempty;
$ p+ q# y* O& xreg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr; & y( V8 E- P6 l, k* B* l
reg [ASIZE:0] rbin, wbin;
( _3 }3 @& |$ g! }% Z/ U9 ereg [DSIZE-1:0] mem[0: (1<<ASIZE)-1]; & k2 J6 ^6 m1 M2 a6 U$ S% ^
wire [ASIZE-1:0] waddr, raddr; 6 f4 N1 x) f$ ]' M
wire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext;
) J3 o/ Z3 }6 e, S+ }( n+ K, nwire rempty_val,wfull_val; % h3 x" o! m; t7 y: E

* ~. Q9 O7 O  A% V) Passign rdata=mem[raddr]; ) H' q0 q) \( w4 M* R$ t
always@(posedge wclk)
$ J, \$ M1 ?- e  _8 o/ a# kif (winc && !wfull) mem[waddr] <= wdata; # M5 p: H9 I6 @! q( G2 G

. Q' i7 v$ h' ^! m: Ialways @(posedge wclk or negedge wrst_n) % R+ ]2 z9 |- v( l- a: ~/ c; U
if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0;
' y1 b& S0 |3 @5 i5 Eelse {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};
6 p$ S  r9 M( d* u" o: F5 W" x- i' H" _
always @(posedge rclk or negedge rrst_n) ( S' W+ \7 B5 [, D. H$ N# Q
if (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; * D8 O' J$ h1 p1 e- U
else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; 6 b4 X9 W7 L9 t; s8 N

$ G  J' t* L' a3 L5 \4 m+ o
7 C; V, k+ c1 o3 q' w2 Z/ H! Ualways @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer # s  m) W* g( W$ H( ~
begin ) V0 L6 M! D) h# B7 R
if (!rrst_n) {rbin, rptr} <= 0;
8 `. l$ X9 w, T3 X+ L, g3 qelse {rbin, rptr} <= {rbinnext, rgraynext}; 2 P& I$ ~& Z& w7 I; F: \( n
end
- v9 t- s! ]/ L" ~7 a; Q
+ o' T5 [- `& P) x4 J4 T  Q
; D2 v* X* N0 F5 y- j3 k, x+ D, G7 rassign raddr = rbin[ASIZE-1:0];
4 {/ C6 z7 D+ U) l) {/ g6 Xassign rbinnext = rbin + (rinc & ~rempty);
6 p3 T! ^1 h  C5 w! Yassign rgraynext = (rbinnext>>1) ^ rbinnext; ( l+ ^, w+ @  g& `) l) }8 ]3 H

8 M2 `4 o: n0 `1 w+ ?
6 c+ {; V5 h" r  e2 }assign rempty_val = (rgraynext == rq2_wptr);
/ k+ U8 B# l. U& [7 P2 Q4 qalways @(posedge rclk or negedge rrst_n) . ?8 j( r% f: Q
begin 5 B! u( {8 z0 b
if (!rrst_n) rempty <= 1'b1;
! w6 M6 @  n  p0 M3 \( c0 @else rempty <= rempty_val;
# w$ @+ \$ Q1 j+ F+ I8 G/ yend + n$ i0 ?/ ?' Y& {: t1 x' u
- M; ]' E% D+ r

/ }" l8 V$ ]: E$ h2 Y, h3 Dalways @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer
) K4 o% Q" ~. u& zif (!wrst_n) {wbin, wptr} <= 0; " Z' ^. b. v9 p) C: e( [
else {wbin, wptr} <= {wbinnext, wgraynext}; - L0 h: q/ ?) u7 X5 N4 }: s7 j
9 Z, a/ D( y3 f2 L  ~% m% i

: `6 D# j" A$ M) j! s' c) d6 xassign waddr = wbin[ASIZE-1:0]; " `3 l4 {7 h4 e2 d8 f1 q
assign wbinnext = wbin + (winc & ~wfull); # M- P# {7 Q5 E! }2 }
assign wgraynext = (wbinnext>>1) ^ wbinnext;
$ D4 m% X% `' Aassign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]
  F' H5 f' Z* T6 y0 Y0 e9 G% Z* U2 v. }always @(posedge wclk or negedge wrst_n) : u# n4 D  _. N
if (!wrst_n) wfull <= 1'b0; 1 W$ Y% T  ~$ c  F/ S( _4 b
else wfull <= wfull_val; - P9 |% O& Q0 ~& T/ k$ \; s
endmodule: O6 b/ z1 Z) C5 B
- K5 ?$ o# b* |/ f4 O3 j  V
[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-9-8 21:17:39 | 只看該作者
您好
7 S* }. g3 b  i8 z) i7 W& u7 _9 x5 p4 \! h
這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,
* U, S0 X( o% f6 uASIZE = 4,實際memory address為ASIZE-1
# |9 Z7 E" R" z3 d% D2 @主要是這做法用了反射式gray 碼的原故,所以memory address為4bit
; W+ ^+ C) r& k* S7 E轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你# X! }9 W, L5 }4 S) G
要在找看看,抱歉我只記得這樣
3#
發表於 2009-9-29 16:21:07 | 只看該作者
多一個bit主要是要用來計算 FIFO Full or Empty
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-27 03:50 AM , Processed in 0.104006 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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