Memory是大家Floorplan中经常使用到一个器件,而且需要花费不少时间去摆放它。Memory的种类很多,各种类型还分别具有不同的参数。那大家有没有想过,对一个设计来说,我们是如何去选择合适的memory类型?不同的类型有什么区别?
在后端设计实现中,我们把这一过程称为memory compiler。下面,我们来介绍下memory compiler的具体内容。
Memory用来存储和读写的大量的二进制数据。按功能上分类,基本可以分为两大类:只读存储器(ROM)和随机存取存储器(RAM)。ROM只能读,不能写;RAM既能读又能写。RAM具有易失性。断电以后,RAM中保存的数据将全部丢失;而ROM中的数据则可以长久保存。
RAM可以分为常用的SRAM和DRAM。SRAM是静态的存储器,存储单元是一个触发器,有0,1两个稳态;DRAM是动态的存储器,比SRAM要复杂一些,因为它会利用电容器存储电荷来保存0或1,需要在存储数据的过程中需要对于存储的信息不停的刷新。 这边还需要提到另一种常用的存储器,我们称为Register File。 它是由多个寄存器堆组成的阵列,内部结构功能上和SRAM完全类似。只是Register File去除了bist电路,容量较小,速度也比较快。
其实,存储器内部结构基本都差不多。一般由存储阵列,地址译码器和输出控制电路组成。我们把存储阵列以外的电路都称为外围电路(Periphery)。存储阵列是memory的核心区域,它有许多存储单元组成,每个存储单元存放一位二值数据。每次读出一组数据,称为一组字。一个字中所含的位数称为字长(Bit)。为了区别各个不同的字,给每个字赋予一个编号,称为地址,由译码器将地址代码转译。地址单元个数就是字数(Depth),用N表示,数值为2n,n为地址码的位数。
实际运用中,我们经常以字数(Depth)和字长(Bit)的乘积来表示存储器的容量。如下图中的ROM容量为28 X 1,有256个字,字长为1位,总共256个存储单元。容量越大,意味着能存储的数据越多。
一般foundry提供的memory databook上,会有以下参数指标,然后我们根据上面这个memory来对照一下这些指标。
WL: Physical Word Lines 字线 16条
BL:Physical Bit Lines 位线 16条
WD: Word Depth (WL * MUX)字数 16*16 =256
BIT: I/O Data Width (BL/MUX)字长 16/16 =1
Granularity:步长,WD或者BIT间隔的大小,只能按步长整数倍增加
BANK:分块,在Memory中,如果Bit line很长,会造成它的充放电速度很慢,导致memory的频率很低,这时,我们会将存储阵列分成N个bank来降低Bit line的长度
SEG: 分段,在Memory中,如果Word line很长,会影响它的性能,所以按Word line方向,把存储阵列分成N个segment.
BANK和SEG图示如下:
C64,C128,C256: Cell per bit line。每条bit line上挂的存储单元个数,经常有64,128,256等不同数字,该数值越大,表示配置的memory速度越慢,但是面积会越小;数值越小,表示配置的memory速度越快,但是面积会越大。
通常,大家还会看到类型HD,HC,HP等缩写,这些都是表征不同类型Bitcell和外围电路(Periphery)组成的。
HD:High Density Bitcell ,面积较小
HC:High Current Bitcell 高工作电流,access time较小
HP:High Performance Periphery ,速度快
LP:Low-Power Periphery ,功耗较小
ULP:Ultra-Low Power Periphery,超低功耗
ULL:Ultra-Low Leakage Periphery,超低漏电流
Memory端口
Memory端口类型也有很大的区别,通常分为单口和双口。
Register file速度快,面积小,容量小。小容量下,我们应该优先选择Register file,它可以分为以下三种:
Single port(1RW): 一个端口,只能执行读或者写操作
Two port(1R/1W):2个端口,一个端口读,另一个端口写,可以独立不同的时钟频率
Pseudo two port(1R/1W):2个端口,一个端口读,另一个端口写,只有一个时钟。
三个种类的示意图如下:
SRAM包含更多的模块,容量可以做得更大,可以拥有更多的bank,速度较慢,面积更大。大容量需求时,可以优先考虑SRAM。
SRAM按端口类型也可以分为以下三种:
Single port(1RW): 一个端口,只能执行读或者写操作
Dual port(2RW):2个端口,两个端口可以同时读写,可以独立不同的时钟频率
Pseudo two port(1R/1RW):2个端口,一个端口读,另一个端口可以读可以写,只有一个时钟。
示意图如下:
说了这么多,最后,如何运行memory compiler呢?
如果你理解了上文中的各个参数含义,那么运行memory compiler是非常简单的。一般来说,vendor会提供给我们memory compiler,当然每家提供的都不一样。下载到linux后,填入需要的各个参数(WD,BIT,MUX,Granularity等),然后它就会帮我们生成我们所需要的memory的物理和时序库。
全部0条评论
快来发表一下你的评论吧 !