[TOC]

image-20251121213339248 image-20251121213411412
  • 存储体:由若干存储单元组成,是存储数据的核心载体
  • 存储字长:每个存储单元可存储的二进制比特数(所有存储单元的存储字长相同),与存储器数据寄存器(MDR)位数相等(MDR 用于暂存读写的存储器数据,位数需匹配存储单元单次读写的比特数)

主存容量 = 存储字长(bit)× 存储单元数量 = 存储字长(bit)× 2^(MAR 位数)

存储器容量 = 存储字长 × 存储单元数量

2.2.1 存取时间

  1. 定义:启动一次存储器操作(读出 / 写入)到操作完成所经历的时间,反映存储器 “单次读写有多快”。
  2. 分类
    • 读出时间:从发出 “读指令” 到数据从存储器传输到 MDR 的时间
    • 写入时间:从发出 “写指令” 到数据从 MDR 写入存储器的时间
  3. 关键特点:读出时间与写入时间可能不相等

2.2.2 存取周期

  1. 定义:连续两次访问存储器(两次读、两次写或一读一写)的最短时间间隔,反映存储器 “连续读写的最小间隔”,是衡量存储器连续工作能力的关键指标。
  2. 与存取时间的关系
    • 主存的存取周期 = 存取时间 + 存储器状态稳定恢复时间(操作完成后,存储器需短暂时间恢复到可再次操作的稳定状态)
    • 结论:存取周期略大于存取时间(如某内存存取时间为 10ns,存取周期为 12ns,其中 2ns 为稳定恢复时间)

2.2.3 存储器带宽

  1. 定义:单位时间内存储器能传输的二进制信息总量,反映存储器 “数据传输速率”,单位为比特每秒(bit/s)、字节每秒(Byte/s,B/s)等(常用 KB/s、MB/s、GB/s 表示)。

  2. 影响因素

    • 单次传输数据位宽:位宽越大(如 64bit 比 32bit),单位时间内传输的数据量越多
    • 存取时间:存取时间越短,单位时间内可完成的传输次数越多
  3. 计算公式:存储器带宽 = 单次传输数据量(bit/Byte)÷ 存取周期(s)

主存的核心概念与基本硬件组成

2.1 主存的定义与访问特性

  • 定义:主存(内存)是机器指令直接操作的存储器,需基于 “存储地址” 实现随机访问(即通过地址可直接定位任意存储单元,无需顺序查找)。

  • 关键术语解析

    术语 定义 示例
    存储元件 主存的最小存储单位,仅能存储 1 位二进制数(0 或 1) 一个晶体管或电容元件
    存储单元 由若干存储元件组成,可存储 “一串二进制信息” 8 个存储元件构成 1 个 8 位存储单元
    存储字 存储单元中存放的 “一串二进制信息” 存储单元内的 “10110011”
    存储字长 存储字的二进制位数,常见 8 位(1 字节)、16 位、32 位、64 位 8 位存储字长对应 1 字节数据

2.2 主存的三大硬件组成部分

2.2.1 存储体

  • 功能:主存的 “数据存储核心”,由大量存储单元按一定规则排列构成,所有二进制数据最终存放在存储体的存储元件中。
  • 结构关系:存储体 → 存储单元 → 存储元件(1 位),即 “整体 - 局部 - 最小单位” 的层级结构。

2.2.2 存储器数据寄存器(MDR)

  • 功能:暂存两类数据
    1. 从存储体某存储单元读出的信息(准备送往 CPU);
    2. CPU 准备写入存储体某单元的信息(暂存后等待写入)。
  • 关键特性:MDR 的位数 必须与存储字长相等(若存储字长为 8 位,MDR 也为 8 位,确保能完整容纳 1 个存储字)。

2.2.3 存储器地址寄存器(MAR)

  • 功能:存放 “欲访问的存储单元的地址”(相当于主存的 “门牌号登记表”)。

  • 关键特性

    MAR 的位数决定主存可容纳的存储单元总数,计算公式为:存储单元总数 = $2^{(MAR位数)}$

    (原理:n 位二进制数可表示 $2^n$ 种不同地址,对应 $2^n$ 个存储单元)

单译码结构(线性译码结构)

2.1 核心原理

单译码结构仅使用一个地址译码器,将输入的 $N$ 位地址信号直接译为 $2^N$ 条译码输出线,每条输出线对应一个存储单元,通过该输出线的 “有效电平”(高电平或低电平,由硬件设计决定)选中唯一对应的存储单元。

双译码结构(二维译码结构)

3.1 核心原理

针对单译码结构的局限性,双译码结构将存储单元排列成 “二维阵列”(行 × 列),使用两个独立的译码器(行地址译码器、列地址译码器):

  1. 先将 N 位地址信号拆分为两部分(通常为等分为 $N/2$ 位,若 N 为奇数则按 “整数部分 + 余数部分” 拆分,如 N=7 时拆分为 3 位 + 4 位),分别送入行、列译码器。
  2. 行译码器输出 “行选信号”,选中某一行的所有存储单元;列译码器输出 “列选信号”,选中某一列的所有存储单元。
  3. 行选信号与列选信号的 “交集”(同时有效)对应唯一的存储单元,实现对存储单元的选中。
image-20251123173932640

image-20251123174352899

image-20251123174430848

image-20251123175343067

二、机器字长与存储字长的区别

1. 核心定义

术语 定义 关键说明
机器字长 CPU 一次能处理的二进制数据位数 决定 CPU 的运算能力,常见 32 位、64 位(如 Intel i5 处理器多为 64 位机器字长)
存储字长 主存中一个存储单元能存储的二进制位数 决定主存单次读写的基本数据量,由存储芯片硬件设计决定
关系 二者无强制相等关系,存储字长通常是字节(8 位)的 2 的整数次幂倍(1、2、4、8 字节等) 例:32 位机器字长的计算机,存储字长可设为 16 位(2 字节)、32 位(4 字节)或 64 位(8 字节)

