记忆深处有尘埃——Memory Compiler

640?wx_fmt=gif

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

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

Memory种类

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

RAM可以分为常用的SRAMDRAM。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个存储单元。容量越大,意味着能存储的数据越多。

 

640?wx_fmt=jpeg

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

640?wx_fmt=jpeg

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

三个种类的示意图如下:

640?wx_fmt=jpeg

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

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

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

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

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

示意图如下:

640?wx_fmt=jpeg

Memory compiler方法

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

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


640?wx_fmt=jpeg

公司招聘

各大IC公司招聘各类IC工程师

简历请戳邮箱:taozhang3260@163.com

  • 26
    点赞
  • 213
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
目前市面上有多个厂商提供 Memory Compiler 工具,以下是一些常见的 Memory Compiler 工具: 1. Synopsys DesignWare Memory Compiler:Synopsys 是一家知名的 EDA 公司,其 DesignWare Memory Compiler 是业界广泛使用的 Memory Compiler 工具之一。它提供了丰富的存储器 IP 库,支持多种存储器类型和规格,并具有强大的布局生成和时序优化能力。 2. Cadence Denali Memory Compiler:Cadence 的 Denali Memory Compiler 是另一个备受认可的 Memory Compiler 工具。它提供了高性能、低功耗的存储器子系统解决方案,支持广泛的存储器类型和规格,并具有先进的布局生成和时序优化功能。 3. Mentor Graphics Memory Compiler:Mentor Graphics(现为 Siemens 公司)也提供了一系列的 Memory Compiler 工具,用于生成高质量、高性能的存储器设计。它支持各种存储器类型和规格,并提供了全面的布局生成和电路优化功能。 4. ARM Artisan Memory Compiler:ARM 公司的 Artisan Memory Compiler 是专门用于 ARM 架构处理器设计的 Memory Compiler 工具。它提供了高速、低功耗的存储器解决方案,适用于各种 ARM 架构处理器的存储器需求。 5. Samsung Foundry Memory Compiler:三星电子的 Foundry Memory Compiler 是针对三星的制造工艺和存储器需求而定制的 Memory Compiler 工具。它提供了高性能、高可靠性的存储器设计解决方案,并充分利用了三星的制造工艺优势。 这只是一小部分市面上可用的 Memory Compiler 工具,不同厂商的 Memory Compiler 工具具有不同的特点和优势,用户可根据具体需求选择适合的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值