锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

计算机组成原理:P4-存储器(中)

时间:2023-12-16 10:37:02 a14集成电路

本系列文章为哈尔滨工业大学刘宏伟计算机原理学习笔记,前一系列文章链接如下:
计算机组成原理:P1-计算机系统概述
计算机组成原理:P2-系统总线
计算机组成原理:P3-存储器(上)

文章目录

  • 一、只读存储器(ROM)
  • 二、存储器和CPU的连接
    • 2.1 扩展存储容量
    • 2.2 存储器和CPU的连接
  • 三、存储器验证
    • 3.1 校验原理
    • 3.2 汉明码
  • 四、提高访存速度的措施


一、只读存储器(ROM)

只读存储器的发展

早期只读存储器——在厂家写内容
该设备适用于大规模计算机或某些设备的生产,节约,价格低廉。但对于研究人员来说,如果我们想开发一台新的机器来编制系统程序和系统配置信息,这是不合适的。
? 改进1:用户可以自己写-一次性写-
? 改进2:可以多次写-擦除信息
? 改进3:电可擦写-特定设备
? 改进4:电可擦写-直接连接到计算机

各类只读存储器

①掩模ROM(MROM)
线路交叉处有行列选择 MOS 管为“1”
行列选择线交叉处无 MOS 管为“0”
②PROM(一次性编程)
这是一个破坏性的编程,如果程序错误,只能购买
芯片烧写。
在这里插入图片描述
③EPROM(多次编程)
每次用紫外线擦洗浮动栅。芯片上有一个石英窗,紫外线驱散浮动栅。

④EEPROM(多次编程)
电可擦写
局部擦写
全部擦写
⑤Flash Memory(闪速存储器)
EPROM----价格便宜,集成度高
EEPROM----电可以擦洗重写
比EEPROM----快,具备RAM功能


二、存储器和CPU的连接

CPU主存储器中保存了执行指令、所需数据和程序运行结果,因此必须实现CPU只有与主存储器正确连接,才能实现信息交换。CPU地址线较多,寻址空间范围较大,构成主存储器需要多个存储芯片。

2.1 扩展存储容量

位置扩展(增加存储字长)

假设我们手里有一个K×4位的存储芯片,用几个这样的芯片如何组成1K×8位存储器?
我们的芯片:10条地址线,每个存储单元提供4位数据
构成的芯片条地址线,每个存储单元提供8位数据
使用两个芯片,使用相同的片选信号 C S  ̄ \overline { {\rm{CS}}} CS(同时选择两个芯片工作),读写信号 W E  ̄ \overline { {\rm{WE}}} WE(每次从两个芯片的相同位置获取4位数据)。地址线还是10条,地址线输入到两个芯片的地址管脚。8条数据线,4个芯片。

扩展字(增加存储字数)

假设我们手里有一个K×8位存储芯片,如何用几个这样的芯片组成2K×8位存储器?
我们的芯片:10条地址线,每个存储单元提供8位数据
构成的芯片:11条地址线,每个存储单元提供8位数据
两个芯片的地址管脚和数据管脚分别连接到10条地址线和8条数据线。两个芯片不能同时工作,否则存储字长为16。所以我们将有2个K×8的存储器分为两个1K×8芯片,因为还剩下一条地址线,根据 A 10 \rm{A_{10}} A10是0/1来决定使用第一个还是第二个芯片。这样, A 10 \rm{A_{10}} A10就是这两个芯片的片选信号。

字、位扩展

假设我们手上有1K×4位的存储芯片,用几个这样的芯片如何组成4K×8位的存储器?
我们的芯片:10根地址线,每个存储单元提供4位数据
构成的芯片:12根地址线,每个存储单元提供8位数据
需要(4×8)/(1×4)=8个芯片。首先用两个1K×4位的芯片构成1个1K×8位的芯片,这两个芯片的片选是相同的。一共需要4组这样的芯片构成4K×8位的芯片。剩余的2根地址线用来做片选信号,根据00/01/10/11判断选择哪个芯片。
第一组芯片:000000000000~001111111111
第二组芯片:010000000000~011111111111
第三组芯片:100000000000~101111111111
第四组芯片:110000000000~111111111111


2.2 存储器和CPU的连接

例1:

题目描述: CPU有16根地址线(寻址范围为 2 16 = 64 K \rm{2^{16}=64K} 216=64K),8根数据线(一次传输8bit数据),用 M R E Q ‾ \overline { {\rm{MREQ}}} MREQ作为访存控制信号(低电平有效:低电平时访问存储器,高电平访问I/O)。存储芯片RAM有1K×4位、4K×8位、8k×8位的,ROM有2K×8位、4K×8位、8k×8位的。现在我们要构成一个存储体,要求从6000到67FF是系统程序区,从6800到6BFF是用户程序区。同时,使用138译码器。
思路:
①写出对应的二进制地址码
地址线是16根,所以写成16位。
对于系统程序区,起始地址6000就是0110 0000 0000 0000。结束地址67FF就是0110 0111 1111 1111。所以,存储空间就是 0110011111111111 − 0110000000000000 = 2 11 = 2 K 0110 0111 1111 1111 - 0110 0000 0000 0000 = 2^{11}=\rm{2K} 01100111111111110110000000000000=211=2K
对于用户程序区,起始地址6800就是0110 1000 0000 0000。结束地址6BFF就是0110 1011 1111 1111。所以,存储空间就是 0110101111111111 − 0110100000000000 = 2 10 = 1 K 0110 1011 1111 1111 - 0110 1000 0000 0000 = 2^{10}=\rm{1K} 01101011111111110110100000000000=210=1K

