1、通过Verilog形式实现异步和同步FIFO,提高代码可移植性。
2、内部可选择调用FPGA板上block、distributed ram资源
3、读写数据位宽一致。FIFO深度为2^n
问题理解:异步fifo读写时钟差距较大会影响FIFO的逻辑功能错误吗?
答案:不会。我们假设读时钟域大于写时钟域,则读时钟域下空信号的判断不会有问题(快时钟采慢时钟)。对于满信号的产生,我们假设读时钟产生地址为7,8,9,10,则写时钟域下同步过来采集到的可能只有7,10。但是写时钟域下写地址正缓慢递增,直到超过采集过来的读地址的一圈后,产生写满信号
代码展示:
module fifo #(
parameter D_WIDTH = 8 , //data width
parameter F_DEPTH = 512 , //fifo depth
parameter DELAY = 1 , //output data delay
parameter F_TYPE ="SYNC" , //fifo type:SYNC(synchronous),ASYNC(asynchronous)
parameter R_TYPE ="block" //ram type:block,distributed
)(
rst_n ,//input , reset low efficiency
clka ,//input , clock a
wr_en ,//input , write enable
w_data ,//input , write data
clkb ,//input , clock b
rd_en ,//input , read enable
r_data ,//output, read data
empty ,//output, siginal empty
full //output, siginal full
);
parameter A_WIDTH = $clog2(F_DEPTH);
input rst_n ;//input , reset low efficiency
input clka ;//input , clock a
input wr_en ;//input , write enable
input [D_WIDTH-1:0] w_data ;//input , write dat