FIFO阈值如何设置?将满阈值与FIFO深度的关系?

FIFO阈值如何设置

1、       什么是FIFO?

FIFO(first in firstout)是一种用寄存器reg或者RAM实现的存储结构,常用于存储数据通道中的数据流,采用先入先出的数据,当下游模块无法及时处理上流模块输出的数据时,此时需要用FIFO暂存数据,防止数据丢失。

2、       什么是FIFO阈值

FIFO阈值包含将满阈值afull_cnt和将空阈值aempty_cnt,当FIFO内包含的数据data_cnt大于等于afull_cnt时,将满信号有效(afull为1),afull传输给上游模块A,通知上游模块停止发送数据,防止FIFO发送溢出,NOTE:将满阈值afull_cnt的作用是防止FIFO发送溢出导致数据丢失。将空阈值的作用时防止FIFO空的,即FIFO中没有有效数据了还会产生读数据操作。

 

3、       FIFO将满阈值如何设置

请看下图,数据data和有效信号vld从模块A产生,经过N拍延时,输入到FIFO,FIFO产生将满信号afull,经过M拍延时反馈到模块A,假设模块A接收到afull=1时,立即停止发送数据。假设FIFO深度为depth_fifo,每拍为一个时钟周期。

1为了保证FIFO不发生溢出,请问将满阈值afull_cnt至少应该设置成多少?

2为了充分发挥FIFO的性能,FIFO深度depth应该为多少?

 

FIFO将满阈值如何设置:

1)当FIFO中的数据为afull_cnt时,产生afull=1,

2)Afull=1经过M拍到达模块A,此时FIFO中应该有(afull_cnt+M)个数据。

3)Afull=1到达模块A时,模块A立即停止发送数据,此时电路中还存在N拍数据将陆续送到FIFO中,所以最后FIFO中应该为(afull_cnt+M+N)个数据,

4)为了保证数据不会溢出,所以应该满足公式depth_fifo>= afull_cnt+M+N,因此,将满阈值应该至少为depth_fif-(M+N)

FIFO深度depth应该为多少:

若depth_fifo过小,afull有效之后,fifo中存储的数据将很快被下游数据读取,而新的数据又无法及时到达FIFO,因此会造成流水气泡,影响电路性能。

假设M=5 ,N=10,假设depth_fifo=20,则afull_cnt=5, 所以在T时刻,fifo中存了5个数据后afull=1会有效,在之后的15个周期内会陆续存入15个数据。假设下游模块B每个周期读取FIFO中的一个数据,因为当FIFO内的数据data_cnt小于5时,afull才会无效(为0),因此在T+15和T+30的时刻内,下游电路B只能读5个数据,因此会造成数据断流,影响电路性能。

 

为保证电路性能,在T+15到T+30这个时间段内应该有15个数据可读,因此afull_cnt应该不小于15(M+N)。所以FIFO深度应该不小于2*(M+N)

**

  • DJ题目

**
在这里插入图片描述-在这里插入图片描述

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值