2. 例题:机器字长与存储字长匹配分析

已知某计算机 CPU 为 64 位机器字长(一次能处理 64 位数据),主存存储字长设计为 32 位(一个存储单元存 32 位)。请问:

  • CPU 执行一次 64 位数据运算时,需要从主存读取几次数据?
  • 若存储字长改为 64 位,读取次数会如何变化?

解析

  • 64 位机器字长需 64 位数据,存储字长 32 位时,需读取 64 ÷ 32 = 2 次;

  • 存储字长改为 64 位时,单次读取即可获取 64 位数据,读取次数变为 1 次。

    结论:存储字长与机器字长匹配时,可减少主存访问次数,提升效率。

三、地址访问模式(主存按字节编址)

1. 基础规则

主存默认按字节编址(每个字节对应唯一地址,1 字节 = 8 位),存储字长是字节的 $2^n$倍( $n$ 为 0、1、2…),因此支持多粒度地址访问,常见访问类型如下:

访问类型 对应字节数 存储字长要求 地址特征(以 32 位机器为例)
字节访问 1 字节(8 位) 无特殊要求 地址可为任意值(如 0x0001、0x0002)
半字访问 2 字节(16 位) 存储字长$≥$2 字节 地址最低位为 0(即地址是 2 的整数倍,如 0x0002、0x0004)
字访问 4 字节(32 位) 存储字长$≥$4 字节 地址最低两位为 00(即地址是 4 的整数倍,如 0x0004、0x0008)
双字访问 8 字节(64 位) 存储字长$≥$8 字节 地址最低三位为 000(即地址是 8 的整数倍,如 0x0008、0x0010)

2. 地址转换关系(32 位机器示例)

以字节地址为基础,不同访问类型的地址转换遵循 “右移 n 位” 规则(n 为访问字节数的对数):

  • 字节地址 → 半字地址:

    字节地址逻辑右移 1 位

    (因 2 字节 = 2¹,右移 1 位等价于除以 2);

    例:字节地址 0x0004(二进制 100)右移 1 位 → 半字地址 0x0002(二进制 10)。

  • 字节地址 → 字地址:

    字节地址逻辑右移 2 位

    (4 字节 = 2²);

    例:字节地址 0x0008(二进制 1000)右移 2 位 → 字地址 0x0002(二进制 10)。

四、大端方式与小端方式(数据字节序)

1. 核心定义

数据的 “字节序” 指多字节数据在主存中的字节排列顺序,核心区别在于低字节与高字节的地址分配

存放方式 定义 优势
小端方式(Little-Endian) 数据的低字节存放在主存低地址高字节存放在主存高地址 符合地址与数据位权的逻辑(低地址对应低位数据),CPU 运算时无需调整字节顺序
大端方式(Big-Endian) 数据的高字节存放在主存低地址低字节存放在主存高地址 符合人类(大人)读写习惯(如十六进制数据从左到右对应高到低字节),便于数据直观查看

2. 实例对比(以 32 位数据 0x12345678 为例)

假设数据存放在主存地址 0x0000~0x0003 处,两种方式的字节分布如下:

地址 小端方式(低字节存低地址) 大端方式(高字节存低地址)
0x0000(低地址) 0x78(数据低字节) 0x12(数据高字节)
0x0001 0x56 0x34
0x0002 0x34 0x56
0x0003(高地址) 0x12(数据高字节) 0x78(数据低字节)

3. 例题:小端方式下的数据读取

已知某计算机采用小端方式,主存地址 0x0002~0x0005 处的字节数据依次为 0x88、0x77、0x66、0x55。若按 32 位字访问(地址 0x0002),读取的数据是多少?

解析

  • 小端规则:低地址存低字节,高地址存高字节;
  • 地址 0x0002(低地址)→ 低字节 0x88,地址 0x0005(高地址)→ 高字节 0x55;
  • 拼接顺序:高字节→低字节(0x55 0x66 0x77 0x88),即读取的数据为 0x55667788。

五、数据的边界对齐

1. 核心目的

为减少 CPU 访问主存的次数(提升效率):CPU 访问主存时,通常按 “存储字长” 单次读取,若数据未对齐,需多次读取并拼接,增加延迟;对齐后可单次读取,降低开销。

2. 对齐规则(按字节编址)

不同数据类型的起始地址需满足 “2ⁿ整数倍” 规则(n 为数据字节数的对数),具体如下:

数据类型 字节数 起始地址要求(最低 n 位) 示例(合法地址 / 非法地址)
字节(char) 1 无要求(n=0) 合法:0x0001、0x0002;无非法地址
半字(short) 2 最低 1 位为 0(n=1) 合法:0x0002、0x0004;非法:0x0003
字(int) 4 最低 2 位为 00(n=2) 合法:0x0004、0x0008;非法:0x0005
双字(long) 8 最低 3 位为 000(n=3) 合法:0x0008、0x0010;非法:0x0009

3. 对齐与存储空间的权衡

  • 优势:提升访问效率(如 32 位 int 存于 0x0004,CPU 单次读取即可);
  • 代价:可能浪费存储空间(称为 “内存空洞”)。

例题:结构体的边界对齐(32 位系统,编译器默认对齐)

定义 C 语言结构体如下:

1
2
3
4
5
struct Data {
char a; // 1字节
int b; // 4字节
short c; // 2字节
};

求该结构体的总字节数(不考虑编译器优化)。

