计算机组成原理之机器:存储器
笔记来源:哈尔滨工业大学计算机组成原理(哈工大刘宏伟)
Chapter3:存储器
3.1 概述
存储器可分哪些类型?
现代存储器的层次结构,为什么要分层?
没有哪一种存储器能同时满足高容量、高速度、低价格,为了同时满足这些需求,使用软件或硬件或软硬件方式将各种存储器“连接”在一起
3.2 主存储器
3.2.1 概述
主存的基本组成
主存与CPU之间的联系
MDR与主存(双向),数据的读和写
MAR与主存(单向),将MAR中地址传送给主存
主存中存储单元地址的分配
一根线有0和1两种状态,n根线共有
2
n
2^n
2n种状态,每种状态对应一个地址,一个地址对应存储空间基本单位1字节(1Byte=8bit)
1字(Word)=8字节(Bytes),1字节=8位(bit)
主存的技术指标
3.2.2 半导体存储芯片简介
半导体存储芯片的基本结构
地址线决定了存储单元个数
数据线决定了每个存储单元中存储位数
片选线(内存条两面都有存储芯片,本次要访问哪个存储芯片要进行选择)
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(允许写)
存储芯片中片选线的作用
当地址为65535时属于48K~64K-1的地址范围,片选最后一组存储芯片,取出8位数据(一片存1位)即一个字节
半导体存储芯片的译码驱动方式
译码:完成从编码到数据的转换
通过译码驱动方式来选定存储单元和基本电路
线选法(对容量稍大的存储芯片不太合适,因要求集成度要很高)
若输入4个0,则输出中只有字线0是有效的,若现在进行读操作,读写控制电路选通位线,对应数据被读取
重合法
行地址(X地址)、列地址(Y地址)
若行地址为全零,则X0这条线有效,列地址为全零,则Y0这条线有效,X0与Y0交汇处的0,0被I/O读取
3.2.3 随机存取存储器RAM
静态随机存取存储器SRAM
SRAM的工作原理是在存储单元中使用触发器存储数据,通过使一个触发器的输出控制另一个触发器的输入,可以将数据存储在SRAM中。—引自:day35-2 Sram 静态存储器
保存0和1的原理是什么?
双稳态触发器
基本单元电路的构成是什么?
对单元电路如何读出和写入?
SRAM读操作
SRAM写操作
典型芯片的结构是什么样子?
W
E
‾
\overline{WE}
WE低电平表示进行写操作,高电平表示读操作、
C
S
‾
\overline{CS}
CS低电平时该芯片被选中
A
0
A
9
A_0~A_9
A0 A9为地址信号,从中我们知道该芯片的存储单元个数为
2
9
=
1
K
2^9=1K
29=1K个,
I
/
O
1
I
/
O
4
I/O_1~I/O_4
I/O1 I/O4为读写数据端口从中我们知道每个存储单元占4位,综上该芯片存储容量=存储单元个数1K × 每个存储单元所占位数4位
SRAM芯片如何进行读写操作?
行地址6位,经过译码产生0~63共64个行选信号
列地址经过译码后的0号线连接了第一组中第0列和第二组中第0列和第三组中第0列和第四组中第0列
若行地址全零,经过译码后0号线被选中
列地址全零经过译码后0号线被选中,即每一组中第0列被选中
综合行地址与列地址,被选中的数据如下图
若现进行读操作,
C
S
‾
\overline{CS}
CS低电平该芯片被选中,
W
E
‾
\overline{WE}
WE高电平进行读操作
动态随机存取存储器DRAM
保存0和1的原理是什么?
电容若保存了电荷则认为存储信息为1,若无电荷则认为存储信息为0
基本单元电路的构成是什么?
三管DRAM和单管DRAM
对单元电路如何读出和写入?
三管DRAM读操作
|
|
|
|
三管DRAM写操作
写选择线有效T3导通,写数据线通过T3向Cg进行充电或放电,如果写入1也就是写数据线高电平,写数据线通过T3向Cg充电,Cg中保存的是1
单管DRAM的读写操作
字线为控制线
|
|
典型芯片的结构是什么样子?
参加译码的不仅是地址同时还有读写控制信号,如果是读信号,则读选择线有效,如果是写信号,则写选择线有效
DRAM芯片如何进行读写操作?
三管DRAM读操作
|
|
|
|
|
|
|
|
我们关注一下第63行线和第64行线中的读放大器,若读放大器左侧为0,则右侧为1,反之亦然,这是一个“跷跷板”电路
|
|
|
|
DRAM为什么要刷新?刷新的方法是什么?
因为电容会漏电所以我们需要刷新放大器来进行刷新信号防止信号消失
要刷新的话是一行一起刷新,刷新只与行地址有关,与列地址无关
SRAM和DRAM的比较
3.2.4 只读存储器ROM
按ROM原始定义,一旦注入原始信息即不能改变,但随着用户的需要,总希望能任意修改ROM内的原始信息。便出现了PROM、EPROM、EEPROM
ROM一般用于保存系统程序或系统配置信息
掩膜只读存储器MROM
行列选择线交叉处若有MOS管则为1
行列选择线交叉处若无MOS管则为0
可编程只读存储器PROM
可编程可擦除只读存储器EPROM
电可擦除可编程只读存储器EEPROM
电可擦写、局部擦写、全部擦写
闪速型存储器(Flash Memory)
3.2.5 存储器与CPU的连接
由于单片存储芯片的容量有限,很难满足实际需要,因此必须将若干存储芯片连在一起才能组成足够容量的存储器,称为存储容量的扩展
存储器容量扩展
(1)位扩展(增加存储字长)
第一个芯片接后4根数据线,第二个芯片接前4根数据线,4位扩展为8位
(2)字扩展(增加存储器字的数量)
1K扩展为2K
两片不能同时工作,因为两片的第一根线均与D7相连等等,两片输出都接到了相同的数据线上,若同时工作会造成数据混乱。因为有11根地址线,A0~A9作为地址线,A10作为片选
(3)位和字同时扩展
存储器与CPU的连接
(1)地址线的连接
第一步:先将十六进制地址范围写出二进制地址码,并确定其总容量
第二步:根据地址范围的容量以及该范围在计算机中的作用,选择存储芯片
6000H~67FFH为系统程序区的地址范围,应选择1片 2K×8位 的ROM(信息不可更改)
6800H~6BFFH为用户程序区的地址范围,应选择2片 1K×4位 的RAM
第三步:分配CPU的地址线
CPU低11位地址
A
10
A
0
A_{10}~A_0
A10 A0与2K×8位的ROM地址线相连
CPU低10位地址
A
9
A
0
A_{9}~A_0
A9 A0与2K×8位的ROM地址线相连
剩下的高位地址
A
14
A
11
A_{14}~A_{11}
A14 A11与CPU的访存控制信号
M
R
E
Q
‾
\overline{MREQ}
MREQ共同产生存储芯片的片选信号
(2)数据线的连接
ROM连接数据线中数据流向是单向的
RAM连接数据线中数据流向是双向的
(3)读/写命令线的连接
(4)片选线的连接
A15~A10只有为011010时才能片选第二组,A10一定为0,要与片选译码器输出端Y5结合共同形成片选第二组的一个信号
3.2.6 存储器的校验
为什么要对存储器的信息进行校验?
若内存所处电磁环境复杂,空间环境下受到带电粒子打击可能造成电容的充电放电或触发器的翻转,存放在其中的信息会出错
为了能够校验出信息是否正确,如何进行编码?
第一行合法代码集合用3倍冗余方式表示计算机中存储的一位数字,也就是说三位编码000表示计算机中存储的0
第一行合法代码集合中,如果其中一个合法代码的某一位翻转了,则它又变成了另一个合法代码,故无法检测出它发生了错误。
第二行合法代码集合中,如果其中一个合法代码的某一位翻转了,则它没有变成任何另外一个合法代码,故可以检测出1位错误,如果其中一个合法代码的某两位翻转了,则它又变成了另一个合法代码,故无法检测出它发生了错误,综上该编码仅有1位检错能力和0位纠错能力
第三行合法代码集合中,三位编码000表示计算机中存储的0,111表示计算机中存储的1,假设现在收到编码100(显然不在合法代码集合中),而正确编码只能是000或者111,现在出现100,我们猜大概率是1位错且是第1位错了,我们把100纠正为000。假设现在收到编码110(显然不在合法代码集合中),而正确编码只能是000或者111,现在出现110,我们猜大概率是1位错且是第3位错了,我们把110纠正为111。
第四行合法代码集合中,假设现在收到编码1100(显然不在合法代码集合中),而正确编码只能是0000或者1111,现在出现1100,到底是前两位1发生错误了还是后两位0发生错误了,我们不得而知。假设现在收到编码1000(显然不在合法代码集合中),而正确编码只能是0000或者1111,现在出现1000,大概率是第1位发生错误了,我们将1000纠正为0000
纠错或检错能力与什么因素有关?
第一行合法代码集合中,只要其中一个合法代码改变1位就会变成另一个合法代码,无法检测错误代码
第二行合法代码集合中,要想把一个合法代码改变为另一个合法代码,至少需要改变2位。若在存储过程中代码发生1位改变我们就能检测出来
第三行合法代码集合中,要想把一个合法代码改变为另一个合法代码,至少需要改变3位。若在存储过程中代码发生1位改变我们就能检测出来,并知道哪一位错了。{000,111} 假设收到110,大概率1位发生错误,对比正确代码,我们知道第3位错了
第四行合法代码集合中,要想把一个合法代码改变为另一个合法代码,至少需要改变4位。若在存储过程中代码发生2位改变我们就能检测出来,并知道哪一位错了。
任意两组合法代码之间二进制位的最少差异数
例如第一行合法代码集合,任意两组代码如000,001之间是差1位,则无检错纠错能力。
第二行合法代码集合,任意两组代码如000,011之间是不同位数是2位,则检错1位,纠错0位。
第三行合法代码集合,任意两组代码如000,111之间是不同位数是3位,则检错1位,纠错1位,一共2位(与3差1)
第四行合法代码集合,任意两组代码如0000,1111之间是不同位数是4位,则检错2位,纠错1位,一共3位(与4差1)
第五行合法代码集合,任意两组代码如00000,11111之间是不同位数是5位,则检错2位,纠错2位,一共4位(与5差1)
检验处信息出错后如何进行纠错?
相关文章:汉明码(Hamming Code)底层原理
3.2.7 提高访存速度的措施
随着计算机应用领域的不断扩大,处理的信息量越来越多,对存储器的工作速度和容量要求越来越高。因CPU功能不断增强,I/O设备数量不断增多,致使主存的存取速度已成为计算机系统的瓶颈。可见,提高访存速度成为迫不及待的任务。为解决此问题,除了采寻找高速元件和采用层次结构cache-主存以外,调整主存结构也可提高访存速度。—引自《计算机组成原理》唐朔飞
单体多字系统
在一个存取周期内,从同一个地址取出4条指令,然后再逐条将指令送至CPU执行,前提是指令和数据在主存内必须是连续存放的,一旦遇到转移指令或操作数不能连续存放,这种方法效果就不明显
多体并行系统(多个独立存储模块并行)
(1)高位交叉 顺序编址
前两位地址是对存储体进行编号,00对应第1个存储体,01对应第2个存储体,10对应第3个存储体,11对应第4个存储体。其余位数的地址对存储体内进行编址。
若某程序的数据连续存放,则首先会存入第一个存储体,可能其他存储体均未存入数据,这就造成第一个存储体忙碌,而其他存储体空闲,无法实现并行工作
(2)低位交叉 各个存储体轮流编址
以流水方式访问每个存储体
高性能存储芯片
SDRAM(同步动态随机存取内存)在系统时钟的控制下进行读出和写入,CPU无需等待
RDRAM(Rambus公司开发的DRAM)主要解决存储器带宽问题
CDRAM(Cache DRAM)
在DRAM芯片内集成了一个由SRAM组成的cache,利于猝发式读取