在IC基础(二)中我们已经介绍了异步FIFO,本章介绍的同步FIFO会比上一章简单许多。
一、什么是同步FIFO?
这部是很简单的问题吗?同步FIFO就是读写时钟域都是同一个时钟的FIFO。也就是说同步FIFO不用考虑跨时钟域的问题。同步FIFO和异步FIFO的根本区别就是读写时钟的不一样。
二、同步FIFO的常见参数
clk:读写时钟
rst_n:同步复位信号
w_en:写使能信号
r_en:读使能信号
wdata:输入数据信号
rdata:读出数据信号
wfull:满信号
rempty:空信号
三、同步FIFO建模
同步FIFO的模型可比异步FIFO的模型简单多了。同步FIFO的模型一般如下所示。(懒得画图了,直接用Xilinx的模型)
可以看到我们设计的端口信号和XIlinx的同步FIFO的模型的端口信号是一致的。FIFO的读写行为如下:
当需要写入数据时:需要判断两个信号,一个是wfull信号,另一个是写使能信号w_en。只有FIFO不满并且写使能有效的时候才可以写入数据。用逻辑来表达就是:
(!wfull&&w_en==1’b1),并且此时的数据要和写使能对齐。用代码来表示就是:
always@(*) begin
if(rst_n==1'b0)
wdata = 0;
else if(!wfull&&w_en==1)
wdata = i;
else
wdata <= 0;
end
如果不满足这个条件,那么写入数据就会有错误。
当需要读出数据的时候:需要判断两个信号,一个是rempty信号,另一个是r_en信号。只有当FIFO不空,并且读使能有效的时候才可以读取数据。用逻辑来表示就是:
(!rempty&&r_en==1'b1)
读时能没有那么讲究了,只要不空随时可以读。
always@(posedge clk or