本文是哈工大刘宏伟老师的网课的学习笔记,网课网站:https://www.icourse163.org/learn/HIT-309001
PS:
看到这篇博客咱们都是有缘人,不妨点个赞👍、点个关注💗吧,谢谢大家
1 概述
1.1 主存的基本组成
根据MAR中的地址访问某个存储单元时,需经过地址译码、驱动等电路,才能找到所需访问的单元。读出时,需经过读出放大器,才能将被选中单元中存储字送到MDR。写入时,MDR中的数据也必须经过写入电路才能真正写入到被选中的单元中。
在现代计算机中,通常会将图中的MAR和MDR制作在CPU芯片中。
MAR保存了我们要访问的存储单元的地址,必须经过译码器译码以后,我们才能选定指定的存储单元;类似地,MDR中保存了我们要读出或者要写入的数据,至于是读出还是写入,需要经过读写电路来控制是读还是写。写入则是将MDR中的数据送入到MAR指定的存储单元当中,读出则是将指定的存储单元中的数据送到MDR中。
1.2 主存和 CPU 的联系
1.3 主存中存储单元地址的分配
问题1:12345678H 这个数据如何在主存储器中进行存储?
两种方式:
- 高位字节地址作为字地址,即高位字节存放在高地址,低位字节存放在低地址,这种存储方式称为大端方式;
- 低位字节地址作为字地址,这种存储方式称为小端方式。X86采用的是小端方式。
问题2:设地址线一共24根,按字节寻址、按字寻址(字长为16位)、按字寻址(字长为32位)这三种寻址方式访问的范围分别是多少?
- 按字节寻址,一次访问就是一个字节,也即每个字节对应一个地址,那么访问的范围是2的24次方,即16MB
- 按字寻址(字长为16位),一次访问是一个字或者说两个字节,那么访问范围是8MW
- 按字寻址(字长为32位),一次访问是一个字或者说四个字节,那么访问范围是4MW
1.4 主存的技术指标
- 存储容量:主存存放二进制代码的总位数
- 存储速度两个指标:存取时间(存储器的访问时间、读出时间、写入时间)、存取周期(连续地两次独立的存储器操作,即读或写,所需的最小间隔时间)
- 存储器的带宽:位/秒
2 半导体存储芯片简介
2.1 半导体存储芯片的基本结构
芯片容量=地址线位数✖数据线位数,如:
地址线(单向) | 数据线(双向) | 芯片容量 |
---|---|---|
10 | 4 | 1K✖4位 |
14 | 1 | 16K✖1位 |
13 | 8 | 8K✖8位 |
片选线:
C
S
‾
\overline{CS}
CS、
C
E
‾
\overline{CE}
CE
读/写控制线:
W
E
‾
\overline{WE}
WE(低电平写、高电平读)
O
E
‾
\overline{OE}
OE(允许读)
W
E
‾
(
允
许
写
)
\overline{WE}(允许写)
WE(允许写)
片选线的作用:
如何用16K✖1位的存储芯片组成64K✖8位的存储器:
16K✖1位表示这个芯片的容量是16K,每个存储单元存放1位的信息,如果用8个这样类型的芯片,对8个这样类型的芯片同时进行读写,每个芯片可以读取或写入1位的二进制信息,于是构成1组16K✖8位的芯片。选取同样的4组,一共是32片芯片。片选信号可以对1组或者说8片芯片产生有效信号。
2.2 半导体存储芯片的译码驱动方式
-
线选法
原理:
A0~A3通过地址译码器控制字线,即输入4根线,输出是16根线;给定一个输入,在输出的一端只有一根线是有效的,会控制这根线上所有的存储元件进行数据的输入或输出操作。
缺点:
这种方法难以应付容量大的存储元件。 -
重合法
原理:
行地址A0 ~ A4 以及 列地址A5 ~ A9,分别只有一位有效,可以进行译码,假设现在行、列地址全为0,那么只有X0、Y0这条线的交点(0,0)可以进行输出;至于其它点可以进行输出,但是由于有一根线不导通,故无法送到目标中去。
优点:
用这种方法,芯片集成度可以做得很高。
3 随机存取存储器(RAM)
3.1 静态 RAM (SRAM)
SRAM保存0和1的原理是什么?
数字电路当中的触发器,具体而言就是双稳态触发器。
SRAM基本单元电路的构成是什么?
T1~T4:解决了前面的问题,即用触发器来解决存放0和1。
T5~T6:行地址选择。
T7~T8:一列共用,控制这一列是否有效,决定信号是否输出。
SRAM对单元电路如何读出和写入?
SRAM典型芯片的结构是很么样子的?
例如Intel2114
W
E
‾
\overline{WE}
WE是低电平表示写信号,高电平表示读信号;
C
S
‾
\overline{CS}
CS是片选信号;
数据线有4条
SRAM静态RAM芯片的如何进行读出和写入操作?
INTEL2114 64✖64位的芯片这样完成一个列选信号可以同时选择四列的操作,即一次四列的呢?
我们首先将64列分成四组,每一组16列,行地址一共是6位,经过译码后,可以产生由0~63一共64个行选信号;列地址一共4位。
图中标黄的部分指的是要进行读写操作的四位二进制数。
3.2 动态 RAM (DRAM)
保存0和1的原理是什么?
电容。电容中保存了电荷则说明存储的电荷是1,电容中没有电则说明存储的电荷是0。
基本单元电路的构成是什么?
三管动态RAM:
T1、T2、T3是三个控制管,控制数据的读入和写出。上面一条线是读选择线,读选择线有效则T2会被导通。同理,下面一条线是写选择线,写选择线有限则T3会被导通。外部的数据可以通过T3向Cg这电容进行读或者写。
单管动态RAM:
存储信息的原理和三管动态RAM一样,都是保存在这个电容中,有电我们认为是1,没电我们认为是0。晶体管完成对电容的充放电或者对信息的读写操作。
小结:
常见的动态RAM基本单元电路有三管式和单管式两种,它们共同的特点都是靠电容存储电荷的原理来寄存信息。
对单元电路如何读出和写入?
三管动态RAM读:
首先通过预充电信号使T4这个晶体管导通,VDD就会通过T4向读数据线进行充电,这个时候读数据线就是高电平,表示1。
若进行读操作,T2被导通,此时Cg保存的是0,Cg这个电容没有充电,那么T1的栅极是低电平,T1不会被导通,读数据线就会保持高电平。
如果Cg保存的是1,Cg这个电容是充电的,T1的栅极有电,T1这个管子被导通,由于一开始预充电时,读数据线保存的是1,那么这个时候就会通过T1、T2放电,变成低电平。如下图所示:
上述过程说明:读出与原存信息是相反的,要从单元电路读出数据需加一个非门。
类似地,**三管动态RAM写过程:**写选择线有效,T3导通,写数据线会通过T3向Cg充电或者放电,如果写数据线是1,Cg会保存1;如果写入的是低电平,Cg会通过T3这个管子放电,Cg保存的就是0。
也即是说:写入的数据与输入信息相同。
典型芯片的结构是什么样子的?
Intel 1103三管动态RAM中,每列都有一个刷新放大器用来形成再生信息。这里的刷新放大器:每经过一定的时间,都要对存储单元中的信息进行刷新。
动态RAM为什么要刷新,刷新方法?
动态RAM是利用电容存储电荷的方式保存信息的,电容非常小容易漏电。一段时间内,如果我们不对电容当中的信息进行再生的,电容中的电就会漏掉。因此我们需要进行刷新。
刷新只与行地址有关,每次刷新只刷新行地址的数据,而不是每一个存储单元的数据。
刷新方法三种:
-
集中刷新
例如:
2ms内要求对RAM内所有的行进行刷新,死区是指动态RAM不能用的时间。 -
分散刷新
-
异步刷新
3.3 动态 RAM 和静态 RAM 的比较
4 只读存储器(ROM)
可编程的只读存储器不一定是可改写的。
常见的ROM有:
-
掩膜ROM(MROM):
行列选择线交叉处是否有MOS管,决定是否为1;有则为1,否则为0。 -
PROM(一次性编程):
熔丝通断来保存数据。断为0,通为1。 -
EPROM(多次性编程)
例如:N型沟道浮动栅MOS电路
-
EEPROM (多次性编程 )
电可擦写
局部擦写
全部擦写
存储信息在掉电后不易失的是EEPROM、EPROM、PROM。 -
Flash Memory (闪速型存储器)
比 EEPROM快
EPROM 价格便宜 集成度高
EEPROM 电可擦洗重写
具备 RAM 功能
5 存储器与CPU的连接(重点)
5.1存储器容量的扩展
- 位扩展(增加存储字长)
用几个1K×4位存储芯片可以组成1K×8位的存储器,怎样连接?
图中两篇2114的地址线A9~A0、
C
S
‾
\overline{CS}
CS、
W
E
‾
\overline{WE}
WE都分别连在一起,其中一片的数据线作为高4位D7~D4,另一片的数据线作为低四位D3 ~ D0。
- 字扩展(增加存储字的数量)
用 几个 1K×8位 存储芯片可以组成 2K×8位 的存储器,怎样连接?
当A10为低电平时,
C
S
0
‾
\overline{CS_0}
CS0有效, 选中左边的1K×8位芯片;当A10为高电平时,反相后
C
S
1
‾
\overline{CS_1}
CS1有效,选中右边的1K×8位芯片。
- 字、位扩展
用 几片 1K×4位 存储芯片组成 4K×8位的存储器,怎样连接?
每2片构成一组1K×8位的存储器,4组便构成了4K×8位的存储器。地址线A11、A10经片选译码器得到4个片选信号即 C S 0 ‾ \overline{CS_0} CS0 ~ C S 3 ‾ \overline{CS_3} CS3,分别选择其中1K×8位的存储芯片。 W E ‾ \overline{WE} WE为读/写控制信号。
5.2 存储器与 CPU 的连接
5.2.1 基本方法
(1) 地址线的连接
CPU的地址线数往往比存储芯片的地址线数多,通常时将CPU的地址线的低位与存储芯片的地址线相连,CPU地址线的高位或在存储芯片扩充时用,或作其他用途,如片选信号等。
(2) 数据线的连接
同样的,CPU的数据线数往往与存储芯片的数据线数也不一定相等。此时,必须对存储芯片扩位,使其数据位数与CPU的数据线数相等。
(3) 读/写命令线的连接
CPU读写命令线一般可直接与存储芯片的读/写控制端相连,通常高电平为读,低电平为写。有些CPU的读/写命令线则是分开的,分别与存储芯片的允许读控制端和允许写控制端相连。
(4) 片选线的连接
片选线的连接是 CPU 与存储芯片正确工作的关键 。存储器由许多存储 芯片组成,哪一片 被选中完全取决 于该存储芯片的片选控制端 是否能接收到来自 CPU 的片选有效信号。
片选有效信号与 CPU 的访存控制信号
M
R
E
Q
‾
\overline{MREQ }
MREQ( 低电平有效) 有关,因为只有当 CPU 要求访存时,才需选择存储芯片。若 CPU 访问 I/0,则
M
R
E
Q
‾
\overline{MREQ }
MREQ 为高电平,表示不要求存储器工作。此外,片选有效信号还和地址有关,因为CPU的地址线往往多于存储芯片的地址线,故那些未与存储芯片连上的高位地址必须和坊存控制信号共同产生存储芯片的片选信号。通常需用到一些逻辑电路,如译码器及其他各种门电路,来产生片选有效信号。
(5) 合理选择存储芯片
通常选用ROM存放系统程序、标准子程序和各类常数等。RAM则是为用户编程而设置的。
(6)其他
在实际应用CPU与存储芯片时,还会遇到两者时序的配合、速度、负载匹配等问题。
5.2.2 举例
5.2.2.1 第一个例子
问题:
PS:74138的三个输入使能(又称选通ST)信号之间是与逻辑关系, G1高电平有效,G2A和G2B低电平有效。只有在所有使能端都为有效电平(G1G2AG2B=100)时,74138才对输入进行译码,相应输出端为低电平,即输出信号为低电平有效。在G1G2AG2B ≠100时,译码器停止译码,输出无效电平(高电平)。
解答:
(1)写出对应的二进制地址码:
(2)根据地址范围的容量以及该范围在计算机系统中的作用,选择存储芯片:
6000H~6700H为系统程序区的范围,应选择1片2K✖8位的ROM;
6800H~6BFFH为用户程序区的范围,应选择2片1K✖4位的ROM以满足1K乘以8位的用户程序区的要求。
(3)分配地址线
剩下的高位地址与访存控制信号
M
R
E
Q
‾
\overline{MREQ}
MREQ共同产生存储芯片的片选信号。
(4)确定片选信号
必须保证控制端G1为高电平,
G
2
A
‾
\overline{G_{2A}}
G2A与
G
2
B
‾
\overline{G_{2B}}
G2B为低电平,才能使译码器正常工作。根据第一步写出的存储器地址范围得出,A_15始终为低电平,A14始终为高电平,它们正好可分别与译码器的
G
2
A
‾
\overline{G_{2A}}
G2A和
G
1
G_{1}
G1对应。
而访存控制信号 M R E Q ‾ \overline{MREQ} MREQ(低电平有效)又正好可与 G 2 B ‾ \overline{G_{2B}} G2B对应。
剩下的A13、A12、A11可分别接到译码器的C、B、A输入端,决定是选择1片ROM还是2片RAM。
图中ROM芯片的
P
D
‾
/
p
r
o
g
r
\overline{PD}/progr
PD/progr端接地,以确保在读出时低电平有效。RAM芯片的读写控制端与CPU的读写命令端
W
R
‾
\overline{WR}
WR
相连。ROM的8跟数据线直接与CPU的8根数据线相连,2片RAM的数据线分别于CPU数据总线的高4位和低4位相连。
5.2.2.2 第二个例子
问题:
解答:
(1)根据题目的地址范围写出相应的二进制地址码:
黄色区域表示的是最小8K×8位系统程序区
绿色区域表示的是相邻16K×8位用户程序区
红色区域表示的是最大4K×8位系统程序工作区
(2)根据地址范围的容量及其在计算机系统中的作用,确定最小8KB系统程序区选择1片8K×8位ROM;与其相邻的16KB用户程序区选择2片8K×8位RAM的地址线;最大4KB系统程序工作区选择1片4K×8位RAM;
(3)分配CPU地址线
将CPU的低13位地址线A12~A0与1片8K×8位ROM和2片8K×8位RAM地址线相连;
将CPU的低12位地址线A11~A0与1片4K×8位RAM地址线相连。
(4)形成片选信号
6 存储器的校验
纠错或检错能力与什么因素有关?
编码的检测能力和纠错能力与任意两组合法代码之间二进制位的最少差异数有关。
如:
6.1 编码的最小距离
编码的纠错 、检错能力与编码的最小距离有关
6.2 汉明码的组成
汉明码采用奇偶检验和分组校验
汉明码的分组是一种非划分方式,分成3组,每组有1位校验位,
共包括4位数据位:
组成汉明码的三要素(假设欲检测的二进制代码为n位):
添加k个检测位就是添加k组。
各检测位 Ci 所承担的检测小组为:
如:求0101按“偶校验”配置的汉明码
C1检测的g1小组包含第 1,3,5,7。其中3、5、7位上1的个数是偶数个,那么C1值就为0;同理C2值为1,C4值为0。
7 提高访存速度的措施
随着计算机应用领域的不断扩大,处理的信息量越来越多,对存储器的工作速度和容量要求也越来越高。此外,因为CPU的功能不断增强,I/O设备的数量不断增多,致使主存的存取速度已成为计算机系统的瓶颈。
可见,提高访存速度也成为迫不及待的任务。为了解决此问题,除了(1)寻找高速元件和(2)采用层次结构Cache-主存以外,(3)调整主存的结构也可提高访存速度。
这里主要讨论调整主存结构的方式。
7.1 单体多字系统
由于程序和数据在存储体内是连续存放的,因此CPU访存取出的信息也是连续的,如果可以在一个存取周期内,从同一地址取出4条指令,然后再逐条将指令送至CPU执行,即每隔1/4存放周期,主存向CPU送一条指令,这样显然增大了存储器的带宽,提高了单体存储器的工作速度。
但是这种办法有一个前提:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或操作数不能连续存放,这种方法效果不明显。
7.2 多体并行系统
多体并行系统采用多体模块组成的存储器,每个模块有相同的容量和存取速度,各模块各自都有独立的地址寄存器(MAR)和数据寄存器(MDR)、地址译码、驱动电路 和 读/写电路,它们能并行工作也可以交叉工作。
7.2.1 高位并行系统
高位地址可表示体号,低位地址为体内地址。按这种编址方式,只要合理调动,使不同的请求源同时访问不同的体,便可实现并行工作。例如,当一个体正与 CPU 交换信息时,另一个体可同时与外部设备进行直接存储器访问,实现两个体并行工作。这种编址方式由于一个体内的地址是连续 的,有利于存储器的扩充。
但由于是一个体存满,再存入下一个体,所以可能会造成某一个体的频繁访问,而其它体空闲的情况。
高位交叉编址的存储器能够提高访存速度的原因是各个体分别响应不同请求源的请求,实现多体并行。
7.2.2 低位并行系统
由于程序连续存放在相邻体中,故又有交叉存储之称。显然低位地址用来表示体号,高位地址为体内地址。这种编址方法又称为模 M 编址( M 等于模块数)。
下表列出了模 4 交叉编址的地址号。一般模块数 M 取 2 的方幕,使硬件电路比较筒单。有的机器为了减少存储器冲突,采用质数个模块,例如,我国银洞机的M为31,其硬件实现比较复杂。
多体模块结构的存储器采用交叉编址(即低位并行系统)后,可以在不改变每个模块存取周期的前提下,提高存储器的带宽。
多体模块结构的存储器采用交叉编址后,可以在不改变每个模块存取周期的前提下,提高存储器约带宽。上图示意了CPU 交叉访问4 个存储体 的时间关系,负脉冲为启动每个体的工作信号。
显然对每个体而言,存取周期均未缩短,但由于 CPU 交叉访问各体,使 4 个存储体的读/写过程重叠进行,最终在一个存取周期的时间内,在储器实际上向 CPU 提供了4 个存储字 如果每个模块存储字长为 32 位,则在一个存取周期内〈 除第一个存取周期外),存储器向 CPU 提 供了32 x 4 = 128 位二进制代码,大大增加了存储器的带宽。
一个四体并行低位交叉存储器,每个模块的容量是64K*32位,存取周期为200ns,在200ns内,存储器能向CPU提供 128 位二进制信息。
高位交叉应用于存储器容量的扩展,低位交叉应用于存储器带宽和访问速度的提高。
7.3 高性能存储芯片
采用高性能存储芯片是提高主存速度的措施之一。
DRAM 集成度高,价格便宜,广泛应用 于主存。其发展速度很快,儿乎每隔3 年存储芯片的容量就翻两番。
为了进一步提高 DRAM 的性能,人们开发了许多对基本 DRAM 结构的增强功能,出现了SDRAM 、RDRAM 和 CDRAM。
(1)SDRAM(同步DRAM)
SDRAM与常用的异步DRAM不同,它与处理器的数据交换同步于系统的时钟信号,并且以处理器-存储器总线的最高速度运行,而不需要插入等待状态。
(2) RDRAM ( Rambus DRAM)
由 Rambus 开发的 RDRAM 采用专门的 DRA M 和高性能的芯片接口取代现有 的存储器接 口。
它主要解决存储器带宽的问题,通过高 速总线获得存储器请求 ( 包括操作时所需的地址 、操作类型和字节数),总线最多可寻址 320 块 RDRAM 芯片,传输率可 达 1.6)GBps。它不像传统的DRAM 采用 R A S ‾ \overline{RAS} RAS、 C A S ‾ \overline{CAS} CAS和 W E ‾ \overline{WE} WE 信号来控制,而是采用异步的面向块的传输协议传送地址信息 和 数据信息。
一个 RDRAM 芯片就像一个存储系统,通过一种新的互连电路 RamLink,将 各个 RDRAM 芯片连接成一个环,数据通信在主存控制器的控制下进行,数据交换以包为单位。
(3)带Cache的DRAM(CDRAM)
带 Cache 的 DRAM 是在通 常的 DRAM 芯片内又集成 了一个小的 SRAM ,又称增强型 的 DRAM(EDRAM) 。下图是 1 M x 4 位的 CDRAM,其中 SRAM 为 512 x 4 位,DRAM 排列成 2048 x 512 ×4 位的阵列。
由图中可见,地址引脚线只有 11 根( A10 ~ A0 ) ,而 1 M x 4 位的存储芯片对应 20 位地址,此20 位地址需分时送入芯片内部。首先在行选通信号作用下,高 11 位地址经地址引脚线输入,分别保存在行地址锁存器中和最后读出行地址锁存器中 。
在 DRAM 的 2048 行中,此指定行地址的全部数据 512 x 4 位被读到 SRAM 中暂存。然后在列选通信号作用下,低 9 位地址经地址引脚线输入,保存到列地址锁存器中。在读命令有效时,512 个 4 位组的 SRAM 中某一 4 位组被这个列地址选中,经数据线 D3 向 D0 从芯片输出。下一次读取时,输入的行地址立 即与最后读出行锁存器的 内容进行 II位 比较。若比较相符,说明该数据在 SRAM 中,再由输入列地址 选择某一 4 位组输出;若比较不相符,则需驱动DRAM 阵列更新 SRAM 和最后读出行地址锁存器中的内容,并送出指定的4 位组。
由此可见 ,以 SRAM 保存一行内容的方法,当对连续高 11 位地址相同(属于同一行地址) 的 数据进行读取时,只需连续变动 9 位列地址就可使相应的 4 位组连续读出,这被称为猝 发式读 取,对成块传送十分有利。
从图 4.48 所示的结构可见,芯片内的数据输出路径〈 由 SRAM 到 I/O) 与数据输入路径(由 I/O到读放大器和列写选择)是分开的,这就允许在写操作完成的同时启动同一行的读操作。
此外,在 SRAM 读出期间可同时对 DRAM 阵列进行刷新。