计算机组成原理之存储器详解
计算机组成原理之存储器详解
存储器是计算机系统中用于存储数据和指令的重要组成部分。根据存储介质、存取方式、可改写性、可保存性以及功能和存取速度的不同,存储器可以分为多种类型。本文将详细介绍存储器的分类、性能指标、层次结构、主存的基本结构、数据存放方式,以及静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、只读存储器(ROM)等不同类型存储器的原理和应用。
1 存储器
1.1 概述
(1)
(2)引出问题:
(3)
1.2 存储器分类
(1)按存储介质分:
- 固态硬盘属于半导体存储器,机械硬盘属于磁存储器。
(2)按存取方式分:
(3)按可改写性分:- (4)按可保存性分:
(5)按功能和存取速度分类:- (6)总览:
1.3 存储器的性能指标&存储系统的层次结构
(1)存储容量:
(2)存取速度:
(3)层次结构:
1.4 主存的基本结构
(1)MDR用于暂存CPU通过数据总线传来的待写入存储体中某个存储单元的数据。或者暂存从某个存储单元中读出的数据信息。
(2)译码结构:
- 单译码结构:
- 双译码结构:
- 对比两种结构:
1.5 主存中数据的存放
(1)总览:
- 机器字长和存储字长的区别:
- 地址访问模式:
- 小端与大端:
小端就是:数据高位放在存储体的高地址中、数据低位放在存储体的低地址中。 - 数据的边界对齐问题:
规则就是下面紫色框框中的内容:
2 静态随机存取存储器SRAM
2.1 存储元
(1)SRAM:
(2)存储元:
①上电后:
②读操作:
③写操作:
④读操作和写操作完成后,撤销掉行选通X和列选通Y的有效信号:
⑤总结:SRAM的特点:
2.2 存储元扩展和存储阵列扩展
(1)存储元扩展:
(2)存储阵列扩展:
2.3 存储器结构和芯片示例
(1)存储阵列的符号:
(2)举例:
①行译码器的输出需要驱动每一块存储器上的选中的一整行的MOS管。(T5、T6)
②列译码器的输出需要驱动每一块存储器上所选中的那一列的两个共享的MOS管。(T7、T8)
(3)IO电路里面有差分放大电路,用于放大存储阵列传输过来的信号。
由于一块SRAM芯片的容量有限,可能满足不了一个大容量存储器的需求,此时就可以使用多片SRAM存储器芯片进行扩展。
将多块SRAM芯片连接起来组成一个大容量存储器时,并不是所有SRAM芯片都会同时工作,通过片选信号可以很好地解决这一问题。
片选信号CS是低电平有效。WE也是低电平有效,有效时表示要对存储器进行写操作;为无效电平的时候,表明可以从存储器中读取信息。
(4)实际案例:
写入,CS=0(表示该片选中)、WE=0(表示允许写入):
读取内容:CS=0(表示该片选中),WE=1(表示不允许写,但允许读)
(5)例题:
3 动态随机存取存储器
3.1 存储元及其扩展
(1)首先看一下SRAM的缺点:
所以我们需要:
(2)DRAM存储元存储1位二进制信息的基本原理:
①充电:G给1,使得SD连通;然后S给1,给电容C充电。
②维持态:取消给G高电平时,SD断开,电容保持充满电的状态:
③给G高电平但是不给S高电平,那么电容C就会放电。
(3)DRAM的扩展:
①在读之前,都会进行预充电(每一条列线都会被充电到DRAM的工作电压VCC的一半,冲到这个值就停止。),此时列线上的寄生电容会保持住这个电压(寄生电容通常是存储原中电容的10倍)。
②然后待读取的存储元所在的行线会输入信号,使得这一行中所有存储元的MOS管都导通。如果存储单元中电容是满的,就认为是1,而由于行导通,所以电容会向列线放电;如果存储单元中电容是空的,就认为是0,而由于行导通,所以电容会被列上的电压充电。
③这样,1就让对应列线的电压正向(+δ)波动;0就让对应列线的电压负向(-δ)波动。(德尔塔就只有零点几毫伏。)这一变化就被灵敏读出/放大器检测到,记录成1or0,然后通过灵敏读出/放大器中的锁存器将读到的内容锁住。
④而DRAM每次读出都要立即重新写入,这个写入是灵敏读出/放大器根据锁存中的数据,将各列线拉高到DRAM的工作电压VCC or 拉低到GND。这样刚刚的电容内容满的电容由于连通而输出的电荷就会被补齐,由于连通而充电的电容中的这部分电荷就会被释放干净。这样就可以恢复各存储元中电容的原本状态。
⑤然后,给出列选通信号,就可以获取对应存储元中的信息。
这个图里面,为了简单起见,将存储元中的原本两条位线D和D反合并为了一条,简称做列线。每一列所有存储元共享的这两个MOS管,以及控制这两个MOS管的位选通线也没有画出。
可以看出,DRAM的行选通信号和列选通信号,不是同时给出的。所以DRAM存储器,通常将行地址线和列地址线复用。
(2)DRAM的读操作与写操作:
(3)SRAM和DRAM对比:
3.2 存储器的动态刷新
(1)
(2)基本概念:
(3)三种刷新方式:
- ①集中刷新:
- ②分散刷新:
- ③异步刷新:
- 习题:
3.3 存储器芯片实例和DRAM的发展
(1)为了实现地址复用,需要分别由行地址选通信号RAS,列地址选通信号CAS,先后将7位地址A0~A6分别锁存到行地址锁存器、列地址锁存器中。由时钟发生器提供相应的定时。
而且,这里的7条行地址线也可以作为刷新地址。用于刷新时的地址计数,逐行刷新。
(2)数据的输入和输出是分开的,并且可以锁存。数据的输出由列地址选通信号CAS来控制;数据的输入由写使能信号WE和列地址选通信号CAS来共同控制。WE、CAS、RAS都是低电平有效。
(3)例题:
这里看的出来,DRAM芯片中,1位就需要1条IO线,n位就需要n条IO线。这里和SRAM是一样的。
(4)
遇到时钟周期的上升沿时,开始进行行地址锁存,锁存完成后,要将RAS的电平拉高,使该信号无效。一小段延时后,给出列地址,以及CAS的有效信号(0),然后遇到时钟周期的上升沿后,开始进行列地址锁存,此时锁定了某个存储单元,完成后,将CAS拉高。一小段延时后,遇到时钟周期的上升沿,就开始输出第一个数据。后续每个时钟周期都会输出一个数据。直到突发长度的数据输出完毕。
(5)总结一下SDRAM的特点:
4 只读存储器ROM
(1)
(2)闪存分为NOR型和NAND型,NOR型凭借自己快速读取和随机访问的能力,适用于嵌入式系统中的程序存储;NAND型闪存凭借自己高容量以及自己的成本效益,适用于大容量数据储存(比如固态硬盘、U盘)。
(3)PC中用到的半导体存储器:
(4)真题:
5 主存的扩展及其与CPU的连接
5.1 位扩展
(1)
①初始状态:
②读操作:
③写操作:
- 总结:位扩展,也叫数据总线扩展、字长扩展。
5.2 字扩展
(1)
①初始状态:
②读操作:
③写操作:在A20A0、D7D0输入后,让R/W#数据,最后通过MREQ#来控制3-8译码器来选中(根据A20A18)对应的芯片,芯片选中后,由于WE是有效信号,所以将D7D0读入到A17~A0中保存的地址上。
- 总结:
5.3 字位同时扩展
(1)
(2)
补充:习题
(1)
(2)习题:
6 主存系统的优化
6.1 双端口存储器
(1)
(2)
6.2 单体多字存储器
(1)
可以在通道A、B上使用不同容量内存条,在双通道设置中,系统会检测较低容量通道的内存容量,在交稿容量通道的其他内存容量部分,会被检测为单通道模式运行。
6.3 多体交叉存储器(高位多体交叉)
(1)
6.4 多体交叉存储器(低位多体交叉)
(1)这里为什么M0和M1要错开?因为如果同时开始,那么一个T之后,二者就会竞争数据总线,从而导致冲突。
(2)例题:
7 高速缓存存储器cache
7.1 cache的相关基本概念
(1)时间局部性+空间局部性:
(2)Cache的性能评价:
①命中
②数据缺失:(未命中)
(3)cache和主存内都分块。
- 块小相对来说,只顾及到了时间局部性;
- 块大相对来说,只估计到了空间局部性。
(4)命中率、缺失率、平均访问时间、访问效率。
7.2 cache的读、写流程
(1)
①写回策略就是:仅仅写入cache,就返回:(仅仅写入cache)
②写穿策略就是:将脏数据写入慢速的主存中后,才返回:(也就是cache和主存都要写)
上面是命中情况下的写回和写穿策略;下面来看缺失情况下的非写分配策略:
①非写分配策略:将数据写入慢速主存后,就返回。(非写分配:不用为写入数据分配cache数据块,直接写入主存)
②写分配策略:先将缺失数据对应的主存数据块调入cache中,然后就变成了命中情况下的写回策略和写穿策略了。(未命中就调入,然后变成命中的情况)
(2)
(3)总结:
7.3 地址映射(直接映射)
(1)
(1)直接映射:
特点:
习题:
①
②
③
④
⑤
7.4 地址映射(全相联映射)
(1)
(2)特点
(3)习题:
7.5 地址映射(组相联映射)
(1)
(2)如果将所有cache行,看做一个组,那么组相联映射就变成了全相联映射。
如果每个组都只包含一个cache行,那么组相联映射就变成了直接映射。
7.6 地址映射(三种方式的补充)
(1)
(2)
(3)例题:
②