Verilog实现FIFO专题(2-FIFO深度计算)

本文探讨了在FPGA中使用Verilog实现FIFO时如何计算最小深度以避免数据丢失。介绍了数据突发长度概念,异步FIFO最小深度计算原理,以及在最坏情形‘背靠背’的数据传输中的计算方法。

跨时钟域进行数据传输时,可以使用FIFO来避免数据丢失。使用FIFO的场合主要在:读数据的速率小于写数据的速率的突发传输场合,我们不得不将那些来不及读走的数据缓存下来;(思考:读取速度快于写入速度时,还需要FIFO吗?)

我们需要开多大的空间去缓存这些数据是一个值得思考的问题:缓存开大了会浪费FPGA存储资源,缓存开小了会丢失数据,因此如何去计算最小FIFO深度(保证数据不丢失的最小FIFO深度)值得我们讨论。

一、数据突发长度(burst length)

如前所述,FIFO用于缓存较慢模块来不及读取的数据,但是应注意:FIFO仅在数据突发时才有效; 即FIFO并不适用于连续的数据输入和输出的场合, 因为连续的数据流意味着来不及读的数据不断累积,导致所需FIFO的大小无穷大。 因此只有在突发数据传输过程中讨论FIFO深度才是有意义的,有必要先介绍数据突发长度的概念:

数据突发长度:也就是说我们一次传递一包数据完成后再去传递下一包数据,我们把一段时间内传递的数据个数称为数据突发长度(burst length)

二、异步FIFO最小深度计算原理

FIFO的深度的确定,应从FIFO用于缓冲在数据突发场合来不及取走的数据这一本质入手:计算出在突发读写这段时间内有多少个数据没有被读走,就知道了FIFO的最小深度(FIFO的最小深度就等于没有被读走的数据个数


公式:

        {FIFO深度 /(写入速率 - 读出速率)} = {FIFO被填满时间}  >  {数据包传送时间}= {写入数据量 / 写入速率}

解释:

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值