第三章 存储器

3.1 半导体存储器概述

3.1.1 半导体存储芯片基本结构

计算机组成原理完整学习笔记(三):存储器

其中片选信号是 CE\overline{CE}CS\overline{CS},表示 chip select 或者 chip enable。

读/写控制线中 WE\overline{WE} 表示低电平写,高电平读;OE\overline{OE} 表示允许读,WE\overline{WE} 表示允许写。

3.1.2 半导体芯片的译码驱动

线选法

用一根字选择线直接选中存储单元,例如一个字节。

计算机组成原理完整学习笔记(三):存储器

每个字都对应着一根地址线。

重合法

计算机组成原理完整学习笔记(三):存储器

规模从 O(n)O(n) 缩减为 O(n)O(\sqrt{n}),二维片选,减少了地址译码输出线的数目。

3.1.3 主存的技术指标

存储容量

  • 存储容量:主存能存放的二进制数的总位数
  • 存储器容量 = 存储单元个数 * 存储字长

访存周期

相邻两次存储器访问的时间间隔

存储器带宽

单位时间内存储器存取的信息量(字节/秒、位/秒、字/秒)

3.1.4 存储器分类

按存储介质分类

  1. 【易失】半导体存储器:TTL、MOS
    • 体积小、功耗低、存取时间短、易失
  2. 【非易失】磁表面存储器:磁盘、磁带、磁鼓
  3. 【非易失】磁芯存储器:硬磁材料的环状元件
  4. 【非易失】光盘存储器:激光、磁光

按数据保存方式分类

  1. 随机存储器(RAM)
    • 易失性
    • 静态随机存储器、动态随机存储器
  2. 只读存储器(ROM)
    • 非易失性

RAM 和 ROM 是一种分类,常见的还有一种分类是 Flash 和 Hard Disk。其中 Flash 指 Solid State drives(SSDs),Hard Disk 指硬盘。

按数据存取方式分类

  1. 直接访问
    • 访问时间不随访问位置而变化
    • 内存
  2. 串行访问
    • 访问时间随访问位置而变化
    • 磁带
  3. 部分串行访问
    • 介于上述二者之间
    • 磁盘(寻道直接,等待串行)

3.2 静态随机存储器(Cache)

3.2.1 MOS 管

MOS 管工作在开关状态:饱和导通 & 截止

计算机组成原理完整学习笔记(三):存储器

开关电路

在栅极加一个高电平时,MOS管就导通,低电平则截止。

NMOS 反相器(非门)

两个MOS管串联而成,T1T_1 总是导通状态,且 T1T_1 导通内阻是 T2T_2 的 100 倍以上。

  1. T2T_2 为高电平,T2T_2 导通。由于分压,T1T_1 分得大量电压,因此输出引脚变为低电平。
  2. T2T_2 为低电平,T2T_2 截止,其电阻变得非常大,因此 T1T_1 分压极少,输出引脚变为高电平。

3.2.2 基本单元电路

基本单元电路

计算机组成原理完整学习笔记(三):存储器

上述单元电路中,{T1T2T_1、T_2},{T3T4T_3、T_4},{T1T3T_1、T_3},{T4T2T_4、T_2} 均构成了一对 NMOS 反相器。

  1. AA 为低电平,则 T1T_1 截止,AA' 为高电平,则 T2T_2 导通,AA 为低电平。形成了互相制约的一种关系。
  2. AA 为高电平,则如上述分析一致。

基本单元电路特性

  1. T1T_1T4T_4 构成互锁的触发器,AAAA' 点的电位总相反,AA 点电位定义为二进制位的值。高电平则保存了逻辑 11,反之为逻辑 00
  2. T5T_5T6T_6 也相当于一把锁,控制内部数值与外部的联系。
    • T5T_5T6T_6 导通时,可通过位线改变其值。
    • T5T_5T6T_6 截止时,只要不掉电,状态一直保持。
  3. 静态随机存储器靠寄存器来存储信息,因此不需要刷新。

基本单元电路扩展

计算机组成原理完整学习笔记(三):存储器

T5T_5T6T_6 外面再加两把锁 T7T_7T8T_8,则保证除非两把锁都打开,互锁的触发器才可以和外界通信。否则只要不掉电,信息永久保持。

3.2.3 基本单元电路举例

读操作

计算机组成原理完整学习笔记(三):存储器

先打开行、列片选信号,再另读选择有效。最后从 T6T_6 将数据读出。

写操作

计算机组成原理完整学习笔记(三):存储器

写操作要注意 AAAA' 均要写,因此左边的写放输出需反向。

Intel 2114 举例

计算机组成原理完整学习笔记(三):存储器

每个方框都是一个六管存储单元。因此行地址译码控制 T5T_5T6T_6,列地址译码控制 T7T_7T8T_8。其中 4096 个存储单元分为四组,每组 64 行,16列,采用重合法译码。

计算机组成原理完整学习笔记(三):存储器

3.3 动态随机存储器

3.3.1 三管动态随机存储器

