内部存储器
回顾:存储器
存储器(Memory)由一定数量的单元构成,每个单元可以被唯一标识,每个单元都有存储一个数值的能力
- 地址:单元的唯一标识符(采用二进制)
- 地址空间:可唯一标识的单元总数
- 寻址能力:计算机系统的地址总线或地址编码所能生成的唯一内存地址的总数量
- 大多数存储器是字节寻址的,而执行科学计算的计算机通常是64位寻址的
存储器层次结构
冯诺伊曼结构里的存储器只有主存
半导体存储器
随机存取存储器 Random-Access Memory(RAM)
- 可以简单快速地进行读/写操作(因为找到一个地方就放进去)
- 易失的(Volatile)—一拔电就没了!要求电源持续供电才能保存位值
分类:
- 动态RAM(DRAM):Dynamic RAM
- 静态RAM(SRAM):Static RAM
DRAM
- 在电容器上用电容充电的方式存储数据—电容器中有无电荷在分别代表二进制的1与0
- 需要周期地充电刷新以维护数据存储—原因:电容器有漏电的自然趋势
由一个阈值来确定电荷是被解释为1还是0
SRAM
SRAM效率比DRAM高,但是集成度低,所以会去做一些速度要求高,但是容量要求低的任务
- 使用传统触发器、逻辑门配置来存储二进制值(使用与处理器相同的逻辑元件)
- 只要有电源,就可以一直维持数据
- DRAM比SRAM具有更简单、更小的位元,但要求能支持刷新的电路
- DRAM比相应的SRAM密度更高,价格更低
- SRAM通常比DRAM快
- DRAM更倾向于满足大容量存储器的需求,SRAM一般用于高速缓存,DRAM用于主存
高级的DRAM架构
问题:传统的DRAM芯片受到其内部架构和与处理器内存总线接口的限制
SDRAM(Synchronous DRAM,同步DRAM)
传统DRAM是异步的
- 处理器向内存提供地址和控制信号,表示内存中特定单元的一组数据应该被读出或写入DRAM
- DRAM执行各种内部功能,如激活行和列地址线的高电容,读取数据,以及通过输出缓冲将数据输出,处理器只能等待这段延迟,即存取时间
- 延时后,DRAM才写入或读取数据
- SDRAM与处理器的数据交互同步与外部的时钟信号,并且以处理器/存储器总 线的最高速度运行,而不需要插入等待状态
- 由于SDRAM随系统时钟及时移动数据,CPU知道数据何时准备好,控制器可 以完成其它工作
DDR SDRAM(Double-Data-Rate SDRAM,双速率SDRAM)
- 每个时钟周期发送两次数据,一次在时钟脉冲的上升沿,一次在下降沿
- DDR ➔ DDR2 ➔ DDR3 ➔ DDR4
- 增加操作频率
- 增加预取缓冲区
半导体存储器类型
只读存储器可不可以写入?当然了!不然你读什么呢!
所以含义是:写完之后不能改!
ROM(Read-only memory,只读存储器)
为什么需要ROM?—最重要的原因,非易失的!
特性
- 非易失的:不要求供电来维持数据
- 可读,但不能写入新数据
应用
微程序设计,库子程序,系统程序,函数表
问题
- 无出错处理机会:如果有一位出错,整批的ROM芯片只能报废
- 用户无法写入数据:唯一的数据写入机会在出厂时完成
举个显而易见的例子:恢复出厂设置!出厂设置存在ROM里,岂不美哉?
PROM(Programmable ROM,可编程ROM)
特性
- 非易失的
- 只能被写入一次
- 写过程是用电信号执行
- 需要特殊设备来完成写或“编程”过程
与ROM的对比
- PROM提供了灵活性和方便性
- ROM在大批量生产领域仍具有吸引力
Read-Mostly Memory(主要进行读操作的存储器)
特性
- 非易失的
- 写操作与读操作相比,较为困难
应用
读操作比写操作频繁得多的场景
类型
- EPROM
- EEPROM
- Flash memory
EPROM(Erasable programmable read-only memory,可擦除可编程“只读”存储器)
特性
- 光擦除
- 擦除:在写操作前将封装芯片暴露在紫外线下
- 所有的存储单元都变回相同的初始状态
- 每次擦除需要约20分钟
- 电写入
与PROM对比:EPROM更贵,但具有可多次改写的优点
EEPROM(Electrically erasable programmable read-only memory,电可擦除可编程“只读”存储器)
特性
- 可以随时写入而不删除之前的内容
- 只更新寻址到的一个或多个字节
- 写操作每字节需要几百微秒
与EPROM对比:EEPROM更贵,且密度低,支持小容量芯片
Flash Memory(快闪存储器)
特性
- 电可擦除:与EEPROM相同,优于EPROM
- 擦除时间为几秒:优于EPROM,不如EEPROM
- 可以在块级擦除,不能在字节级擦除:优于EPROM,不如EEPROM
- 达到与EPROM相同的密度:优于EEPROM
与EPROM、EEPROM对比:价格和功能介于EPROM和EEPROM之间
从位元到主存
- DRAM采用行列分时寻址(节省引脚)
- DRAM需要定期刷新,由刷新计数器控制
- 存储阵列由电容+晶体管组成,体积小、速度较慢
- 控制信号RAS/CAS/WE/OE共同确定操作类型
- 一次读写通常涉及整行的访问(行缓冲机制)
寻址单元
寻址单元(Addressable unit):由若干相同地址的位元组成
寻址模式:
- 字节(Byte):常用
- 字(Word)
存储阵列
存储阵列(Memory Array):由大量寻址单元组成
一、总体概念
这是一张典型的 DRAM(Dynamic RAM)内部结构框图。
DRAM的核心思想是:
用电容存储一个比特电荷(有电代表1,无电代表0)。 因为电容会漏电,所以需要定期刷新。
二、核心组成部分概览
图中主要包含四大部分:
| 模块 | 功能 | 备注 |
|---|---|---|
| 存储阵列 | 物理存储单元(每个存储单元=1位bit) | 由电容+晶体管组成 |
| 地址电路 | 负责选中要访问的行/列 | 包括行列地址缓冲器与译码器 |
| 刷新电路 | 负责周期性重写数据,防止漏电丢失 | 包括刷新计数器与MUX |
| 控制与数据电路 | 管理信号与数据输入输出 | 包括RAS、CAS、WE、OE控制信号 |
三、存储阵列
图中标注:
存储阵列:2048 × 2048 × 4
含义如下:
- 2048行 × 2048列 → 每个交叉点为1个存储单元(bit)
- 每个地址单元可输出 4位数据(×4),即一次访问4个bit
因此该DRAM的总容量为: [ 2048 × 2048 × 4 = 16, Mbit ]
存储阵列内部结构
- 每个bit 由一个晶体管和一个电容构成(称为1T1C结构)
- 电容存放电荷(表示1),漏电后需刷新
- 晶体管由行线(word line)和列线(bit line)控制
- 行线选中一整行单元(由行译码器控制)
- 列线选中列中具体数据(由列译码器控制)
四、控制信号(RAS、CAS、WE、OE)
这四个信号是DRAM的“指挥官”:
| 信号 | 全称 | 功能 |
|---|---|---|
| RAS | Row Address Strobe | 行选通信号,锁存行地址 |
| CAS | Column Address Strobe | 列选通信号,锁存列地址 |
| WE | Write Enable | 为低时写入,为高时读出 |
| OE | Output Enable | 启用输出缓冲器,将数据送出 |
五、数据通路
右侧的部分:
数据输入缓冲器 / 数据输出缓冲器 → D₁~D₄
说明:
- 读操作:数据从存储阵列 → 读放大器 → 输出缓冲器 → D端口
- 写操作:数据从D端口 → 输入缓冲器 → 存储阵列
- 由于×4结构,意味着一次可读/写4位(通常对应1个字节的1/2)
六、知识总结图
| 模块 | 作用 | 信号参与 |
|---|---|---|
| 地址缓冲器 | 接收A₀~A₁₀,分时作为行/列地址 | RAS, CAS |
| 存储阵列 | 实际存数据 | 行、列译码器 |
| 刷新计数器 | 定期遍历所有行刷新 | 时钟或内部刷新控制 |
| 控制逻辑 | 协调读写时序 | RAS, CAS, WE, OE |
| 数据缓冲 | 管理数据I/O方向 | D₁~D₄ |
为什么存储阵列用一个“框框”,而不是一个长条呢?— 2n到n^2^!
在DRAM中,“存储阵列”是由大量存储单元(bit cells)组成的二维结构。 所以用方形或矩形框表示最直观,原因如下👇:
原因 说明 1️⃣ 真实结构是二维矩阵 存储阵列由行(word line)和列(bit line)交叉形成的“格子”,每个格子是一个bit单元(电容+晶体管)。所以本质上是一个二维网格,用方框比长条更符合实际。 2️⃣ “长条”会误导为线性存储结构 如果画成长条,人容易以为存储是按地址线性排列的(像磁带一样),但DRAM访问单位是“行×列”,不是连续一维地址。 3️⃣ 方便表达行列译码关系 方框让你可以从左边连“行译码器”,从下边连“列译码器”,直观显示“行列交叉寻址”的原理。 4️⃣ 逻辑与版图一致 在芯片版图上,DRAM的存储单元就是排成二维阵列状(非常规则的矩形阵列),工程上这样画也方便对应电路布局。
- “长条”适合画 SRAM(静态RAM) 的示意图,因为SRAM通常每个字节单独放在一小块逻辑区,行列结构不明显;
- “方框”适合画 DRAM,因为其行/列寻址和行刷新都依赖二维阵列结构。
✅ 总结一句话:
存储阵列画成方框,是为了体现它的“二维矩阵”结构与行列寻址特性,这正是DRAM的核心设计思想。
如何寻址
在DRAM中,地址信号分两次传入(称为行列分时寻址):
- 第一次输入行地址
- 地址信号 A₀~A₁₀(部分) → 行地址缓冲器
- 由 RAS(Row Address Strobe) 触发
- 行译码器选中一整行
- 第二次输入列地址
- 同一组引脚再次输入列地址
- 由 CAS(Column Address Strobe) 触发
- 列译码器选中列 → 选中精确单元
这种方法节省了引脚(因为行、列共用地址线)。
地址译码器
- 一个 n 位译码器有 2^n^ 种输出.
- 当所有 n 个寻址位都满足条件时,该输出为1
- 任何时候,只有一个输出是1,其他的都是0
如何刷新
电容存储电荷会随时间漏掉,因此必须周期性刷新(refresh)。
图中左上角有:
刷新计数器 → MUX → 行译码器
过程:
- 刷新计数器按顺序输出每一行地址(0、1、2、…);
- 通过多路选择器(MUX)接入行译码器;
- 行译码器选中一行;
- 将该行的数据读出再写回,从而恢复电荷。
每次刷新一行,通常要求在几毫秒内刷新完全部行(比如64ms刷新所有2048行)
| 刷新方式 | 工作机制 | 优点 | 缺点 |
|---|---|---|---|
| 集中式刷新 | 在固定的时间周期内(如 64ms 的刷新间隔)停止所有读写操作,集中地对所有存储行进行逐行刷新。 | 控制逻辑简单。 | 在刷新周期内会产生一段死时间,期间无法进行任何内存访问,会降低系统性能。 |
| 分散式刷新 | 将刷新操作分散到每个正常的读写周期中。在一个存储周期内,先完成读写操作,随后进行一次刷新操作。 | 不存在集中的“死时间”,系统运行更平稳。 | 增加了每个存储周期的时长,相当于变相降低了内存的读写速度。 |
| 异步刷新 | 仍然是每 64ms 刷新所有行一遍,但将刷新命令异步地、分散地发出。每一行都在自己需要刷新的时间点被刷新。 | 效率高,结合了以上两种方式的优点,既避免了长时的死时间,又不会显著增加单个周期的延迟。是现代DRAM最常用的方式。 | 控制逻辑相对复杂。 |
芯片
模块组织
主存
插槽:组合多个存储模块