解析

  1. 成员a(char):起始地址 0x0000(合法),占用 0x0000;
  2. 成员b(int):需起始地址最低 2 位为 00(4 的整数倍),因此从 0x0004 开始,占用 0x0004~0x0007(0x0001~0x0003 为内存空洞,浪费 3 字节);
  3. 成员c(short):需起始地址最低 1 位为 0(2 的整数倍),从 0x0008 开始,占用 0x0008~0x0009;
  4. 结构体总字节数:0x0009 - 0x0000 + 1 = 10 字节(实际占用 10 字节,含 3 字节空洞)。

六、408 真题实战(大端 / 小端 + 边界对齐)

1. 2012 年 408 真题(综合考察)

题目:

假设某计算机的主存按字节编址,Cache 采用直接映射方式,每个 Cache 块大小为 4 字节,主存块号为 3 的 Cache 块对应的主存地址范围是( )。

(注:题目核心关联 “地址与块号的对应”,需结合边界对齐,选项略,重点讲分析逻辑)

解析:

  • Cache 块大小 4 字节 → 块内偏移量占 2 位($2^2=4$);

  • 主存块号 = 3(二进制 11) → 主存地址结构:块号(高位)+ 块内偏移(低位);

  • 块内偏移范围 0~3(二进制 00~11);

  • 主存地址范围 = 块号 × 块大小~块号 × 块大小 + 块大小 - 1 = 3×4 ~ 3×4+3 = 12~15(十六进制 0x0C~0x0F)。

    答案:对应选项中地址范围为 0x0C~0x0F 的选项(通常为 D)。

2. 2018 年 408 真题(小端 + 补码)

题目:

若计算机主存按字节编址,采用小端方式存放数据。某指令周期内,CPU 需读取地址 0x100 处的 16 位补码整数,该整数的十六进制表示为 0x8000,则该整数的十进制值为( )。

$A. -32768$ $B. -128$ $C. 128$ $D. 32768$

解析:

  1. 16 位补码 0x8000 的二进制:1000 0000 0000 0000;

  2. 小端方式:地址 0x100 存低字节 0x00,地址 0x101 存高字节 0x80,拼接后仍为 0x8000;

  3. 补码转十进制:最高位 1(负数),数值位取反加 1:0111 1111 1111 1111 +1 = 1000 0000 0000 0000(即 32768),故十进制值为 - 32768。

    答案:A。

SRAM 定义与分类归属

  • 全称:静态随机存取存储器(Static Random Access Memory)
  • 核心特征:“静态” 指通电状态下,数据无需周期性刷新即可持续保持,区别于需定期刷新的动态随机存取存储器(DRAM)。
  • 易失性属性:SRAM 与 DRAM 均为易失性存储器,断电后存储的数据会立即丢失;而 ROM(只读存储器)为非易失性存储器,断电后数据仍可保留。
image-20251123210902992

存储元核心组成

典型 SRAM 存储元由 8 个 MOS 管(金属 - 氧化物 - 半导体场效应晶体管)构成,各 MOS 管功能分工明确:

MOS 管编号 功能分类 核心作用 等效理解
T1、T2 工作管 构成反相器,存储二进制位(0/1) 数据存储核心
T3、T4 负载管 提供稳定偏置电压,维持工作管状态 上拉电阻
T5~T8 门控管 控制存储元与位线的通断,实现读写控制 开关阀门

MOS 管开关工作原理

MOS 管是数字电路中的核心开关元件,其工作状态由栅极(G)输入电平控制:

  • 栅极输入高电平(1):源极(S)与漏极(D)导通,相当于开关闭合;

  • 栅极输入低电平(0):源极(S)与漏极(D)截止,相当于开关断开。

    (注:MOS 管符号中,G 为栅极、S 为源极、D 为漏极,是理解存储元工作的关键)

SRAM 存储元上电后的初始状态随机(可能是 0,也可能是 1),需通过写操作写入目标数据。

四、SRAM 存储元读操作原理

1. 操作前提

行选通线 X、列选通线 Y 均输入高电平(1) ,门控管 T5~T8 导通,存储元内部 A、B 点与外部位线 IO、IO 反(IŌ)连通。

2. 核心流程

  1. 存储元内部稳定电平(如 A 高 B 低)通过导通的门控管传递到位线;
  2. 位线 IO 与 IŌ的电平信号输入差分放大器,通过检测两路信号的电流方向差异,还原存储的二进制数据;
  3. 读操作不破坏原有数据:整个过程中 A、B 点电平保持不变,仅通过信号传递实现数据读取。

3. 与 DRAM 的关键区别

DRAM 的读操作具有 “破坏性”(读取后存储元电平会改变),需立即执行写操作恢复数据;而 SRAM 读操作无破坏性,无需额外恢复步骤。

五、SRAM 存储元写操作原理

1. 操作前提

与读操作一致,行选通线 X、列选通线 Y 均输入高电平(1) ,门控管 T5~T8 导通,建立存储元与位线的连接。

2. 核心流程(以 “写 0” 为例)

假设存储元当前存储比特 1(稳定状态:A 高 B 低),写入比特 0 的步骤:

  1. 向位线 IO 输入低电平,向 IŌ输入高电平
  2. 低电平通过导通的 T5 传递到 A 点,将 A 点拉低;
  3. A 点变为低电平→T2 截止→B 点失去接地通路,被 T3 上拉为高电平;
  4. B 点变为高电平→T1 导通→A 点通过 T1 接地,保持低电平;
  5. 最终形成稳定状态 “A 低 B 高”,完成比特 0 的写入。

3. 写操作本质

通过外部位线强制改变 A、B 点电平,打破原有稳定状态,建立新的对应存储数据的稳定状态。

例题 5:写操作流程分析

若 SRAM 存储元当前存储比特 0(A 低 B 高),要写入比特 1,需执行的步骤是( )

A. 向 IO 输入高电平,IŌ输入低电平 B. 向 IO 输入低电平,IŌ输入高电平