计算机组成原理完整学习笔记(三):存储器

在上述基本电路中,T4T_4 充电,电路开始工作。

读过程

  1. 读选择线置1,T2T_2 导通;读数据线也置1
  2. CgC_g 上为1,则 T1T_1 导通,读数据线返回 0
  3. CgC_g 上为0,则 T1T_1 截止,读数据返回 1

写过程

  1. 写选择线置1,T3T_3 导通
  2. 写数据线置1,则写入1;置0则写入0

3.3.2 单管动态随机存储器

计算机组成原理完整学习笔记(三):存储器

字线置1,表示片选到了这个单元。

读操作

  1. 电容上有电荷,则数据线上有电流,为1
  2. 电容上没有电荷,则数据线上没有电流,为0

写操作

  1. 数据线置为1,则给电容充电
  2. 数据线置为0,则对电容进行放电

3.3.3 动态随机存储器缺陷

  1. 上述两种电路,对这个基本单元电路的 “读” 都是一种破坏性的 “读”。
  2. 上述两种电路依靠电容充放电来保存信息。而电容存在漏电流,电荷会自动泄漏。

3.3.4 刷新

解决方案

  1. 读出放大器
    • 当读取动态随机存储器的一个二进制位时,电容充放电本身的电荷量非常小,因此需要一个读出放大器进行读取和放大。
    • 读出放大器会在读出数据后立刻写回到电容中,解决 “破坏性读出” 的问题。
  2. 刷新
    • 电容漏电的时间间隔为 2mm2mm,因此在 2mm2mm 内对每一个二进制进行一次读操作,即可保证电容数值不变。

集中刷新

集中刷新即是在一个刷新周期内,前面的时间均正常工作,而将最后的时间用于刷新。

下面给出一个例子,假设存取周期为 0.5us0.5us,128*128的矩阵,按行刷新,需要刷新 128 次。刷新周期为 2mm2mm,即可以存取 4000 次,因此我们将 0~3871 存取周期用于正常工作,3872~3999 这 128 个周期用于刷新。

计算机组成原理完整学习笔记(三):存储器

上述例子中,“死区” 为 0.5us128=64us0.5us*128=64us,“死时间率” 为 1284000=3.2%\displaystyle\frac{128}{4000}=3.2\%

分散刷新

将存取周期 tct_c 分为两段,前半段用于工作,后半段用于刷新,即 tc=tM+tRt_c=t_M+t_R,不存在停止读、写操作的死时间,但效率低下。

无时无刻不在刷新,0.5us0.5us 用于工作,0.5us0.5us 用于刷新,因此每 128us128us 就全刷新一遍,浪费的效率达到了 50%50\%

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PK8Sgpb6-1597538371852)(media/15771748672779.jpg)]

异步刷新

2mm2mm 时间内需刷新 128 次,因此每 15.6us15.6us 就刷新一行,死区时间仅为 0.5us0.5us

计算机组成原理完整学习笔记(三):存储器

指令的执行分别取指、译码、执行,因此如果把刷新安排在指令译码阶段,则不会出现 “死区”。

3.3.5 引脚复用技术

受封装技术的限制,无法保证在有限的芯片面积或周长的前提下引出这么多的引脚,因此动态随机存储器采用了一种引脚复用技术。

将芯片的地址引脚数目设置为需要数目的一半,分别通过两个时钟周期送入两批地址信号,然后在芯片内部将两批地址信号合并为完整的地址信息再去寻址。

3.4 存储器的扩展方式

3.4.1 字扩展

字扩展即是对于数据线进行扩展,具体扩展如下所示。

1K41K*4 芯片组成 1K81K*8 的存储器,对数据线进行扩展。

计算机组成原理完整学习笔记(三):存储器

3.4.2 位扩展

位扩展即是对于地址线进行扩展,具体扩展如下所示。

1K81K*8 芯片组成 2K82K*8 的存储器,对地址线进行扩展。

计算机组成原理完整学习笔记(三):存储器

3.4.3 字、位扩展

字、位扩展即是对数据线和地址线同时进行扩展,具体扩展方式如下图所示。

1K41K*4 芯片组成 4K84K*8 的存储器,利用 2-4 译码器扩展地址线,同时扩展数据线实现字、位同时扩展。

计算机组成原理完整学习笔记(三):存储器

3.5 Cache 的工作原理

3.5.1 Cache 的提出

问题提出原因

  1. 解决 CPU 和存储器速度差异的矛盾
  2. 解决 CPU 访存优先级低于 I/O 的问题
    • CPU 访存优先级低于 I/O 是因为,如果 I/O 中数据不及时取走,可能就会被冲刷掉。

理论基础

  1. 时间局部性原理
  2. 空间局部性原理

3.5.2 Cache 块替换算法

  1. 先进先出算法(FIFO)
  2. 最近最少使用算法
  3. 随机算法

3.5.3 Cache 工作过程

计算机组成原理完整学习笔记(三):存储器

CPU 工作过程

计算机组成原理完整学习笔记(三):存储器

