6 内存¶
6.1 内存基础¶
内存墙(Memory Wall):CPU的速度快于内存,处理器的时间被内存速度所限制
解决方法:将内存层次化设计
速度逐渐变慢,处理的数据逐渐变多。
6.1.1 内存相关概念¶
内存定义:储存单元的集合以及储存单元之间传递信息的必要电路。
RAM(随机存取存储器):一种可以不依赖于所选的特定单元时间从任何单元传输的存储器。
内存操作:最主要是读和写
常见数据元素:位(bit)、字节(byte)、字(word)[不确定包含多少个字]
内存容量:地址深度\(\times\)字宽
内存框图:
-
Chip select(CS)[片选]/Chip enable(CE)
-
k address lines
- n data input lines
- Read and Write
内存阵列架构
6.1.2 内存基本操作¶
内存操作需要地址、数据、操作名称
三条总线连接内存与CPU: Address bus, Data bus, Control bus。连接到总线需要三态门,同时因为有多个内存形成阵列,片选信号(包含在Control bus中)来选择对应的内存。
控制信号:CS为0无操作;CS为1,\(Read/\overline {Write}\)为1,执行读操作;CS为1,\(Read/\overline {Write}\)为0,执行写操作。有些时候读和写的线是分开的。
Warning
执行写信号前,地址信号必须译码完成。
读和写两者操作完后都有恢复时间。
6.1.3 内存的一些分类¶
异步RAM与同步RAM
异步RAM不依赖于外部的时钟信号,只要接收到指令就会对数据进行处理,更常见。
同步RAM受外部时钟信号控制,速度更快。
静态与动态:静态RAM信息存储在锁存器上,动态RAM信息以电荷的形式储存在电容中,很短的时间就会消失,需要有时间刷新。
易失性(Volatile):电源断电后信息丢失。
非易失性(Non-Volatile):电源断电后信息仍然保留。
6.2 常见内存¶
6.2.1 Static RAM(SRAM)¶
储存单元由SR锁存器、双通道数据输入输出、字选线(译码出来的线)
RAM IC:
内存阵列可能会非常巨大,造成译码器非常大,于是我们可以将内存阵列拆分成行和列,使用两个译码器进行选择。将行译码接到字选线上,将列译码接到位选线上,然后将CS信号接到列译码器的使能端上。
内存扩大方法:地址深度扩展(word extension)或者字宽扩展(bit extension)
- 地址深度扩展:在片选信号前再加上一个译码器做一个选择。
- 字宽扩展:将数据输入线与输出线进行扩展
6.2.2 Dynamic RAM(DRAM)¶
读数据时,将外部的电压设置为亚稳态,根据亚稳态的灵敏性,观察联通后电容对外部电压的影响判断电容的电荷量。这种读取方式是破坏性的,但是我们可以等一会,让数据线对电容再进行充放电,恢复到原先的电量,所以需要一定的recovery time
DRAM Cell Array: 将两条线隔离开来,防止互相干扰
Bit Slice(位切片)
Address Multiplexing:为减少接口,像SRAM那样拆分地址,利用寄存器,分两次时钟节拍输入地址信号。利用这种方法,在接口数量不变的情况下可以适应不同的容量。
地址信号传输流程:
读的时间线:
其中RAS、CAS、Output enable均是CPU给内存的信号。Data valid是一个恢复时间
Why is the row address applied first?
行地址将数据传输到Sense Amps(信号放大器),列地址再将数据锁定住并传输到Data In/Out Buffers中。
DRAM Refresh
利用读操作会反向给储存单元充电这一特性,我们可以每64ms读一次以完成刷新操作。
- RAS-only refresh
当只给行控制信号而不给列控制信号,就会判断是刷新操作。缺点是需要一个外部逻辑器件
- CAS before RAS refresh
RAS在CAS后给出,异于正常的情况,判断为刷新信号。这种情况不需要给地址信号。每一个刷新周期,内部地址计数器会增加。
- Hidden refresh
在读和写操作后,拉长读写周期刷新其他数据。
Refresh Mode
- Burst mode(爆发式刷新)
- Distributed mode(分布式刷新)
DRAM Types
- Synchronous DRAM (SDRAM)
- Double Data Rate SDRAM (DDR SDRAM)
- RAMBUS DRAM (RDRAM)