C. 行选通线 X 输入低电平 D. 无需改变位线电平,直接断开门控管

答案:A

解析:写入比特 1 需最终形成 “A 高 B 低” 的稳定状态,需通过位线强制改变电平:IO 输入高电平(拉高 A 点),IŌ输入低电平(拉低 B 点),配合门控管导通实现状态切换(A 正确);写操作需 X、Y 线为高电平(C 错误)。

六、操作后状态与 SRAM 存储元核心特点

1. 操作后状态维持

读 / 写操作完成后,行选通线 X、列选通线 Y 恢复为低电平→门控管 T5~T8 截止→存储元与位线断开;电源 VCC 通过 T3、T4 持续为工作管供电,维持 A、B 点的稳定电平,数据在断电前保持不变。

2. 核心特点(对比 DRAM)

特点 SRAM(静态) DRAM(动态)
数据保持 无需刷新,通电即稳定 需定期刷新(电容放电特性)
读写速度 快(无刷新延迟) 慢(刷新占用时间)
用管数量 8 个 / 存储元 1 个 / 存储元(电容 + MOS 管)
芯片面积 / 成本 面积大,成本高 面积小,成本低
功耗 高(持续供电维持状态) 低(仅刷新和读写时耗电)
典型应用 高速缓冲存储器(Cache) 计算机主存(内存)

例题 6:SRAM 应用场景判断

下列设备中,最可能使用 SRAM 作为存储介质的是( )

A. 笔记本电脑内存 B. CPU 的 L1 缓存 C. U 盘 D. 硬盘

答案:B

解析:笔记本内存用 DRAM(A 错误);U 盘和硬盘为非易失性存储(C、D 错误);CPU 缓存需高速读写,SRAM 的速度优势适配该场景(B 正确)。

习题1解析(答案B)

题目:某SRAM中每个存储单元为8位

  • Ⅰ. 数据线为8位
    正确。存储单元位数决定了数据线的宽度,8位单元需要8根数据线并行读写。
  • Ⅱ. 地址线为3位
    错误。地址线数量由存储容量(地址空间大小)决定,与单元位数无关。8位字长可以是任意容量。
  • Ⅲ. 存储字长为8位
    正确。“存储单元为8位” 直接对应存储字长(每次存取的数据宽度)为8位。
  • Ⅳ. 机器字长为8位
    错误。机器字长是CPU的属性,由CPU架构决定,不能从存储器参数推断。

结论:仅Ⅰ、Ⅲ正确 → 选B


习题2解析(答案B)

题目:某SRAM的存储容量为8K×8 位

  • 地址线计算
    8K=8×1024=213 个存储单元
    需要 13根地址线(A0​ ~ A12​ )才能寻址 213 个位置
  • 数据线计算
    每个单元8位 → 需要 8根数据线(D0​ ~ D7​ )

结论:13根地址线,8根数据线 → 选B


习题3解析(答案D)

题目:某SRAM芯片容量为256K×16 位,求除电源和接地外的最小引脚数

计算过程

  1. 地址线
    256K=256×1024=218 → 18根地址线
  2. 数据线
    16位字长 → 16根数据线
  3. 控制线(最小配置)
    • 片选信号(CS/CE):1根(必选,使能芯片)
    • 读/写控制(R/W):1根(高电平读,低电平写)
      最小情况下可省略独立的输出使能(OE),通过CS和R/W组合控制双向数据总线。
  4. 总引脚数
    18+16+2=36 根

结论:最小引脚数为36 → 选D

2.2.1 硬件组成

  • 核心元件:1 个增强型 MOS 管(控制数据读写通路)、1 个存储电容 C(暂存电荷表示数据)。
  • 电路连接:MOS 管漏极接存储电容 C,电容另一端接地(GND);MOS 管源极接位线(列线),栅极接字线(行线)。
  • image-20251126194049025

2.2.2 数据表示原理(二进制 0/1 的物理映射)

二进制数据 实现方式 关键过程
1 存储电容 C 充满电荷 MOS 管栅极加高电平(字线有效)→ 源漏极导通 → 位线提供高电平 → 电容充电至 VCC
0 存储电容 C 完全放电 MOS 管栅极加高电平(字线有效)→ 源漏极导通 → 电容通过位线放电 → 电荷释放至 GND
  • 电容参数:容量约为几十飞法(fF,1fF=10⁻¹⁵F),充电速度极快(<10ns),满足高频读写需求。

三、DRAM 的特殊问题:破坏性读与动态刷新

3.1 破坏性读操作(核心特性)

3.1.1 现象与原因

  • 现象:读取存储电容中的 “1”(充满电荷)时,电容会通过导通的 MOS 管向位线放电,导致电容电荷流失,数据从 “1” 变为 “0”,即读操作破坏原有数据。
  • 解决措施:数据恢复—— 读取数据后,立即通过位线重新向电容充电,恢复原有数据(由灵敏读出恢复放大器完成)。

3.1.2 例题:破坏性读操作的影响分析

若某 DRAM 存储元存储数据 “1”,在未执行数据恢复的情况下连续读取 2 次,第二次读取的结果是什么?

解:第二次读取结果为 0。理由:第一次读取时,存储电容向位线放电,数据从 “1” 变为 “0”;因未执行数据恢复,电容未重新充电,第二次读取时电容已无电荷,故结果为 0。

3.2 动态刷新(“动态” 的核心含义)

3.2.1 刷新原因

MOS 管存在漏电流(无法完美关断),存储电容中的电荷会缓慢泄漏,通常 “1” 的电荷只能保持 64ms(行业标准),超过时间后数据丢失。