3.5.4 Cache 映射方式

直接映射

最直接的映射方式,每4个对应一组进行分配。

计算机组成原理完整学习笔记(三):存储器

全相连映射

多对多映射,主存中的任一块可以映射到 Cache 中的任一块。

计算机组成原理完整学习笔记(三):存储器

组相连映射

结合上述两种映射方式,划一个组专门用于存储 %4=0\%4=0 的主存块。

计算机组成原理完整学习笔记(三):存储器

三种方式比较

  1. 直接映射:某一主存块只能映射到唯一缓存块。映射方式简单,但是不够灵活,容易导致块冲突。
  2. 全相联映射:某一主存块可映射到任一缓存块,最灵活,不易冲突,但需要采用相联存储器。
  3. 组相联映射:某一主存块可映射到某一组中的任一块,兼顾了灵活性和成本。

3.5.5 Cache 的一致性问题

写直达法(Write - through)

  • 写操作时既写入Cache,也写入主存。
  • 写操作时间变为访问主存所需时间。

写回法(Write - back)

  • 写操作时只写入 Cache,不写入主存,当 Cache 被替换出去时才写回主存
  • 命中时读写操作时间就是访问 Cache 的时间

3.6 多模块存储器

3.6.1 单体多字系统

结构概述

一个存储体,但对每次读出的字长进行扩充。一个存取周期取出 4 个字,然后逐次送至 CPU 执行,适用于指令或数据在内存中连续存放的情况。

计算机组成原理完整学习笔记(三):存储器

优缺

  1. 取指冲突

    • 例如出现了转移指令,则之后多取出的指令均浪费
  2. 读操作数冲突

    • 计算机组成原理完整学习笔记(三):存储器

    • 需要的两个操作数分别为 0x12 和 0x34,因此读了8个字,但只有2个字有效,其余均为浪费。

  3. 写数据冲突

    • 每次修改或写数据,都必须凑齐 nn 个字才能写,或者 “读-改-写”

3.6.2 多体并行系统

存储体

存储体为具有独立地址寄存器、数据寄存器、地址译码、驱动电路、读写电路等功能的独立存储电路,可独立工作。

多体并行

存储器由多个存储体构成,各存储体有相同的容量和存取速度。

高位交叉编址

即对于每个体按顺序向下编址。

计算机组成原理完整学习笔记(三):存储器

优缺点:

  1. 频繁访问单个存储体时,吞吐量无法提升
  2. 不同请求源可同时对各体发出请求,此时各体可同时工作
  3. 便于存储器扩充

低位交叉编址

即轮流依次编址。

计算机组成原理完整学习笔记(三):存储器

优点:

  1. 在不改变存取周期和数据总线宽度的前提下,增加了存储器的带宽
  2. 可利用其它存储体寻址的时间继续操控其它存储体
    • 连续运行时,每个时钟周期即可完成一个数据传输

计算机组成原理完整学习笔记(三):存储器

3.7 数据校验码

3.7.1 码距

定义

一种编码体系中,任意两组合法编码之间不同的二进制位数的最小值,叫做这种编码的码距。

码距公式

码距决定了编码的纠错和检错能力。

L: 码距,D: 检错位数,C: 纠错位数
L1=D+C L-1=D+C

所有的校验码(如奇偶校验码、循环冗余校验码、海明码)都是通过增加码距来提高纠错和检错能力。

3.7.2 模 2 运算

模 2 加减运算规则

按位模2相加减,不考虑进位和借位。

模 2 乘

按模 2 加求部分积之和。

模 2 除

按模 2 减求部分余数。

计算机组成原理完整学习笔记(三):存储器

3.7.3 多项式和编码的对应关系

M(x)=Ck1xk1+Ck2xk2+...+Cixi+...+C1x+C0 M(x)=C_{k-1}x^{k-1}+C_{k-2}x^{k-2}+...+C_{i}x^{i}+...+C_{1}x+C_0

例如 M(x)=x3+x+1M(x)=x^3+x+1,对应编码为 1011。

编码左移 rr 位,对应的多项式为 M(x)xrM(x)x^r

3.7.4 循环冗余校验码(CRC编码)

概念

  1. KK 位信息码后再拼接 rr 位的校验码,整个编码长度为 NN 位,这种编码又叫 (N,K)(N,K) 码。
  2. 对于一个给定的码,可以证明存在一个最高次幂为 NK=rN-K=r 的多项式 G(x)G(x)。根据 G(x)G(x) 可以生成 rr 位校验码,而 G(x)G(x) 叫做这个 CRC 码的生成多项式。

举例

计算机组成原理完整学习笔记(三):存储器

总结

  1. 确定生成多项式 G(x)G(x) 的最高次数为 rr
  2. 原始报文 M(x)M(x) 左移 rr
  3. 用左移后的报文 M(x)xrM(x)x^r22 除以生成多项式,取余数 R(x)R(x)
  4. 将余数 R(x)R(x) 拼接在原始报文 M(x)M(x) 右侧,即得 CRC 编码

相关文章: