FIFO和RAM,到底用哪个?

电子说

1.3w人已加入

描述

在FPGA的设计中的,内部的FIFO和RAM是两种非常常见的存储单元。有的场景是只能使用RAM,比如存放表项的时候,有的场景是RAM和FIFO都可以使用,比如存放数据的时候,从功能的角度来讲,FPGAer都知道这两种存储单元如何使用,但是从工程的角度,比如板上问题的定位、存储单位读写逻辑的修改和维护等方面来看,用FIFO还是用RAM还是有点点讲究了。

FIFO

关于FIFO的基本原理,可以参考FIFO的应用,里面对FIFO有非常详细的介绍。这里从优缺点2个方面重新看到FIFO

FIFO的优点

从使用FIFO的角度来看,FIFO优点很明显,使用简单,问题定位也方便。

首先是时序简单:FIFO通过读写使能控制,只要不满,就可以写入数据;只要不空,就可以读出数据。不需要关心数据在内部的存储位置。

定位问题简单:在工程实践中,对FIFO的问题定位比较简单,常见的错误就是上下溢出、非空情况下不读、长空长满等。这些现象FIFO一般都给出了相应的信号,所以非常好定位。

扩展性好:FIFO不仅仅是一个缓存,同时也很好的逻辑隔离单元,写逻辑部分的修改不影响读逻辑;同理读逻辑部分的修改不影响写逻辑,减少了逻辑的耦合性。

FIFO的缺点

FIFO的缺点,首先不能控制地址,也就不能控制数据写入和读出的位置,所以不能存放表项;还有一个缺点就是从资源的角度来看,需要有额外的逻辑来控制读写,还要产生空、满信号等;最后在一些特殊的应用场景下,比如对数据从写入到读出有延时需求的场景,不同的FIFO设计,有可能不满足要求。

RAM

关于RAM的基础原理,前面有也有过详细的介绍,可以参考RAM的应用。

RAM的优点

存放表项:由于RAM的读写地址可以由用户自己控制,所以RAM是FPGA内存放大表项的几乎唯一的选择。

覆盖:在数据需要丢弃的场景中,可以通过重复写的方式来覆盖原来的数据,从而实现丢弃的功能。

回读:在有的场景中,同一个数据可能需要从缓存中多次读出,这种场景下RAM也是唯一的选择。

RAM的缺点

读写控制:相比FIFO的读写控制,增加了地址这个控制信号。从以往的经验来看,地址信号是比较容易引起问题的,常见的就是地址错误导致数据写入错误。

溢出:由于RAM没有空满状态,RAM作为缓存的时候,写入和读出的逻辑,需要从方案上保证不溢出,复杂度略有增加。

问题定位难:除了上述地址错误导致写入的数据错误不好定位外,RAM没有空满状态,做缓存的时候,RAM的溢出同样不好定位。

总结

经过上面的分析,从功能、控制难易程度、问题定位难易程度考虑,我们可以总结出如下几条原则:

1、表项的存储采用RAM;

2、对数据有覆盖和回读需求的,使用RAM,使用的时候要做好读写长度的控制以及状态的监测;

3、除上述2种情况外,既可以用RAM又可以用FIFO的场景,一律用FIFO;

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分