② 确定芯片的数量及类型
系统程序区选用ROM,只读。由于有2K×8的芯片,于是选用1片2K×8的芯片
用户程序去选用RAM,可读可写。由于没有1K×8的芯片,我们使用2片1K×4的芯片,将片选信号连接起来即可。
③分配地址线
对于2K×8的ROM, A 0 \rm{A_{0}} A0- A 10 \rm{A_{10}} A10作为芯片需要的内部地址, A 11 \rm{A_{11}} A11- A 15 \rm{A_{15}} A15作为芯片选择信号。
对于2片1K×4的RAM, A 0 \rm{A_{0}} A0- A 9 \rm{A_{9}} A9作为芯片需要的内部地址, A 10 \rm{A_{10}} A10- A 15 \rm{A_{15}} A15作为芯片选择信号。

④分配片选信号并确定片选逻辑
现在要求我们使用138译码器,有3个输入C、B、A,3个控制信号 G 1 \rm{G_1} G1(高电平有效)、 G 2 A ‾ \overline { {\rm{G_{2A}}}} G2A(低电平有效)、 G 2 B ‾ \overline { {\rm{G_{2B}}}} G2B(低电平有效),2个输出 Y 4 ‾ \overline { {\rm{Y_4}}} Y4(低电平有效)、 Y 5 ‾ \overline { {\rm{Y_5}}} Y5(低电平有效)。
输入A、B、C直接连接到 A 11 \rm{A_{11}} A11- A 13 \rm{A_{13}} A13,对应输出 Y 4 ‾ \overline { {\rm{Y_4}}} Y4连接到ROM,输出 Y 5 ‾ \overline { {\rm{Y_5}}} Y5连接到RAM同时 A 10 \rm{A_{10}} A10要为低电平才能选中RAM。控制信号 G 1 \rm{G_1} G1高电平有效,所以连接到 A 14 \rm{A_{14}} A14。控制信号 G 2 A ‾ \overline { {\rm{G_{2A}}}} G2A低电平有效,所以连接到 A 15 \rm{A_{15}} A15。最后 G 2 B ‾ \overline { {\rm{G_{2B}}}} G2B还需要连,不要忘了低电平有效的 M R E Q ‾ \overline { {\rm{MREQ}}} MREQ,连接起来。最后,将ROM的编程端接地,读写信号线连接到RAM上。ROM和8条数据线连接,2片RAM分别连接4条数据线,ROM只能读出所以数据线是单向的。


例2:

题目描述: 假设同前,要求最小4K为系统程序区,相邻8K为用户程序区。
思路:
①写出对应的二进制地址码并确定芯片数量
系统程序区是4K,于是使用 A 0 \rm{A_{0}} A0- A 11 \rm{A_{11}} A11,从0000 0000 0000 0000到0000 1111 1111 1111。由于有4K×8的ROM,所以使用1片4K×8的ROM。
用户程序区是相邻的8K,即从0001 0000 0000 0000开始。0001 0000 0000 0000到0001 1111 1111 1111是4K,于是再来1个4K构成8K,另外4K就是0010 0000 0000 0000到0010 1111 1111 1111。

②分配地址线
由于都是4K×8的芯片,于是需要的地址输入就是 A 0 \rm{A_{0}} A0- A 11 \rm{A_{11}} A11,我们可以从 A 11 \rm{A_{11}} A11 A 12 \rm{A_{12}} A12之间划开。后面的 A 0 \rm{A_{0}} A0- A 11 \rm{A_{11}} A11给每一个芯片,前面的作为芯片选择信号。
③分配片选信号和片选逻辑
A 12 \rm{A_{12}} A12- A 15 \rm{A_{15}} A15作为输入分配给C、B、A。 G 1 \rm{G_1} G1(高电平有效)接电源(也可以将 A 15 \rm{A_{15}} A15接个非门再接上)、 G 2 A ‾ \overline { {\rm{G_{2A}}}} G2A(低电平有效)接 A 15 \rm{A_{15}} A15 G 2 B ‾ \overline { {\rm{G_{2B}}}} G2B(低电平有效)接 M R E Q ‾ \overline { {\rm{MREQ}}} MREQ。ROM编程端接地,数据线是8根,方向是单向的。RAM数据线是8根,方向是双向的,并街上读写信号。


三、存储器的校验

3.1 校验原理

为什么要对存储器的信息进行校验?

以内存为例,它是电子设备,信息保存在电容中。如果是静态RAM,信息是保存在一个4管的触发器中。如果内存所处的电磁环境比较复杂或是在空间环境下受到带电粒子的打击,就可能会造成电容的充电/放电或触发器的翻转,存放在存储器中的信息就可能会出错。存储器中保存了程序运行需要的数据、代码等,如果不对保存的信息进行校验,就会导致程序的运行错误,引发程序失效和一些更大的后果。因此,我们需要对存储器的信息进行校验。现在不仅是一些安全关键系统需要对存储器进行校验,我们用的台式计算机、笔记本、手机、Pad里面保存的信息都采用校验技术。

为了能够校验出信息是否正确,如何进行编码?

例子:
①假设我们现在有这样一个合法代码集合{000,001,010,011,100,101,110,111},其中保存了从000到111的连续变化。现在假设000出错变成了001,而001仍然是集合中的合法代码。所以它是:检0位错、纠0位错

②下面我们对代码进行改造,现在的合法代码集只包含了4个代码{000, 011,10

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章