FIFO根据输入输出时钟是否一致,分为同步FIFO与异步FIFO。同步FIFO中,读写控制信号以及数据均处于同一时钟域,满足STA分析时一般不会出现亚稳态等不稳定情形;而对于异步FIFO,读写相关信号处于不同时钟域,信号的不同步可能会导致亚稳态,导致FIFO工作异常,设计较为复杂;因此,此处我们首先对较简单的同步FIFO进行分析与设计:
目录
一、端口设计
模块端口:
1、时钟信号clk,作为同步FIFO的驱动信号
2、异步复位信号rst_n
// 写FIFO相关
3、数据输入信号din[DW-1:0],作为FIFO数据写入端,DW数据为位宽
4、写使能we
// 读FIFO相关
5、数据输出信号dout[DW-1:0],作为FIFO数据输出端
6、读使能re
// 标志相关
7、FIFO满标志full,FIFO满时不能再写入数据
8、FIFO空标志empty,FIFO空时不能再读出数据
内部信号:
1、读指针wp,作为读地址(FIFO读写只能顺序进行,不能外部设置,因此为内部信号)
2、写指针rp,作为写地址
3、计数cnt,用于空满状态判断
4、[DW-1:0]ram[0:Depth-1],数据存储空间,Depth为FIFO深度
二、功能描述
1、读逻辑:
clk来临,re有效,并且FIFO非空(empty=0)时,将读指针rp对应地址处的数据读出至dout;
2、读指针逻辑:
clk来临,re有效,并且FIFO非空(empty=0)时,进行一次读操作,rp加1(即顺序读出);
3、写逻辑:
clk来临,we有效,并且FIFO不满(full=0)时,将din写入写指针wp对应地址处