3.2.2 刷新机制

  • 本质:定期(如每 64ms)对所有存储元执行 “伪读操作”—— 通过导通 MOS 管检测电容电荷,若电荷不足则重新充电,补充电荷以维持数据。
  • 注意:刷新操作不影响正常读写,但会占用存储控制器的少量时间(通常可通过 “隐藏刷新” 优化,不影响用户感知)。

四、DRAM 存储阵列扩展:从单个存储元到多 bit 存储

4.1 扩展原理(以 16bit 存储为例)

4.1.1 阵列结构

将 16 个 “1MOS+1 电容” 存储元排列为4 行 ×4 列的二维阵列,实现 “行选 + 列选” 的寻址方式:

  • 行线(字线):每一行所有存储元的 MOS 管栅极连接到同一条行线,控制整行存储元的导通 / 截止。
  • 列线(位线):每一列所有存储元的 MOS 管源极连接到同一条列线,传输列内存储元的数据。
  • 辅助电路:每一列需配备预充电控制电路灵敏读出恢复放大器(核心功能:预充电、信号检测、数据恢复)。

4.1.2 关键概念:寄生电容

  • 定义:列线因连接多个 MOS 管,自身存在的 “非设计性电容”(并非额外添加,而是导线与基板间的寄生效应)。
  • 参数:容量约为存储电容的 10 倍(如存储电容为 50fF,寄生电容约为 500fF),会影响位线电压变化幅度,需通过灵敏放大器检测微弱信号。

4.2 读操作完整流程(五步)

以读取 “第 2 行第 3 列存储元(数据为 1)” 为例,流程如下:

  1. 预充电操作:预充电电路将所有列线电压充至 VCC/2(如 VCC=3.3V,则充至 1.65V),随后关闭预充电电路,列线寄生电容保持该电压。
  2. 访问操作:向第 2 行行线输入高电平(行选有效),该行所有 MOS 管导通;第 2 行第 3 列存储元的电容(充满电荷)向列线放电,列线电压从 1.65V 升至 1.65V+ΔV(ΔV 约 0.1-0.5mV,微弱信号)。
  3. 信号检测:灵敏读出恢复放大器检测列线电压变化 —— 若电压升高(+ΔV),判定存储数据为 1;若电压降低(-ΔV),判定为 0。
  4. 数据恢复:放大器根据检测结果,将列线电压拉至 VCC(数据 1)或 GND(数据 0),通过导通的 MOS 管向存储电容重新充电 / 放电,恢复原有数据。
  5. 数据输出:向第 3 列列线输入列选通信号,列线数据通过 I/O 接口输出到外部(如 CPU)。

4.3 写操作流程(与读操作的差异)

  • 前四步:与读操作完全相同(预充电→访问→检测→恢复),目的是通过 “行刷新” 维持该行所有存储元的数据。
  • 第五步:数据输入—— 外部数据通过 I/O 接口送至列线,放大器将列线电压拉至对应电平(1→VCC,0→GND),通过导通的 MOS 管向存储电容充电 / 放电,完成数据写入。

image-20251126200230358

4.4 例题:DRAM 阵列读操作电压变化分析

已知某 DRAM 存储元的存储电容 C=40fF,列线寄生电容 C_par=400fF,预充电电压为 1.5V(VCC=3V)。当存储元存储 “1”(电容电压 3V)时,读取过程中列线电压最终变为多少?(忽略漏电流,电荷守恒:Q=C×V)

解:根据电荷守恒,存储电容放电前电荷 Q1=C×VCC=40fF×3V=120fC;放电后,存储电容与寄生电容并联,总电容 C_total=40fF+400fF=440fF;总电荷不变,故列线最终电压 V=Q1/C_total=120fC/440fF≈0.27V?

注意:实际场景中,预充电后列线已有 1.5V 电压(寄生电容电荷 Q_par=400fF×1.5V=600fC),总电荷应为 Q1+Q_par=120fC+600fC=720fC,最终电压 V=720fC/440fF≈1.64V,即 ΔV≈0.14V,符合灵敏放大器的检测范围。

五、DRAM 与 SRAM 核心特性对比(总结与区分)

对比维度 DRAM(动态随机存取存储器) SRAM(静态随机存取存储器)
存储元结构 1MOS 管 + 1 电容 6MOS 管双稳态电路
读操作特性 破坏性读(需数据恢复) 非破坏性读(无需恢复)
刷新需求 需定期刷新(64ms / 次) 无需刷新(断电前稳定)
地址线设计 行 / 列地址线复用(减少引脚) 行 / 列地址线独立(无需复用)
速度 慢(约 10-100ns,含刷新延迟) 快(约 1-10ns,无延迟)
集成度 高(单位面积存储量约为 SRAM 的 4 倍) 低(单位面积存储量小)
功耗 低(仅读写 / 刷新时耗电) 高(持续供电维持状态)
成本 低(单位存储成本约为 SRAM 的 1/5) 高(单位存储成本高)
典型应用 PC 内存(DDR4/DDR5)、服务器内存 CPU Cache(L1/L2/L3 Cache)

例题:根据需求选择存储类型

某高性能服务器需设计 “CPU 与内存之间的高速数据缓冲层”,要求 “速度极快、支持随机读写、无需频繁维护”,应选择 DRAM 还是 SRAM?并说明理由。

解:选择 SRAM。理由:高速数据缓冲层的核心需求是 “低延迟、无读写 / 刷新开销”,SRAM 无需刷新且读操作无破坏性,速度远快于 DRAM(可匹配 CPU 的 GHz 级主频);虽 SRAM 成本高,但缓冲层容量通常较小(如 L3 Cache 为 32MB/64MB),成本可接受,符合 “高速缓冲” 的应用场景。

