文章目录
第三章 存储器
3.1 半导体存储器概述
3.1.1 半导体存储芯片基本结构
其中片选信号是 或 ,表示 chip select 或者 chip enable。
读/写控制线中 表示低电平写,高电平读; 表示允许读, 表示允许写。
3.1.2 半导体芯片的译码驱动
线选法
用一根字选择线直接选中存储单元,例如一个字节。
每个字都对应着一根地址线。
重合法
规模从 缩减为 ,二维片选,减少了地址译码输出线的数目。
3.1.3 主存的技术指标
存储容量
- 存储容量:主存能存放的二进制数的总位数
- 存储器容量 = 存储单元个数 * 存储字长
访存周期
相邻两次存储器访问的时间间隔
存储器带宽
单位时间内存储器存取的信息量(字节/秒、位/秒、字/秒)
3.1.4 存储器分类
按存储介质分类
- 【易失】半导体存储器:TTL、MOS
- 体积小、功耗低、存取时间短、易失
- 【非易失】磁表面存储器:磁盘、磁带、磁鼓
- 【非易失】磁芯存储器:硬磁材料的环状元件
- 【非易失】光盘存储器:激光、磁光
按数据保存方式分类
- 随机存储器(RAM)
- 易失性
- 静态随机存储器、动态随机存储器
- 只读存储器(ROM)
- 非易失性
RAM 和 ROM 是一种分类,常见的还有一种分类是 Flash 和 Hard Disk。其中 Flash 指 Solid State drives(SSDs),Hard Disk 指硬盘。
按数据存取方式分类
- 直接访问
- 访问时间不随访问位置而变化
- 内存
- 串行访问
- 访问时间随访问位置而变化
- 磁带
- 部分串行访问
- 介于上述二者之间
- 磁盘(寻道直接,等待串行)
3.2 静态随机存储器(Cache)
3.2.1 MOS 管
MOS 管工作在开关状态:饱和导通 & 截止
开关电路
在栅极加一个高电平时,MOS管就导通,低电平则截止。
NMOS 反相器(非门)
两个MOS管串联而成, 总是导通状态,且 导通内阻是 的 100 倍以上。
- 为高电平, 导通。由于分压, 分得大量电压,因此输出引脚变为低电平。
- 为低电平, 截止,其电阻变得非常大,因此 分压极少,输出引脚变为高电平。
3.2.2 基本单元电路
基本单元电路
上述单元电路中,{},{},{},{} 均构成了一对 NMOS 反相器。
- 若 为低电平,则 截止, 为高电平,则 导通, 为低电平。形成了互相制约的一种关系。
- 若 为高电平,则如上述分析一致。
基本单元电路特性
- ~ 构成互锁的触发器, 和 点的电位总相反, 点电位定义为二进制位的值。高电平则保存了逻辑 ,反之为逻辑 。
-
与 也相当于一把锁,控制内部数值与外部的联系。
- 当 、 导通时,可通过位线改变其值。
- 当 、 截止时,只要不掉电,状态一直保持。
- 静态随机存储器靠寄存器来存储信息,因此不需要刷新。
基本单元电路扩展
在 与 外面再加两把锁 与 ,则保证除非两把锁都打开,互锁的触发器才可以和外界通信。否则只要不掉电,信息永久保持。
3.2.3 基本单元电路举例
读操作
先打开行、列片选信号,再另读选择有效。最后从 将数据读出。
写操作
写操作要注意 与 均要写,因此左边的写放输出需反向。
Intel 2114 举例
每个方框都是一个六管存储单元。因此行地址译码控制 、,列地址译码控制 、。其中 4096 个存储单元分为四组,每组 64 行,16列,采用重合法译码。
3.3 动态随机存储器
3.3.1 三管动态随机存储器
在上述基本电路中, 充电,电路开始工作。
读过程
- 读选择线置1, 导通;读数据线也置1
- 若 上为1,则 导通,读数据线返回 0
- 若 上为0,则 截止,读数据返回 1
写过程
- 写选择线置1, 导通
- 写数据线置1,则写入1;置0则写入0
3.3.2 单管动态随机存储器
字线置1,表示片选到了这个单元。
读操作
- 电容上有电荷,则数据线上有电流,为1
- 电容上没有电荷,则数据线上没有电流,为0
写操作
- 数据线置为1,则给电容充电
- 数据线置为0,则对电容进行放电
3.3.3 动态随机存储器缺陷
- 上述两种电路,对这个基本单元电路的 “读” 都是一种破坏性的 “读”。
- 上述两种电路依靠电容充放电来保存信息。而电容存在漏电流,电荷会自动泄漏。
3.3.4 刷新
解决方案
- 读出放大器
- 当读取动态随机存储器的一个二进制位时,电容充放电本身的电荷量非常小,因此需要一个读出放大器进行读取和放大。
- 读出放大器会在读出数据后立刻写回到电容中,解决 “破坏性读出” 的问题。
- 刷新
- 电容漏电的时间间隔为 ,因此在 内对每一个二进制进行一次读操作,即可保证电容数值不变。
集中刷新
集中刷新即是在一个刷新周期内,前面的时间均正常工作,而将最后的时间用于刷新。
下面给出一个例子,假设存取周期为 ,128*128的矩阵,按行刷新,需要刷新 128 次。刷新周期为 ,即可以存取 4000 次,因此我们将 0~3871 存取周期用于正常工作,3872~3999 这 128 个周期用于刷新。
上述例子中,“死区” 为 ,“死时间率” 为 。
分散刷新
将存取周期 分为两段,前半段用于工作,后半段用于刷新,即 ,不存在停止读、写操作的死时间,但效率低下。
无时无刻不在刷新, 用于工作, 用于刷新,因此每 就全刷新一遍,浪费的效率达到了 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PK8Sgpb6-1597538371852)(media/15771748672779.jpg)]
异步刷新
时间内需刷新 128 次,因此每 就刷新一行,死区时间仅为 。
指令的执行分别取指、译码、执行,因此如果把刷新安排在指令译码阶段,则不会出现 “死区”。
3.3.5 引脚复用技术
受封装技术的限制,无法保证在有限的芯片面积或周长的前提下引出这么多的引脚,因此动态随机存储器采用了一种引脚复用技术。
将芯片的地址引脚数目设置为需要数目的一半,分别通过两个时钟周期送入两批地址信号,然后在芯片内部将两批地址信号合并为完整的地址信息再去寻址。
3.4 存储器的扩展方式
3.4.1 字扩展
字扩展即是对于数据线进行扩展,具体扩展如下所示。
用 芯片组成 的存储器,对数据线进行扩展。
3.4.2 位扩展
位扩展即是对于地址线进行扩展,具体扩展如下所示。
用 芯片组成 的存储器,对地址线进行扩展。
3.4.3 字、位扩展
字、位扩展即是对数据线和地址线同时进行扩展,具体扩展方式如下图所示。
用 芯片组成 的存储器,利用 2-4 译码器扩展地址线,同时扩展数据线实现字、位同时扩展。
3.5 Cache 的工作原理
3.5.1 Cache 的提出
问题提出原因
- 解决 CPU 和存储器速度差异的矛盾
- 解决 CPU 访存优先级低于 I/O 的问题
- CPU 访存优先级低于 I/O 是因为,如果 I/O 中数据不及时取走,可能就会被冲刷掉。
理论基础
- 时间局部性原理
- 空间局部性原理
3.5.2 Cache 块替换算法
- 先进先出算法(FIFO)
- 最近最少使用算法
- 随机算法
3.5.3 Cache 工作过程
CPU 工作过程
3.5.4 Cache 映射方式
直接映射
最直接的映射方式,每4个对应一组进行分配。
全相连映射
多对多映射,主存中的任一块可以映射到 Cache 中的任一块。
组相连映射
结合上述两种映射方式,划一个组专门用于存储 的主存块。
三种方式比较
- 直接映射:某一主存块只能映射到唯一缓存块。映射方式简单,但是不够灵活,容易导致块冲突。
- 全相联映射:某一主存块可映射到任一缓存块,最灵活,不易冲突,但需要采用相联存储器。
- 组相联映射:某一主存块可映射到某一组中的任一块,兼顾了灵活性和成本。
3.5.5 Cache 的一致性问题
写直达法(Write - through)
- 写操作时既写入Cache,也写入主存。
- 写操作时间变为访问主存所需时间。
写回法(Write - back)
- 写操作时只写入 Cache,不写入主存,当 Cache 被替换出去时才写回主存
- 命中时读写操作时间就是访问 Cache 的时间
3.6 多模块存储器
3.6.1 单体多字系统
结构概述
一个存储体,但对每次读出的字长进行扩充。一个存取周期取出 4 个字,然后逐次送至 CPU 执行,适用于指令或数据在内存中连续存放的情况。
优缺
-
取指冲突
- 例如出现了转移指令,则之后多取出的指令均浪费
-
读操作数冲突
-
-
需要的两个操作数分别为 0x12 和 0x34,因此读了8个字,但只有2个字有效,其余均为浪费。
-
-
写数据冲突
- 每次修改或写数据,都必须凑齐 个字才能写,或者 “读-改-写”
3.6.2 多体并行系统
存储体
存储体为具有独立地址寄存器、数据寄存器、地址译码、驱动电路、读写电路等功能的独立存储电路,可独立工作。
多体并行
存储器由多个存储体构成,各存储体有相同的容量和存取速度。
高位交叉编址
即对于每个体按顺序向下编址。
优缺点:
- 频繁访问单个存储体时,吞吐量无法提升
- 不同请求源可同时对各体发出请求,此时各体可同时工作
- 便于存储器扩充
低位交叉编址
即轮流依次编址。
优点:
- 在不改变存取周期和数据总线宽度的前提下,增加了存储器的带宽
- 可利用其它存储体寻址的时间继续操控其它存储体
- 连续运行时,每个时钟周期即可完成一个数据传输
3.7 数据校验码
3.7.1 码距
定义
一种编码体系中,任意两组合法编码之间不同的二进制位数的最小值,叫做这种编码的码距。
码距公式
码距决定了编码的纠错和检错能力。
L: 码距,D: 检错位数,C: 纠错位数
所有的校验码(如奇偶校验码、循环冗余校验码、海明码)都是通过增加码距来提高纠错和检错能力。
3.7.2 模 2 运算
模 2 加减运算规则
按位模2相加减,不考虑进位和借位。
模 2 乘
按模 2 加求部分积之和。
模 2 除
按模 2 减求部分余数。
3.7.3 多项式和编码的对应关系
例如 ,对应编码为 1011。
编码左移 位,对应的多项式为 。
3.7.4 循环冗余校验码(CRC编码)
概念
- 在 位信息码后再拼接 位的校验码,整个编码长度为 位,这种编码又叫 码。
- 对于一个给定的码,可以证明存在一个最高次幂为 的多项式 。根据 可以生成 位校验码,而 叫做这个 CRC 码的生成多项式。
举例
总结
- 确定生成多项式 的最高次数为
- 原始报文 左移 位
- 用左移后的报文 模 除以生成多项式,取余数
- 将余数 拼接在原始报文 右侧,即得 CRC 编码