同步FIFO的设计较为简单,关键在于如何产生空满信号
有两种实现方法:
1.利用计数器判断,执行一次写操作+1,读操作 - 1;
2.将FIFO的地址位拓展一位,用最高位来判断空满。
代码如下:
1.利用计数器计算存储数据个数
module sync_fifo(
clk,
rst_n,
fifo_wr_en,
fifo_rd_en,
fifo_wr_data,
fifo_full,
fifo_rd_data,
fifo_empty,
fifo_usedw
);
parameter fifo_width = 8;
parameter fifo_depth = 512;
parameter fifo_addr = 9;
input clk;
input rst_n;
input fifo_wr_en;
input fifo_rd_en;
input [fifo_width-1:0] fifo_wr_data;
output fifo_full;
output fifo_empty;
output [fifo_width-1:0] fifo_rd_data;
output [fifo_addr-1:0] fifo_usedw;
reg [fifo_addr-1:0] rdaddress;
reg [fifo_addr-1:0] wraddress;
reg [fifo_addr-1:0] data_cnt;
//空满标志生成
assign fifo_full = (data_cnt == fifo_depth )?1'b1:1'b0;
assign fifo_empty = (data_cnt == 0)?1'b1:1'b0;