Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4." ~0 l6 h9 R8 b& _# g1 O3 w
module fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); : c2 ]7 u+ u8 N2 r/ X7 `+ g2 r4 P
parameter DSIZE = 8; parameter ASIZE = 4;
- F# g2 Z( W+ c! F/ ^; Goutput [DSIZE-1:0] rdata; ; x# k# D, L, H) b: `! d4 V: C
output wfull; / j; Q: T+ v, W& S% R' b' ~4 F
output rempty;
1 l2 z8 i7 u; C) K  u4 e. T  _+ \input [DSIZE-1:0] wdata;
, ^4 b6 R3 V& Q$ \; ]* Vinput winc, wclk, wrst_n;
; `8 `% r0 }' [0 Y8 R, S* a! ]input rinc, rclk, rrst_n; 9 G, K) e- u1 e' t' b5 `
reg wfull,rempty; - p& d" v0 _2 T: S5 S/ T
reg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr;
  P: }$ |4 T$ `0 ]reg [ASIZE:0] rbin, wbin;
2 b, B3 a' M1 [- O) \reg [DSIZE-1:0] mem[0: (1<<ASIZE)-1];
* V# a# H9 I# a) S3 Fwire [ASIZE-1:0] waddr, raddr; 1 I8 a2 L: t# f6 q* A( u. p5 Y
wire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext; 6 M$ J) m6 K# c% M5 z
wire rempty_val,wfull_val; ' V. v" {8 r: `

- G  {0 d3 \# @( i- l: Tassign rdata=mem[raddr]; ; @- U2 X9 }7 e( Y" }
always@(posedge wclk) ! h1 y! S; _' g0 r' d
if (winc && !wfull) mem[waddr] <= wdata; ; g2 z4 J' @+ E# A4 U" o9 G* t

+ N$ i: P' D, z( V5 M# Ialways @(posedge wclk or negedge wrst_n) - ]$ j6 R/ p. B0 J' x5 L
if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0;
: [* c0 t( h. o6 P9 Ielse {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};
- u) X4 A3 |0 R8 L9 E% d
  G& \2 B9 B  {: talways @(posedge rclk or negedge rrst_n) * `2 }8 M* L: i3 r. g* D6 `
if (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; # P( b8 O1 J5 d* v
else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr};
( R( @4 M- x9 D1 {3 p6 E& }7 J
* i9 B6 ]  r6 E' w0 b* Y0 `. I$ D# l
always @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer 6 D' w% l7 r1 X8 c& u
begin 1 f2 h8 j+ r2 {: f; N  k: x5 p1 C
if (!rrst_n) {rbin, rptr} <= 0;
  D4 [8 E# _1 Eelse {rbin, rptr} <= {rbinnext, rgraynext}; ! N7 h8 U9 W( W" i) g
end . u* X3 {* u: @7 |
! i) H- H' k" i$ J& d. i4 E; W% }

" _( G7 I& |# m% X' ~' Nassign raddr = rbin[ASIZE-1:0]; , ?& F3 x+ P6 H* \0 s& J& P) N
assign rbinnext = rbin + (rinc & ~rempty);
3 K9 F, R2 {! u# {. S8 y% sassign rgraynext = (rbinnext>>1) ^ rbinnext;
0 R1 |. d. N; S4 A6 [8 o2 v1 ]! c

4 Z0 C7 n, l- B6 X% G' qassign rempty_val = (rgraynext == rq2_wptr); + V8 s" V/ y& g2 f
always @(posedge rclk or negedge rrst_n) 0 L* W$ d2 r/ Z9 e/ Q- X2 S9 K
begin
* J9 h* O% [9 F: a  oif (!rrst_n) rempty <= 1'b1; 5 @- ^; K* {! C7 z( a" {. @( [
else rempty <= rempty_val;
1 q/ G6 X7 R3 u. M* z+ }. m5 Z9 Uend
8 F# z7 @- }9 p  v
  }+ R3 a9 r, m' E: |5 y; N5 Y: }. [, f
always @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer . [, x& d, T3 q3 N
if (!wrst_n) {wbin, wptr} <= 0;
0 N; |! w* X; d6 O3 p* |) \else {wbin, wptr} <= {wbinnext, wgraynext};
/ @* \2 b) @8 h: r+ n9 q2 G. D5 |. G) g9 F; S1 u

# h6 R/ y, A& K" U9 a5 i; \, cassign waddr = wbin[ASIZE-1:0];
! E% ]$ t: Z. H: q" tassign wbinnext = wbin + (winc & ~wfull);
0 W6 f. L: e: M! w/ f# b6 k7 lassign wgraynext = (wbinnext>>1) ^ wbinnext;
9 E4 G5 E; n0 g! E" _" Qassign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]- t) F  ~/ y; [; r3 d' x
always @(posedge wclk or negedge wrst_n) 9 z" J5 W" J7 a! t0 Q. y) h- A
if (!wrst_n) wfull <= 1'b0; * q% Z, |* a+ ?2 ]( x7 }. i
else wfull <= wfull_val;
. ^2 N6 s; \1 [endmodule) ~! G0 e& r( S3 z! {* V' M% c
) S4 m# Z( g+ i; `( m; b0 ~
[ 本帖最後由 xuduo6845 於 2009-9-4 11:25 AM 編輯 ]
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享分享 頂 踩 分享分享
3#
發表於 2009-9-29 16:21:07 | 只看該作者
多一個bit主要是要用來計算 FIFO Full or Empty
2#
發表於 2009-9-8 21:17:39 | 只看該作者
您好0 T  N+ b, E& {4 A' q
+ X6 N+ D. B/ J- k. J( ?! g
這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,/ R4 B" Y6 O# \0 I7 }% Q# o7 m
ASIZE = 4,實際memory address為ASIZE-15 T  \/ s" ^1 p9 X* d: J7 e
主要是這做法用了反射式gray 碼的原故,所以memory address為4bit2 ^% V$ J% f" [( P4 i* i: ~3 ?5 |) \' F
轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你
- X: y5 ?- j4 t+ `: h5 j$ q3 T要在找看看,抱歉我只記得這樣
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2025-2-1 01:03 PM , Processed in 0.176011 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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