上一篇如何设计一个同步FIFO(一)中老李介绍了利用Flip Flop来作为存储单元的同步FIFO设计。这一篇咱们来看如何利用2 Port SRAM来作为存储单元设计同步FIFO。
开始往下读之前,老李先问一个问题,假如现在让你设计一个深度为N的基于2port SRAM的同步FIFO,请问至少需要多大的SRAM? 假设SRAM的位宽就是你的数据宽度,那么问题就是问你需要的SRAM的行数至少是多少?如果你觉得答案是显而易见的N,那么你值得读完这一篇。
首先来说为什么要用SRAM设计FIFO,很简单为了省面积。我们说存1bit的数据,SRAM里一个bit cell经典结构是6个晶体管,而一个flip flop需要的晶体管在20个左右,那么从面积上来说,肯定是SRAM小对吧?但是这里面有个平衡点,对于一块SRAM,算面积的时候不能仅仅算里面存储单元bit cell的面积,还要算外围的decode逻辑的面积。当SRAM的row size x column size比较小的时候,外围的decode逻辑占的比重比较大,反而这个时候SRAM的总面积不如row x column个flop的面积小。至于这个转折点要看工艺和memory compiler的data sheet,具体面积要拿SRAM的data sheet去比较。老李自己总结的一个经验,不保证完全准确,在5nm工艺下,这个转折点大概在2k bit,低于2k bit,比如16x32的大小,那还是Flop划算,如果远大于2k bit,那么就用SRAM,差不多在2-3k bit量级的时候要根据memory datasheet里的area number来比较。
再来说说什么是2 port SRAM,2 port 通常也被称作dual port,一个端口为写端口,一个端口为读端口。这两个端口可以同时工作,同一个周期内既可以读,也可以写,简化的框图如下图所示
WCEN:Write Chip Enable Neg,当这个信号为0的时候,要写入数据
WDATA: 要写入的数据
WADDR:要写入的地址
RCEN:Read Chip Enable Negÿ