核心技术:地址复用技术

  1. 技术目的:减少地址引脚数量(针对大容量 DRAM,降低芯片封装复杂度)

  2. 实现原理

    :行地址线与列地址线

    分时复用

    同一组地址引脚

    • 原需求:行地址 7 条 + 列地址 7 条 = 14 条地址线
    • 复用后:仅需 7 条地址引脚(行、列地址分不同时间通过这 7 条引脚传输)
  3. 地址锁存控制

    • 行地址锁存:通过行地址选通信号(RAS,低电平有效),将 7 位地址(A0-A6)锁存到行地址锁存器
    • 列地址锁存:通过列地址选通信号(CAS,低电平有效),将 7 位地址锁存到列地址锁存器
    • 时序配合:由时钟发生器提供定时,确保行、列地址分时传输不冲突
  4. 地址复用的额外作用:7 条行地址线可作为刷新地址,用于 DRAM 的逐行刷新(后续 4-3-2 已讲刷新,此处关联应用)

(三)数据输入 / 输出控制

  1. 数据传输特性:每次仅能输入或输出 1 位二进制信息(因容量为 16K×1 位,无多位并行传输能力),且输入、输出通道分开并支持锁存

  2. 控制信号规则

    控制信号 功能 有效电平
    CAS(列地址选通) 控制数据输出 低电平
    W(写使能)+CAS 共同控制数据输入 均为低电平
    RAS(行地址选通) 控制行地址锁存,兼作片选 低电平
    EN(使能) 辅助功能使能 高电平
  3. 特殊说明:2116 无独立片选信号(CS),由 RAS 和 CAS 共同代替片选功能(当 RAS、CAS 均为低电平时,芯片被选中)

二、考研真题解析(2018 年 408 真题)

(一)题目条件

已知 DRAM 芯片规格为 2K×1 位,采用地址复用技术,需确定行地址线、列地址线的合理分配(目标:减少刷新开销)

(二)解题步骤

  1. 第一步:计算总地址线需求

    • 2K=2¹¹,即需 11 条地址线才能寻址所有 2¹¹(2048)个存储单元
    • 因采用地址复用技术,实际地址引脚数为 “行地址线数 + 列地址线数” 的复用,需满足 “行地址线数 + 列地址线数 = 11”
  2. 第二步:列出两种地址分配方案

    方案 行地址线数 列地址线数 行选通线条数(2^ 行地址线数) 列选通线条数(2^ 列地址线数)
    方案一 6 条 5 条 2⁶=64 条 2⁵=32 条
    方案二 5 条 6 条 2⁵=32 条 2⁶=64 条
  3. 第三步:根据刷新规则选择最优方案

    • DRAM 刷新原理:按行刷新(每次刷新一行,行数越多,刷新次数越多,刷新开销越大)
    • 核心原则:减少行数→降低刷新开销
    • 结论:方案二(行 32 条、列 64 条)更优,对应选项 C

1. 存储器扩展概述

1.1 扩展的核心目的

解决“单存储芯片的容量不足”或“位宽不匹配CPU/系统需求”的问题,通过多芯片组合实现目标存储器的参数(容量、位宽)。

1.2 扩展的三种类型

  • 字扩展:仅增加存储容量(字数),位宽不变;
  • 位扩展:仅增加数据位宽,容量不变;
  • 字位同时扩展:同时增加容量+位宽

2. 字扩展(仅扩容,位宽不变)

2.1 定义

通过多片位宽与目标一致的存储芯片,组合成更大容量的存储器(仅增加“可存储的单元数量”)。

2.2 适用场景

单芯片位宽匹配CPU数据总线,但容量小于目标需求
例:CPU数据总线是8位,单芯片是256K×8位,需构建2M×8位存储器。

2.3 核心步骤

  1. 计算所需芯片数
    芯片数 = 目标容量 ÷ 单芯片容量
  2. 分配地址线
    • 片内地址线:数量由“单芯片容量”决定(公式:$2^n = 单芯片容量$,$n$为片内地址线数);
    • 片选地址线:数量由“芯片数”决定(公式:$2^m = 芯片数$,$m$为片选地址线数);
  3. 连接片选信号
    用“地址译码器”将“片选地址线”转换为“片选信号”,每片芯片对应1个独立片选信号(同一时间仅1片被选中);
  4. 统一连接公共信号
    所有芯片的地址线(片内部分)、数据线、控制线(读/写使能等) 直接并联。

2.4 典型例题

题目:CPU数据总线位宽8位,地址总线位宽21位;单SRAM芯片参数为256K×8位。需构建2M×8位存储器,完成以下步骤:

  1. 计算芯片数;
  2. 分配地址线;
  3. 选择译码器类型。

解答

  1. 芯片数 = $2M ÷ 256K = 2048K ÷ 256K = 8$片;
  2. 地址线分配:
    • 片内地址线:$2^n = 256K = 2^{18}$ → $n=18$(用CPU地址线$A_{0}~A_{17}$);
    • 片选地址线:$21-18=3$根(用CPU地址线$A_{18}~A_{20}$);
  3. 译码器类型:3根输入对应8个输出 → 选择“3-8译码器”(输出$\overline{Y_0}~\overline{Y_7}$分别控制8片芯片的片选端)。

3. 位扩展(仅加宽位宽,容量不变)

3.1 定义

通过多片容量与目标一致的存储芯片,组合成更宽位宽的存储器(仅增加“一次能传输的数据位数”)。

3.2 适用场景

单芯片容量匹配目标需求,但位宽小于CPU数据总线
例:CPU数据总线是8位,单芯片是1K×4位,需构建1K×8位存储器。

3.3 核心步骤

  1. 计算所需芯片数
    芯片数 = 目标位宽 ÷ 单芯片位宽
  2. 连接公共信号
    所有芯片的地址线、控制线、片选线 全部并联;
  3. 拼接数据线
    将各芯片的数据线按位拼接,组成目标位宽(如2片1K×4位芯片,分别输出$D_0~D_3$和$D_4~D_7$,拼接为8位)。

