简单的FIFO深度计算--回忆只是因为忘记
之前就想过记录一下自己接触到的FIFO深度计算的问题,但是忘记才使得拖到现在,现在正式开始。
什么是FIFO的深度及其作用?
个人理解:首先FIFO深度问题只会存在异步FIFO电路中,因为同步FIFO中读写时钟一致,只要读写使能有效,即可在同一时刻进行读或写。但是对于异步FIFO电路,因为读写时钟不一致,考虑最为极端的情况,写时钟较快,读时钟较慢,即进多出少,为了不使存储的数据超出深度发生溢出丢失,就需要考虑FIFO的存储深度,作为数据的暂缓存储。
如何计算?:1写入一位数据所需时间;2计算要写入数据的总时间;3计算读出一位所需时间;4在写入总时间内,能够读出多少位数据;5写入数据减去已经读写的数据即为FIFO的深度。
例如:
写时钟50MHZ,读时钟20MHZ(读或写一位数据只需要一个时钟),将1000个数据顺利的进行写读传输,计算FIFO缓存深度
首先,写时钟为50MHZ,则写一个数据需要时间t=1/50MHZ=20ns。
写完1000个数据则需要总时间T=1000*20ns=20us
其次,读时钟为20MHZ,则读一个数据需要时间t1=1/20MHZ=50ns。
则在2us时间内,能读取数据个数N=20us/50ns=400。
也就是说在20us内,可以写入1000个数据,同时读出400个数据,还剩600个数据需要缓存到FIFO中,因此FIFO的深度至少为600。(不考虑计算上的失误)。
上面的例子为按时钟等间隔读写操作,那么非等间隔时钟读写呢?
写时钟为80MHZ,读时钟为50MHZ,每100个时钟写入40个数据,每10个时钟读出8个数据,随机写入,计数此时的FIFO深度?
因为只有100个时钟周期写入40个数据—可以理解为:40个时钟写入40个数据,剩余60时钟进入IDLE状态。因此考虑最坏情况:获得最大写入速率,最小读出速率。背靠背传输:首先60个IDLE,40个data,40个data,60个IDLE。
因此连续写入80个数据所需要的最快时间T=80*(1/80M)=1000us
读出一位数据所需时间t=(10/8)*(1/50M)=25ns
则在T时间内,读出数据个数N=1000/25=40
所有FIFO的深度为80-40=40