Memory Compiler的前生今世

描述

Memory是大家Floorplan中经常使用到一个器件,而且需要花费不少时间去摆放它。Memory的种类很多,各种类型还分别具有不同的参数。那大家有没有想过,对一个设计来说,我们是如何去选择合适的memory类型?不同的类型有什么区别?

在后端设计实现中,我们把这一过程称为memory compiler。下面,我们来介绍下memory compiler的具体内容。

Memory种类

Memory用来存储和读写的大量的二进制数据。按功能上分类,基本可以分为两大类:只读存储器(ROM)和随机存取存储器(RAM)。ROM只能读,不能写;RAM既能读又能写。RAM具有易失性。断电以后,RAM中保存的数据将全部丢失;而ROM中的数据则可以长久保存。

RAM可以分为常用的SRAM和DRAM。SRAM是静态的存储器,存储单元是一个触发器,有0,1两个稳态;DRAM是动态的存储器,比SRAM要复杂一些,因为它会利用电容器存储电荷来保存0或1,需要在存储数据的过程中需要对于存储的信息不停的刷新。 这边还需要提到另一种常用的存储器,我们称为Register File。 它是由多个寄存器堆组成的阵列,内部结构功能上和SRAM完全类似。只是Register File去除了bist电路,容量较小,速度也比较快。

Memory结构

其实,存储器内部结构基本都差不多。一般由存储阵列,地址译码器和输出控制电路组成。我们把存储阵列以外的电路都称为外围电路(Periphery)。存储阵列是memory的核心区域,它有许多存储单元组成,每个存储单元存放一位二值数据。每次读出一组数据,称为一组字。一个字中所含的位数称为字长(Bit)。为了区别各个不同的字,给每个字赋予一个编号,称为地址,由译码器将地址代码转译。地址单元个数就是字数(Depth),用N表示,数值为2n,n为地址码的位数。

实际运用中,我们经常以字数(Depth)和字长(Bit)的乘积来表示存储器的容量。如下图中的ROM容量为28  X 1,有256个字,字长为1位,总共256个存储单元。容量越大,意味着能存储的数据越多。

ROM

Memory配置

一般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图示如下:

ROM

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个端口,一个端口读,另一个端口写,只有一个时钟。

三个种类的示意图如下:

ROM

SRAM包含更多的模块,容量可以做得更大,可以拥有更多的bank,速度较慢,面积更大。大容量需求时,可以优先考虑SRAM。

SRAM按端口类型也可以分为以下三种:

Single port(1RW): 一个端口,只能执行读或者写操作

Dual port(2RW):2个端口,两个端口可以同时读写,可以独立不同的时钟频率

Pseudo two port(1R/1RW):2个端口,一个端口读,另一个端口可以读可以写,只有一个时钟。

示意图如下:

ROM

Memory compiler方法

说了这么多,最后,如何运行memory compiler呢? 

如果你理解了上文中的各个参数含义,那么运行memory compiler是非常简单的。一般来说,vendor会提供给我们memory compiler,当然每家提供的都不一样。下载到linux后,填入需要的各个参数(WD,BIT,MUX,Granularity等),然后它就会帮我们生成我们所需要的memory的物理和时序库。

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

全部0条评论

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

×
20
完善资料,
赚取积分