Memory的结构
ASIC中用到的memory一般是通过memory compiler生成的,生成一个mirco最终放到芯片的版图上。
生成的memory结构如下图所示:
可以看到每个bit是独立的一个小矩形块,矩形块的行数是r,列数是m,r*m即为ram的深度。例如,一个字宽4bit、字长1024的ram,其r*m即为1024.
其中m代表Multiplexer,一般取值4/8/16/32. 在ram字宽、字长确定的情况下,m的值决定了整个ram micro的形状。例如,m从4变为16,则每个bit的小矩形块的列数就从4变为16,总深度不变的情况下,行数会变成原来的1/4,小矩形块会变得更宽、更矮,整个ram micro的形状也会变得更宽、更矮。
上述是举例的最简单的single-bank情形,实际往往是多个bank的,如下图这样。但上述结论是一致的。
Memory Compiler的使用
ARM的memory compiler大家一般都用过,下面主要分析部分容易混淆的细节。
1、MUX值
MUX值就是上节提到的Multiplexer width,又称地址低位译码尺寸,深度要求是Muliplexer width的倍数。
2、尺寸限制
为了加快读写,RAM阵列一般分为多个bank和slice,若是两个bank,两个slice,所以地址必须是(Muliplexer width * 4)的倍数
记住以下结论:
- 字长*字宽=行数*列数
- 行数=字长/MUX
- 列数=字宽*MUX
- MUX越大,行数越少,列数越多,micro尺寸越矮、越宽
补充说明:
最近用到TSMC 28nm的compiler工具,它生成的mem尺寸刚好跟SMIC 40nm的尺寸相反,即字长对应了列数、字宽对应了行数。所以,使用不同厂家提供的工具时,要注意区别。但是上述结论都是统一的。
ARM的ram compiler支持的RAM array的尺寸是有限的,最大能生成256行和320列的array(UG里面说的是Rmax=512,Cmax=576,但实际并不是这样)
那么,
MAX Number of words = MAX Number of rows * Muliplexer width = 256 * Muliplexer width
例如,Muliplexer width=4时,最大字数为256*4=1024
MAX Number of bits = MAX Number of columns / Muliplexer width = 320 / Muliplexer width
例如,Muliplexer width=8时,最大字宽为320/8=40