一、例化参数
H:fifo深度
TA:fifo上水位线
TB:fifo下水位线
深度H设置过大,浪费资源;H设置过小,无法保证功能性。
TA保证fifo的功能性,TB保证fifo的流水性能。
二、常见的标志位
2.1 arempty
arempty:将空,almost empty flag
假设fifo内存的数据个数为cnt,则cnt=wr_pointer-rd_pointer。当cnt<=TB时,arempty下一拍拉高。
2.2 rempty
rempty:读空
当rempty<=(wr_pointer=rd_pointer)或 ((wr_pointer_next=rd_pointer)&rd_en)。即读指针追上写指针或者读指针差一个数追上写指针但下一拍即将写入时,读空信号下一拍拉高。
2.3 underflow
underflow:下溢出,read when empty
underflow <= (rd_en & repmty);
fifo里面已经没有数据但读使能时,下溢出信号下一拍拉高。
2.4 awfull
awfull:将满,数据超过上水位线。
假设fifo内存的数据个数为cnt,则cnt=wr_pointer-rd_pointer。当cnt>=TA时,awfull下一拍拉高。
2.5 wfull
wfull:写满
假设fifo内存的数据个数为cnt,则cnt=wr_pointer-rd_pointer。当cnt>=H | ((cnt==H-1)& wr_en)时,awfull下一拍拉高。即fifo内存的数据个数大于等于fifo深度或数据个数等于深度减1且写一拍继续写入时,写满信号下一拍拉高。
2.6 overflow
overflow:上溢出,write when full
overflow <= (wr_en & wfull);
fifo已经写满但写使能时,上溢出信号下一拍拉高。
三、指针的处理
3.1 异步fifo 指针跨时钟域cdc需要经过打拍处理。
3.2 指针二进制码转格雷码,避免亚稳态。