3.4 典型例题

题目:单存储芯片为1K×4位,需构建1K×8位存储器,完成以下步骤:

  1. 计算芯片数;
  2. 描述硬件连接逻辑。

解答

  1. 芯片数 = $8位 ÷ 4位 = 2$片;
  2. 连接逻辑:
    • 地址线:2片芯片的$A_0~A_9$(1K对应10根地址线)并联;
    • 控制线:2片芯片的“读使能$\overline{OE}$”“写使能$\overline{WE}$”并联;
    • 片选线:2片芯片的$\overline{CS}$并联;
    • 数据线:第1片输出$D_0~D_3$,第2片输出$D_4~D_7$,拼接为8位数据线。

4. 字位同时扩展(既扩容又加宽)

4.1 定义

同时组合“位扩展模块”与“字扩展”,实现容量和位宽同时满足目标需求

4.2 适用场景

单芯片既容量不足,位宽也不匹配目标
例:单芯片是1K×4位,需构建4K×8位存储器。

4.3 核心步骤

  1. 计算总芯片数
    总芯片数 = 字扩展数 × 位扩展数
    • 位扩展数 = 目标位宽 ÷ 单芯片位宽;
    • 字扩展数 = 目标容量 ÷ 单芯片容量;
  2. 先构建“位扩展模块”
    用“位扩展”将多片芯片拼成“1组与目标位宽一致的模块”;
  3. 再做“字扩展”
    用“地址译码器”对多组“位扩展模块”做片选,实现容量扩展;
  4. 统一连接公共信号
    所有模块的地址线、数据线、控制线 保持并联。

4.4 典型例题

题目:单存储芯片为1K×4位,需构建4K×8位存储器,完成以下步骤:

  1. 计算总芯片数;
  2. 描述扩展逻辑。

解答

  1. 总芯片数:
    • 位扩展数 = $8位 ÷ 4位 = 2$片/组;
    • 字扩展数 = $4K ÷ 1K = 4$组;
    • 总芯片数 = $4×2=8$片;
  2. 扩展逻辑:
    • 位扩展:每2片1K×4位芯片拼成1组1K×8位模块(地址线、控制线、片选线并联,数据线拼接为8位);
    • 字扩展:用“2-4译码器”(2根片选地址线)控制4组模块的片选端;
    • 最终:4组×1K=4K容量,8位位宽,满足4K×8位需求。

5. 三种扩展方式对比总结

扩展类型 核心变化 芯片数计算 关键连接点
字扩展 容量↑,位宽不变 目标容量÷单芯片容量 译码器分片选
位扩展 位宽↑,容量不变 目标位宽÷单芯片位宽 数据线拼接
字位同时扩展 容量↑+位宽↑ 字扩展数×位扩展数 先位扩展拼组,再字扩展分片选

主存系统优化方法总览(4-6-1 至 4-6-4)

一、4-6-1 主存系统的优化 — 双端口存储器

1.1 核心定义与解决的问题

双端口存储器是一种具有两个独立读写端口(每个端口包含独立的地址线、数据线和控制线)的存储模块,可同时响应两个独立设备(如CPU与DMA控制器、两个CPU)的读写请求,核心解决“单端口存储器同一时间只能处理一个访问请求”的瓶颈问题。

1.2 关键结构特点

  • 双端口设计:两个端口(通常称为Port A和Port B)完全独立,各自有一套地址寄存器(AR)、数据寄存器(DR)和控制逻辑(如读/写信号R/W)。
  • 存储体共享:两个端口共用同一存储体(存储单元阵列),需通过冲突检测机制避免“同时访问同一存储单元”的冲突。

1.3 冲突检测与处理

  • 冲突场景:当两个端口的地址寄存器(ARₐ、ARᵦ)同时指向同一存储单元,且至少有一个端口发出“写请求”时,会产生访问冲突。
  • 处理方式
    1. 硬件优先级:默认一个端口(如Port A)优先级更高,优先执行其请求,另一个端口等待一个时钟周期。
    2. 忙信号反馈:冲突时,向优先级低的端口输出“忙信号(Busy)”,使其暂停访问,直至冲突解除。

1.4 应用场景与优势

  • 典型场景:CPU与DMA控制器协同工作(如磁盘数据读写)——CPU通过Port A执行指令读写,DMA通过Port B直接与存储器交换数据,无需CPU干预,提升数据传输效率。
  • 核心优势:在不增加存储体数量的前提下,通过双端口并行访问,提升主存的“访问并行度”,减少设备等待时间。

二、4-6-2 主存系统的优化 — 单体多字存储器

2.1 核心定义与解决的问题

单体多字存储器是“单个存储体 + 多字数据总线”的设计,存储体每次读写时,会同时读出/写入多个连续的字(如一次读4个字),核心解决“单字存储器每次仅能传输1个字,数据吞吐量低”的问题。

2.2 关键结构与工作原理

  • 存储体:仅一个存储体,存储单元按“字块”(如4字/块)连续排列,地址按“块号”编制(而非单个字地址)。
  • 多字数据总线:数据总线宽度是“单字总线”的N倍(如N=4,总线宽度为4×32位),可一次性传输N个字。
  • 工作流程(以N=4为例):
    1. CPU给出“块地址”(如块号0),指向存储体中第0~3号字的连续块。
    2. 存储体一次读出块内4个连续字,通过4字数据总线传输到CPU的“多字缓冲寄存器”。
    3. CPU从缓冲寄存器中按顺序取用单个字,无需多次访问存储体。

