FIFO是英文First In First Out 的缩写,是一种先进先出的数据缓存器,他与普通存储器的区别是没有外部读写地址线,这样使用起来非常简单,但缺点就是只能顺序写入数据,顺序的读出数据, 其数据地址由内部读写指针自动加1完成,不能像普通存储器那样可以由地址线决定读取或写入某个指定的地址。
一、同步FIFO的实现
网上看了很多同步FIFO的实现代码,大多都比较长,这里提供一种简易的实现方式,非常适合在考试答题中使用。同步FIFO表示,读数据与写数据共用同一个时钟。
module SYN_FIFO(
input Clk ,
input Rst_n ,
input [7:0] Wdata ,
input Writ_en ,
input Read_en ,
output Writ_full ,
output Read_emphty ,
output reg [7:0] Rdata
);
reg [8:0] Raddr; //低八位为地址位,MSB为标志位
reg [8:0] Waddr; //低八位为地址位,MSB为标志位
reg [7:0] memery[0:255]; //位宽为8,深度为 256
//Raddr
always@(posedge Clk or negedge Rst_n)
if(!Rst_n)
Raddr <= 'd0;
else if(Read_en && !Read_emphty) //当Read_en使能,读空标志位不为1,读地址位 +1
Raddr <= Raddr + 1'b1;
//Waddr
always@(posedge Clk or negedge Rst_n) //当Writ_en使能,写满标志位不为1,写地址位 +1
if(!Rst_n)
Waddr <= 'd0;
else if(Writ_en && !Writ_full)
Waddr <= Waddr + 1'b1;
//Wdata
always@(posedge Clk or negedge Rst_n)