从蓄水池问题思考异步FIFO深度设计

前言

前段时间面试,因为没考虑过FIFO深度的问题,被面试官吊打一番,痛定思痛,写下这些。

蓄水池问题

一个蓄水池,体积为V,有进水口和出水口。进水口每秒流进m立方米的水,出水口每秒流出n立方米的水。初始时,蓄水池中没有水。

情形一:进水口,出水口一直工作

如果m=n,蓄水池可有可无,流进蓄水池的水会很快流出,蓄水池不会溢出;
如果m>n,经过一段时间t后,蓄水池溢出。
t = V / ( m − n ) t = V / (m-n) t=V/(mn)
可以推论,在这种情况下, 无论蓄水池有多大,总会溢出。
如果m<n,蓄水池永不会溢出。

情形二:出水口一直工作

该情形下,只关心m>n情况。
为了保证蓄水池不溢出,进水口在连续工作t时间后必须关闭,直到蓄水池中有剩余空间v0。进水口可再次连续工作的时间为 t 0 = v 0 / ( m − n ) t_0 = v_0/(m-n) t0=v0/(mn)
为了不频繁打开关闭进水口,可等到v0=V时再让进水口工作。
此种情形下,蓄水池的行为是,进水口一直工作到蓄水池满,关闭后等到蓄水池为空,再次工作直到蓄水池满。

FIFO深度问题

将FIFO类比成蓄水池。写时钟域吞吐量为m,读时钟域吞吐量为n。吞吐量表示为每秒钟数据量大小。
例如,写时钟为50MHz,每个时钟周期产生一个字节,则吞吐量为50M byte/s
若每两个时钟周期产生一个字节,则吞吐量为25M byte/s
m>n的情形下,若写时钟域一直工作,则无论FIFO为多深,总会溢出。因此,写时钟域只能工作一段时间,直到FIFO满。
在实际情况下,我们通常是先知道写时钟域能工作的时间,再反推出FIFO的最大深度。参考蓄水池问题,易得 f i f o d e p t h = t w r ∗ ( m − n ) fifo_{depth} = t_{wr} * (m-n) fifodepth=twr(mn)

举例

A/D采样速率50Mhz,dsp读A/D的速率40Mhz,要不丢失地将将10万个采样数据送入DSP ,在A/D和DSP之间至少加多大容量的(深度)FIFO才行??
答:A/D需工作的时间 t = 100 , 000 / 50 , 000 , 000 t=100,000/50,000,000 t=100,000/50,000,000
FIFO深度 = 1/500 *(50,000,000-40,000,000)= 20,000

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值