Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.7 B6 B/ K7 |' e
module fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); 1 M! ^0 A, v* u5 y0 z4 R
parameter DSIZE = 8; parameter ASIZE = 4;
" W8 A; c' Y2 N! {6 n0 ^5 @( V5 p9 Eoutput [DSIZE-1:0] rdata; , x' G- J6 o% r2 g% ^9 ]. c
output wfull; 3 o) |- {5 B. z! o% }' P
output rempty;
, [, S1 t6 `# ?9 tinput [DSIZE-1:0] wdata; * V7 _% [6 O2 ~3 w9 u5 ?
input winc, wclk, wrst_n; ; k& V% j4 a' I; e7 F' {1 D
input rinc, rclk, rrst_n; 4 q6 ~. ?  P1 G3 |0 P
reg wfull,rempty; ; b# \: o8 [2 S  e& l  M
reg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr;
% L/ A5 \; f2 kreg [ASIZE:0] rbin, wbin; 8 P; W; l" ~: s2 u+ F; Q" U
reg [DSIZE-1:0] mem[0: (1<<ASIZE)-1]; $ x- U* ~  K! X" O( A; s
wire [ASIZE-1:0] waddr, raddr;
  g# n$ J8 w4 T, U9 g7 Q. ~. o5 ^, bwire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext; , [7 C! s6 p8 f/ m" g4 J
wire rempty_val,wfull_val; , K/ z% s! x  }( _  U7 o$ o, k

8 g! J- q) w0 s' G& u6 [) Wassign rdata=mem[raddr]; % j0 U# g5 \: V* |3 M2 s6 k% ^' Y
always@(posedge wclk)
6 }1 S  Q' x0 T* N; V, V6 sif (winc && !wfull) mem[waddr] <= wdata; 2 A7 e: f/ x, E4 Z# ?) X, R5 w
5 u+ g. F1 ~: X% x- G' Y. L
always @(posedge wclk or negedge wrst_n)
( V7 P7 @0 w7 Fif (!wrst_n) {wq2_rptr,wq1_rptr} <= 0;
7 `4 B  B' \, j$ V$ qelse {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};   c! s& j9 {% j. h9 i$ B4 `

& c; T7 k3 x% F; calways @(posedge rclk or negedge rrst_n)
+ j/ g0 \# H5 Iif (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; / ^% `/ X0 w) T3 W
else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr};
. _& X$ {$ g( `4 l$ ]1 O4 E% y3 U2 M6 i$ p0 r7 G+ ?
1 Y7 I7 @+ x7 o. O
always @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer . J( B( t$ y  B" L4 p  `1 b
begin $ U+ ^7 S) v. ?5 F
if (!rrst_n) {rbin, rptr} <= 0; ) C& U2 w$ b9 q  f; d+ J$ Q
else {rbin, rptr} <= {rbinnext, rgraynext};
/ a1 S( I2 j+ {  C, V: yend
- _- F( k* \) B  m: _: y& p) ]
$ {' n% C; ]! Y- ~& z/ F& o: d5 k& r- X
assign raddr = rbin[ASIZE-1:0]; " l' s# v/ \# ?( z$ k9 G
assign rbinnext = rbin + (rinc & ~rempty);
' U7 }: i6 r+ @8 G" Wassign rgraynext = (rbinnext>>1) ^ rbinnext; - E3 F6 A3 u/ w7 S# R

+ v& ?* q% \3 H* W$ H' P3 V& O/ i& I. w, ]( Q
assign rempty_val = (rgraynext == rq2_wptr); 0 M4 _" M% a/ p, o( l, a" m! S
always @(posedge rclk or negedge rrst_n)
( F6 w  b' @% pbegin
) {% h; x5 E* ]) S+ |6 X. o; Qif (!rrst_n) rempty <= 1'b1; / E9 p& Y5 g1 O: R
else rempty <= rempty_val;
& W( y# [" M6 @3 ~* X* D- O$ fend $ f3 |+ n  P, `0 Y& \. I6 F- ?

8 t2 A# b$ y  `  W( I/ f: |& P! p2 c* ^& I
always @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer : {' J' h. |6 q
if (!wrst_n) {wbin, wptr} <= 0;
5 i6 p) `, L8 T; @. U; o1 [! s" yelse {wbin, wptr} <= {wbinnext, wgraynext};
) u% i, }+ `" `" b. O% c* n8 c  s5 G
: c: H  J1 l$ w* U6 B( q( o6 T; W1 @8 i
assign waddr = wbin[ASIZE-1:0];
4 J5 u+ g2 g  i% T; T  ?. sassign wbinnext = wbin + (winc & ~wfull);
. F% u& Q; W  F; `assign wgraynext = (wbinnext>>1) ^ wbinnext; 3 P6 Q" w3 V; f- E4 `
assign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]
5 T! T3 i2 c2 `8 `5 Talways @(posedge wclk or negedge wrst_n) & d! @2 z5 D( t5 {) H# F
if (!wrst_n) wfull <= 1'b0; 2 t3 d: r+ ~8 q  L
else wfull <= wfull_val; 6 {( v: J& d  |/ v/ i3 e
endmodule" |+ P0 V* m9 F( H( L- u! I; V, ~
1 c2 k  K1 g" o8 k- k# b
[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
2#
發表於 2009-9-8 21:17:39 | 只看該作者
您好% [- F! r' h/ \, X- F4 C
$ l& ^9 Z4 ~* S$ x
這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,
" O0 ~, i5 p' H, P5 e# S  s. R  Y% YASIZE = 4,實際memory address為ASIZE-15 K) w- |- R& d, ?, n* l7 q, f) [
主要是這做法用了反射式gray 碼的原故,所以memory address為4bit# |( v& e# [3 {) E$ D# S8 m7 V
轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你3 q5 x6 R% m$ x4 p1 y* X
要在找看看,抱歉我只記得這樣
3#
發表於 2009-9-29 16:21:07 | 只看該作者
多一個bit主要是要用來計算 FIFO Full or Empty
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-6-2 10:33 AM , Processed in 0.113515 second(s), 18 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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