一 FIFO分类
1 同步FIFO:读写时钟频率相位都相同
2 异步FIFO:读写时钟频率或相位不同
二 异步FIFO
代码如下
module asynfifo #(parameter data_width=8, depth=16, addr_width=4) (
input wclk,
input wresetn,
input [data_width-1 : 0] data_in,
input wr,
input rd,
input rclk,
input rresetn,
output reg [data_width-1 : 0] data_out,
output empty,
output full
);
reg [data_width-1:0] mem [depth-1 : 0];
reg [addr_width:0] wp, rp;
reg [addr_width:0] wp_gray1, rp_gray1, wp_gray2, rp_gray2;
wire [addr_width:0] wp_gray0, rp_gray0;
//写操作
always@(posedge wclk)
if(!wresetn)
wp <= 0; //指针为0 就表示之前数据不算了
else if(!full&&wr)
begin mem[wp[3:0]] <= data_in; wp<= wp+1; end
//读操作
always@(posedge rclk)
if(!rresetn)
begin data_out