Chip123 科技應用創新平台

 找回密碼
 申請會員

QQ登錄

只需一步,快速開始

Login

用FB帳號登入

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

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

[複製鏈接]
跳轉到指定樓層
1#
發表於 2009-9-4 11:24:25 | 只看該作者 回帖獎勵 |正序瀏覽 |閱讀模式
请问其中ASIZE为什么是4?我觉得应该是3.我在一本书上看到也是4.. l  `- k% L* e, ?
module fifo1(rdata, wfull, rempty, wdata, winc, wclk, wrst_n,rinc, rclk, rrst_n); / _& E2 b" Z7 U+ n9 R# ~; @9 c
parameter DSIZE = 8; parameter ASIZE = 4;   B6 N3 h$ A% W/ J3 K# }; o
output [DSIZE-1:0] rdata; ( v5 h6 o  n4 v, [1 m) G
output wfull; ( D4 C7 \+ k8 S
output rempty; , j! q% i' C/ }  [
input [DSIZE-1:0] wdata; ! f  g1 T2 B0 H/ J; |/ }
input winc, wclk, wrst_n;
( p5 p# u: D2 y" `" ~+ @1 winput rinc, rclk, rrst_n; & \$ |5 V$ L; e/ o- k
reg wfull,rempty;
) E/ X: o& w* i! ?8 J9 {/ Hreg [ASIZE:0] wptr, rptr, wq2_rptr, rq2_wptr, wq1_rptr,rq1_wptr;
5 H. g, U- o8 Yreg [ASIZE:0] rbin, wbin; & l; H( b! H% ]
reg [DSIZE-1:0] mem[0: (1<<ASIZE)-1];
% W" d- ^& S( kwire [ASIZE-1:0] waddr, raddr;
0 U" m9 h% n* ~& D, W5 hwire [ASIZE:0] rgraynext, rbinnext,wgraynext,wbinnext;
- ?0 C. |. p$ D+ o& s; ?; k2 Dwire rempty_val,wfull_val;
. \  A  E  ^0 _, Q+ P; g! u, P' s" E" k0 M3 G8 A4 t  C
assign rdata=mem[raddr]; 3 e7 T- l" U4 U4 b5 L  d: H& l
always@(posedge wclk) 1 ^: \6 w( Z6 G7 R' u
if (winc && !wfull) mem[waddr] <= wdata; : _) A& N3 x$ o$ R0 Q8 m: m- }
( a+ E+ _2 A& x9 l1 t: E, C( \2 z
always @(posedge wclk or negedge wrst_n) . Q5 O8 ?9 Y; r
if (!wrst_n) {wq2_rptr,wq1_rptr} <= 0; $ U- g) H: }' C, y
else {wq2_rptr,wq1_rptr} <= {wq1_rptr,rptr};
4 @; `6 [% u2 V( `
) H! w4 D0 k$ w# ?5 qalways @(posedge rclk or negedge rrst_n)
' K) S" B, k  d# Pif (!rrst_n) {rq2_wptr,rq1_wptr} <= 0; : V0 v) b( S% ^8 U8 s3 ~  O; n! y& t
else {rq2_wptr,rq1_wptr} <= {rq1_wptr,wptr}; ( M  p$ v. ^" N) P) g: v
  l# B9 H% S+ R, }' N1 ?3 t) V8 ~; J

/ `* p5 Z0 U# Balways @(posedge rclk or negedge rrst_n) // GRAYSTYLE2 pointer
# K# c$ g9 R4 N; d9 `, H* hbegin
: e% l* H( v. \5 b$ ~# `! [if (!rrst_n) {rbin, rptr} <= 0; 0 t8 V. L0 f. w- J. \) ~
else {rbin, rptr} <= {rbinnext, rgraynext};
6 v$ u6 v8 ^2 ~% N! Vend
6 q: W. b  Q+ Q1 o  Z. z9 Q
! J# Q3 f4 g+ g2 `& G$ k5 y$ B% ^, _4 k1 z8 l9 P& R6 ^+ Z
assign raddr = rbin[ASIZE-1:0]; ( P  g* w) p# U# p
assign rbinnext = rbin + (rinc & ~rempty); - j& T: S) N) w' ~, Z8 b3 r" B
assign rgraynext = (rbinnext>>1) ^ rbinnext; / W! Q$ b) A  B

" Y6 w5 d' z! S0 e" n. L% h
1 e% R: F7 j' L- k6 X- zassign rempty_val = (rgraynext == rq2_wptr); 9 V6 c7 a$ p8 y0 u, D" q3 x& o
always @(posedge rclk or negedge rrst_n) $ b7 W9 h( i6 l4 A/ s
begin 1 I" E9 n$ K  ~0 L
if (!rrst_n) rempty <= 1'b1; : \- r% `. \$ j
else rempty <= rempty_val;
4 f- y. o; Z" J( d- n/ Vend 3 ?0 Z; V8 w& T+ K) x4 W! z: I
! b% v1 _/ d3 R% k% [4 |- `) Q( B/ B. C

- U2 G% b" T$ q/ z3 ^6 d9 D8 talways @(posedge wclk or negedge wrst_n) // GRAYSTYLE2 pointer 8 V- L5 c  O$ b6 ^* b( u% C7 I
if (!wrst_n) {wbin, wptr} <= 0;
1 \! Y- n0 _' Y: felse {wbin, wptr} <= {wbinnext, wgraynext}; * `1 B! u/ _+ D4 o7 o

" t# ^2 a5 y" E7 ?: L, x
( R! I: ^; i/ p+ W3 Sassign waddr = wbin[ASIZE-1:0]; 5 W6 N5 d0 X" }. f, |9 O$ r
assign wbinnext = wbin + (winc & ~wfull); ; d# d' Q2 V( O5 J
assign wgraynext = (wbinnext>>1) ^ wbinnext; . R9 |2 l# G& b5 x4 ?2 h( {5 \6 N
assign wfull_val = (wgraynext=={~wq2_rptr[ASIZE:ASIZE-1], wq2_rptr[ASIZE-2:0]}); //:ASIZE-1]: Z$ ?% i& Q- `( W3 s+ M
always @(posedge wclk or negedge wrst_n) # ^  ]1 Z5 O/ p' e: b; K/ K- j
if (!wrst_n) wfull <= 1'b0;
  d/ b$ d' X% t2 k4 r; b  W3 r/ _else wfull <= wfull_val; 9 \% B) Q% O, i8 D. e
endmodule# M& I/ O7 h* t+ T9 l( @& a# B
! E- Z4 ^0 S2 R; ]2 ?8 c. |' P
[ 本帖最後由 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 | 只看該作者
您好' \: I: u. |5 t* m# m: n
: E1 R0 o6 J& L. C) s. h
這個好久前有大概看過,現在忘了差不多了,只剩模糊印像,; b7 r+ b9 {+ ]
ASIZE = 4,實際memory address為ASIZE-1. H. E2 I5 T$ R  V" c
主要是這做法用了反射式gray 碼的原故,所以memory address為4bit' r) E  F# ^! `! g
轉換為反射式gray 碼就要變成5bit,最高bit可被用來做判斷.......細節你1 P6 {5 a6 b0 |7 k) R5 Z* ^9 S4 `
要在找看看,抱歉我只記得這樣
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-5-8 08:38 AM , Processed in 0.108006 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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