一、fifo
1、优点
(1)时序简单
fifo通过读写使能控制,只要不满就可以写入数据;只要不空就可读出数据。不需要关注数据在fifo内部的存储位置。
(2)问题定位简单
fifo的常见错误就是上/下溢出、非空情况不读、常空、常满等,容易定位。
(3)好的扩展性
fifo不仅可当做缓存,同时也是很好的逻辑隔离单元,读或写逻辑部分的修改不影响对方的写或读逻辑,减少了逻辑耦合。
2、缺点
(1)首先不能控制地址,也就不能控制数据写入和读出的位置,所以不能存放表项;
(2)从资源的角度来看,需要有额外的逻辑来控制读写,还要产生空、满信号等;
(3)在一些特殊的应用场景下,比如对数据从写入到读出有延时需求的场景,不同的FIFO设计,有可能不满足要求。
二、ram
1、优点
(1)存放表项
由于RAM的读写地址可以由用户自己控制,所以RAM是FPGA内存放大表项的几乎唯一的选择。
(2)覆盖
在数据需要丢弃的场景中,可以通过重复写的方式来覆盖原来的数据,从而实现丢弃的功能。
(3)回读
在有的场景中,同一个数据可能需要从缓存中多次读出,这种场景下RAM也是唯一的选择
2、缺点
(1)读写控制
相比FIFO的读写控制,增加了地址这个控制信号,地址信号是比较容易引起问题,常见的就是地址错误导致数据写入错误。
(2)溢出
由于RAM没有空满状态,RAM作为缓存的时候,写入和读出的逻辑,需要从方案上保证不溢出,复杂度略有增加。
(3)问题定位难
除了上述地址错误导致写入的数据错误不好定位外,RAM没有空满状态,做缓存的时候,RAM的溢出同样不好定位。