MMM:Multi module memory
多模块存储器是一种空间并行技术
将地址分为两部分低地址
这种方式通过合理调动,使不用的请求原同时访问不同的存储体,可以实现并行工作
这种方式依然是串行存取,不能提高存储器的吞吐率
高地址为存储体的体内地址
低地址为存储体的体号
通常体内地址位数远远多于体号(地址)(好几个数量级)
程序连续地存放在相邻xianglin的模块中(因此,采用此方式编址的存储器也叫交叉存储器)
每个模块按照 m o d m \mod{m} modm交叉编址(也称低位交叉编址为模m编址)
m是参与编址的存储体模块数
通常m是2的方幂,可以使得电路简单
m也可以是质数,有利于减少存储器冲突
模 块 号 i = 单 元 地 址 / m 模块号i=单元地址/m 模块号i=单元地址/m
地址为 0 , m , ⋯ ( k − 1 ) m 0,m,\cdots{(k-1)m} 0,m,⋯(k−1)m(等差数列)的存储单元位于同一个模块 M 0 M_0 M0
| index of Storage Unit | M 0 M_0 M0 | M 1 M_1 M1 | M 2 M_2 M2 | M 3 M_3 M3 |
|---|---|---|---|---|
| 0 | 0 | 1 | 2 | 3 |
| 1 | 4 | 5 | 6 | 7 |
| 2 | 8 | 9 | 10 | 11 |
| 3 | 12 | 13 | 14 | 15 |
| … | … | … | … | … |
| k − 1 k-1 k−1 | 4 ( k − 1 ) 4(k-1) 4(k−1) | 1 + 4 ( k − 1 ) 1+4(k-1) 1+4(k−1) | 2 + 4 ( k − 1 ) 2+4(k-1) 2+4(k−1) | 3 + 4 ( k − 1 ) 3+4(k-1) 3+4(k−1) |
假定用m=4片 16 k × 8 16k\times{8} 16k×8的芯片组成 64 k × 8 64k\times{8} 64k×8的低位交叉存储器
地址BFFFH所在芯片的最小地址k?
即,芯片的体号k
地址分为体内地址和体号
低位交叉存储器的高位地址为体内地址
低位地址为体号
体号的位数取决于芯片数量m=4, log 2 4 = 2 \log_2{4}=2 log24=2,因此需要用2bit来表示体号
设模块字长等于数据总线宽度
模块存取周期为T
cpu每次访问一个存储体(多模块中的一个)
存取周期:从开始访问到结束对某个模块的访问需要的时间为存取周期 T c , 简 记 为 T T_c,简记为T Tc,简记为T
传输周期为 T r , 简 称 为 r T_r,简称为r Tr,简称为r
假设
T=200ns;
r=50ns
cpu经过时间r的延迟后,启动下个模块的访问
之所以把延迟定为r,是因为
如果启动2个存储模块的时间间隔小于总线传输周期,那么会造成总线冲突
它们间隔不能够比总线传输周期r小(总线的分时特性)
同时由于每个存储体的性能一样(存取周期一样)
又考虑到cpu可能对同一个模块的多次访问,那么第二次访问到来之前必须保证前一次的访问任务结束
也就是说,第二次访问同一个模块 M i M_i Mi的时间距离第一次的时间间隔至少为存取周期 T c T_c Tc
基于上述分析,可以得出使得流水访问达到最高效率的条件:
模块字长等于数据总线的宽度,则每个存储字可以一次性传送完毕
cpu对m=4体交叉存储器的访问采用流水的方式访问
那么连续访存的大致过程
对于m体低位交叉存储器,存取m位耗费的时间由公式
最理想的情况下:平均访问一个存储字的时间
该式子的极限为:
lim m → ∞ t a = r \lim\limits_{m\to{\infin}}t_a=r m→∞limta=r
实际情况,m往往会取得很大,因此平均存取一个字的时间趋近于r
在m不太大(比如取4的时候,视情况有时可以近似认为 t a = r t_a=r ta=r)
设一个四体并行交叉存储器
每个存储体模块的容量是 16 k × 32 16k\times{32} 16k×32
存取周期为200ns
总线周期为50ns
那么200ns内存储器最多可以提供多少数据给cpu?
从每个存储体模块并行工作的角度看,每个周期4个存储体,可以各自独立地提供一个存储字(32bit)
某计算机按字节寻址
分析:
多体存储器模块数为m=4
log 2 4 = 2 \log_2{4}=2 log24=2
即看数据x的地址的二进制形式的最后两位即可判断出变量的首字节是保存在哪个模块(4个模块中的哪个)
…AH=…1010H,末两位为10,则首字节存放在10号存储体模块
| 00 | 01 | 10 | 11 | |
|---|---|---|---|---|
| … | … | … | … | … |
| a | b | |||
| c | d | e | f | |
| g | h |
从字节a到字节h都是数据x的组成部分
每个存取周期,可以对四个存储体各区一个字节数据
假定用若干 2 k × 4 2k\times{4} 2k×4bit的芯片组成一个 8 k × 8 8k\times{8} 8k×8bit的存储器,则地址0B1FH所在芯片的最小地址?
容易看出,需要 m = 4 × 2 m=4\times{2} m=4×2片芯片,
每两片1组,构成 2 k × 8 2k\times{8} 2k×8bit的芯片组
在将4组8位芯片再次进行字扩展,得到 8 k × 8 b i t 8k\times{8}bit 8k×8bit的芯片
第一组 2 k × 8 2k\times{8} 2k×8bit芯片负责的地址范围
一般此类问题是以存储字进行编址(地址+1,相当于指向下一个存储单元,并且指的是位扩展(即字长位数扩展)之后)的字长
根据芯片容量以及每个存储字的字长,可以计算每个芯片编址的编址区间(或者区间宽度 Δ \Delta Δ)
2 k × 8 b i t 8 b i t = 2 k = 2 11 \frac{2k\times{8bit}}{8bit}=2k=2^{11} 8bit2k×8bit=2k=211
由于共有4组芯片( 2 k × 8 b i t 2k\times{8bit} 2k×8bit),所以需要地址线条数 log 2 4 = 2 \log_2{4}=2 log24=2条来作为译码器输入产生4种不同片选信号(对应为地址码中的片内地址最高位再高2位
因此本例中,需要2+11=13bit,就可以完成全部存储单元的寻址(8bit拼接单元)
其中最高两位可以是
所以,4组2k$\times$8位芯片的寻址区间分别为:
| 芯片组编号(体号) | 最低地址 | 最高地址 |
|---|
最低地址
最高地址分别是:
综上,各片地址范围:
0B1FH显然位于第二个芯片中(比较最高两位十六进制即可)
那么第二个芯片的其实地址就是 0800 H 0800H 0800H
某计算机按照字节编址
存储器容量64KB
主存地址 4000 H ∼ 5 F F F H 4000H\sim{5FFFH} 4000H∼5FFFH为ROM区
其余区域为RAM区
使用 4 M × 4 b i t 4M\times{4}bit 4M×4bit的SRAM芯片进行设计,需要多少片?
SRAM是静态RAM,是也是易失性存储器,可以用来构造RAM(cache)
RMA size
m= 56 k B 8 k × 0.5 B = 14 \frac{56kB}{8k\times{0.5B}}=14 8k×0.5B56kB=14
假设DRAM芯片中存储阵列的行数为r;列数为c
对于一个 2 K × 1 b i t 2K\times{1}bit 2K×1bit的DRAM芯片,为了
首先根据 DRAM采用的是行列地址线复用技术, 我们尽量选用行列差值不要太大的。
对于B、C 选项, 地址线只需 6 根(取行或列所需地址线的最大值,轻松排除A、D 选项。
其次,为了 减小刷新开销,而 DRAM 一般是按行刷新的,所以应选行数值较少的