2.3 优势与局限性

  • 优势:提升“数据吞吐量”(单位时间传输的总字数)——若单字访问时间为t,单字存储器每秒传输1/t个字,而4字存储器每秒传输4/t个字,吞吐量提升N倍(N为每次传输的字数)。
  • 局限性
    1. 依赖“程序的空间局部性”:仅当CPU需要连续字(如数组、连续指令)时,才能发挥优势;若访问离散字(如随机访问不同地址的单个字),会读出无用数据,浪费总线带宽。
    2. 存储体未并行:本质仍是“单个存储体”,每次访问需占用存储体完整周期,无法实现多个独立请求的并行处理。

三、4-6-3 主存系统的优化 — 多体交叉存储器(1)高位多体交叉

image-20251203124454964

3.1 核心定义与基础结构

多体交叉存储器由N个独立存储模块(M₀~Mₙ₋₁)构成,每个模块容量、存取速度完全相同,且共用一套系统总线。高位多体交叉的核心特征是“高位地址区分模块,低位地址区分块内单元”,也称为“顺序编制模式”。

3.2 地址结构与分配(结合例题)

例题:4个模块(M₀~M₃),每个模块8个存储单元

  • 地址拆分
    1. 模块地址(高位):模块数=4=2²,需2位二进制(00~11,对应M₀~M₃)。
    2. 块内地址(低位):单个模块单元数=8=2³,需3位二进制(000~111,对应模块内第0~7单元)。
    3. 总地址位数:2+3=5位(总容量=4×8=32单元=2⁵,匹配地址位数)。
  • 地址分配规律:连续地址先全部分配给一个模块,再顺序分配给下一个模块(如下表):
存储模块 模块地址(高位2位) 块内地址(低位3位) 完整地址(5位) 十进制地址
M₀ 00 000~111 00000~00111 0~7
M₁ 01 000~111 01000~01111 8~15
M₂ 10 000~111 10000~10111 16~23
M₃ 11 000~111 11000~11111 24~31

3.3 核心局限性与作用

  • 局限性:无法并行访问:因程序具有“局部性”(指令/数据连续存储),CPU会频繁访问单个模块(如地址0~10仅涉及M₀和M₁),其他模块空闲,无法发挥多模块并行优势。
  • 主要作用:扩充容量:本质是“存储器字扩展”——N个模块的总容量=单个模块容量×N,如4个1KB模块可扩展为4KB主存。

四、4-6-4 主存系统的优化 — 多体交叉存储器(2)低位多体交叉

image-20251203124954973

4.1 核心定义与解决的问题

低位多体交叉是多体交叉存储器的另一种编制方式,核心特征是“低位地址区分模块,高位地址区分块内单元”,也称为“交叉编制模式”。其设计目的是解决“高位多体交叉无法并行访问”的问题,实现多模块并行工作。

4.2 地址结构与分配(结合例题)

例题:4个模块(M₀~M₃),每个模块8个存储单元(总容量32单元,5位地址)

  • 地址拆分
    1. 模块地址(低位):模块数=4=2²,需最低2位二进制(00~11,对应M₀~M₃)。
    2. 块内地址(高位):单个模块单元数=8=2³,需高3位二进制(000~111,对应模块内第0~7单元)。
  • 地址分配规律:连续地址“交叉分配”给不同模块,即第k个地址分配给“模块k mod N”(N=4),如下表:
十进制地址 5位二进制地址 模块地址(低位2位) 块内地址(高位3位) 对应模块
0 00000 00 000 M₀
1 00001 01 000 M₁
2 00010 10 000 M₂
3 00011 11 000 M₃
4 00100 00 001 M₀
5 00101 01 001 M₁

4.3 并行访问原理(关键优势)

基于“交叉地址分配”,程序的连续指令/数据会分散在不同模块中,结合“存储模块存取周期重叠”,实现并行访问:

  • 示例:CPU连续读取地址0~3(4个字),流程如下:
    1. 时间t₀:CPU向M₀发送地址0(读请求),M₀开始读取(存取周期为T)。
    2. 时间t₀+Δt(Δt为地址发送延迟):CPU向M₁发送地址1(读请求),M₁开始读取(与M₀重叠工作)。
    3. 时间t₀+2Δt:向M₂发送地址2,M₂启动;t₀+3Δt:向M₃发送地址3,M₃启动。
    4. 时间t₀+T:M₀完成读取,输出数据;随后M₁(t₀+T+Δt)、M₂(t₀+T+2Δt)、M₃(t₀+T+3Δt)依次输出数据。
  • 结果:原本“4个模块串行读取需4T”,现在仅需T+3Δt(Δt远小于T),数据吞吐量接近原来的4倍,实现“多模块并行访问”。

4.4 局限性

  • 对“离散地址访问”不友好:若CPU随机访问非连续地址(如地址0、4、8、12,均指向M₀),会导致M₀连续忙碌,其他模块空闲,并行优势失效。
  • 需复杂的地址控制逻辑:需将CPU给出的“连续地址”拆分为“低位模块地址+高位块内地址”,并协调多个模块的访问时序,硬件成本略高于高位多体交叉。

五、四种优化方法对比总结

优化方法 核心特征 核心优势 核心局限性 适用场景
双端口存储器 单存储体+双独立端口 支持两个设备并行访问 仅1个存储体,无多体并行性 CPU与DMA协同、双CPU共享存储器
单体多字存储器 单存储体+多字数据总线 提升连续字的吞吐量 依赖空间局部性,无多体并行 连续数据访问(如数组、连续指令)
高位多体交叉 多模块+高位地址分模块 扩充主存容量 无法并行访问,仅单模块工作 需扩展容量但对并行性要求低的场景
低位多体交叉 多模块+低位地址分模块 多模块并行,大幅提升吞吐量 依赖连续地址,离散访问失效 需高吞吐量的连续数据访问(如内存)

image-20251203125313806

image-20251203130019851