同步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;
//读地址
always@(posedge clk or negedge rst_n)
if(!rst_n)
rdaddress <= 0;
else if( fifo_rd_en && ~fifo_e

本文探讨了同步FIFO设计中的关键问题——如何生成空满信号,提出了两种实现方法:1) 通过计数器在写入和读取操作中增减计数;2) 利用FIFO地址位的拓展来判断状态。详细介绍了这两种方法的实现代码。
最低0.47元/天 解锁文章
6707

被折叠的 条评论
为什么被折叠?



