计算机组成原理 第三章(存储器)—第三节(主存储器(下))

写在前面:

  1. 本系列笔记主要以《计算机组成原理(唐朔飞)》为参考,大部分内容出于此书,笔者的工作主要是挑其重点展示,另外配合下方视频链接的教程展开思路,在笔记中一些比较难懂的地方加以自己的一点点理解(重点基本都会有标注,没有任何标注的难懂文字应该是笔者因为强迫症而加进来的,可选择性地忽略)。
  2. 视频链接:计算机组成原理(哈工大刘宏伟)135讲(全)高清_哔哩哔哩_bilibili

一、存储器与CPU的连接

1、存储容量的扩展

(1)由于单片存储芯片的容量总是有限的(因为把一片芯片的容量做得非常大是不切实际的),因此有时需要将若干存储芯片连在一起才能组成足够容量的存储器,这称为存储容量的扩展。

(2)存储容量的扩展有位扩展和字扩展两种方式:

①位扩展:位扩展是指增加存储字长例如2片1K×4位的芯片可组成1K×8位的存储器,如下图所示,图中2片2114的地址线A_{9}\sim A_{0}\overline{CS}\overline{WE}都分别连在一起,其中一片的数据线作为高4位D_{7}\sim D_{4},另一片的数据线作为低4位D_{3}\sim D_{0},这样便构成了一个1K×8位的存储器

②字扩展:字扩展是指增加存储器中字的数量例如用2片1K×8位的存储芯片可组成一个2K×8位的存储器,即存储字增加了一倍,如下图所示,A_{10}用作片选信号,由于存储芯片的片选输入端要求低电平有效,那么当A_{10}为低电平时\overline{CS}_{0}有效,选中左边的1K×8位芯片,当A_{10}为高电平时,经过反相后使得\overline{CS}_{1}有效,选中右边的1K×8位芯片

③字、位扩展:字、位扩展是指既增加存储字的数量,又增加存储字长,下图所示是用8片1K×4位的芯片组成4K×8位的存储器,每2片1K×4位的芯片构成一组1K×8位的存储器,4组便构成4K×8位的存储器,地址线A_{11}A_{10}经片选译码器得到4个片选信号分别选择其中1K×8位的存储芯片,\overline{WE}为读/写控制信号。

2、连接方式

(1)地址线的连接:存储芯片的容量不同,其地址线数也不同,CPU的地址线数往往比存储芯片的地址线数多,通常总是将CPU地址线的低位与存储芯片的地址线相连,CPU地址线的高位或在存储芯片扩充时使用,或做其它用途(比如片选信号)。例如,假设CPU的地址线为16位A_{15}\sim A_{0},1K×4位的存储芯片仅有10根地址线A_{9}\sim A_{0},此时可将CPU的低位地址A_{9}\sim A_{0}与存储芯片的地址线A_{9}\sim A_{0}相连。

(2)数据线的连接:CPU的数据线数与存储芯片的数据线数也不一定相等,这时必须对存储芯片进行扩位,使其数据位数与CPU的数据线数相等

(3)读/写命令线的连接:CPU的读/写命令线一般可直接与存储芯片的读/写控制端相连,通常高电平为读,低电平为写;有些CPU的读/写命令线是分开的,此时CPU的读命令线应与存储芯片的允许读控制端相连,而CPU的写命令线则应与存储芯片的允许写控制端相连。

(4)片选线的连接:存储器由许多存储芯片组成,哪一片被选中完全取决于该存储芯片的片选控制端能否接收到来自CPU的片选有效信号,对此有两种连接方式——一种是线选法,即用n条线连接n个芯片,简单粗暴,但是地址空间不连续;另一种是译码片选法(常用),如上图所示,它用n条线即可连接2^{n}个芯片,且地址空间可连续,只是电路稍微有点复杂。

(5)合理选择存储芯片:主要是指存储芯片类型(RAM或ROM)和数量的选择,通常选用ROM存放系统程序、标准子程序和各类常数等,RAM则是为用户编程而设置。

(6)举例:

①假定主存地址空间分配如下(按字节寻址),CPU有16根地址线,那么将下面的地址写成16位二进制地址码后,可以发现A_{9}\sim A_{0}并不能区分开系统程序区和用户程序区,直到A_{10}开始有差别,当A_{10}为1时会选中系统程序区,当A_{10}为0时两个区都有可能被选中,于是可以将CPU的低11位地址A_{10}\sim A_{0}与1片2K×8位的ROM地址线相连,将CPU的低10位地址A_{9}\sim A_{0}与2片1×4K的RAM地址线相连,剩下的高位地址与访存控制信号共同产生存储芯片的片选信号

A_{15}始终为低电平,A_{14}始终为高电平,它们正好可分别与74138译码器的\overline{G}_{2A}(低)和G_{1}(高)对应,而访存控制信号\overline{MREQ}(低电平有效)又正好可与\overline{G}_{2B}(低)对应,剩下的A_{13}A_{12}A_{11}可分别接到译码器的C、B、A输入端,其输出\overline{Y}_{4}有效时选中1片ROM,\overline{Y}_{5}A_{10}同时有效均为低电平时,与门输出选中2片RAM

二、存储器的校验

1、汉明码的组成

(1)在计算机运行过程中,由于种种原因致使数据在存储过程中可能会出现差错,为了及时发现错误并纠正,通常可将原数据配成汉明编码。

(2)汉明码具有一位纠错能力

        由编码纠错理论得知,任何一种编码是否具有检测能力和纠错能力,都与编码的最小距离有关,所谓编码的最小距离是指在一种编码系统中,任意两组合法代码之间的最少二进制位数的差异

        根据纠错理论得L-1=D+C(D\geq C),即编码最小距离L越大,其检测错误的位数D越大,纠正错误的位数C也越大,且纠错能力恒小于或等于检错能力。

(3)假设要检测的二进制代码为n位,为使其具有纠错能力,需增添k位检测位,组成n+k位的代码。为了能准确对错误定位以及指出代码无误,新增添的检测位数k应满足2^{k}\geq n+k+1

n

K(最小)

1

2

2~4

3

5~11

4

12~26

5

27~57

6

58~120

7

(4)设n+k位代码自左向右依次编为第1、2、3、…、n+k位,而将k位检测位记作C_{i}(i=1,2,4,8,\cdots ),分别安插在n+k位代码编号的第1、2、4、8、…、2^{k-1}位上

这些检测位的位置设置是为了保证它们能分别承担n+k位信息中不同数位所组成的“小组”的奇偶检测任务,使检测位和它所负责检测的小组中1的个数为奇数或偶数,具体分配如下:

②按照上面列出的分配方式,其余检测位的小组所包含的位也可类推,这种小组的划分有如下特点:

(5)举例:

2、汉明码的纠错过程

(1)汉明码的纠错过程实际上是对传送后的汉明码形成新的检测位P_{i}(i=1,2,4,8,\cdots ),根据P_{i}的状态便可直接指出错误的位置。P_{i}的状态是由原检测位C_{i}及其所在小组内“1”的个数确定的,倘若是按配偶原则配置的汉明码,其传送后形成新的检测位P_{i}应为0,否则说明传送出错,并且还可直接指出出错的位置

(2)继续以n=4为例(采用配偶原则),由于P_{i}C_{i}有对应关系,则P_{i}可由下式确定:

(3)汉明码虽然只能纠正1位错误,但是如果添加一个全校验位,那么它还可以检出2位错误,不过当检出2位错误的时候(全体校验成功,但其它校验位有问题),计算机没办法进行纠错,只能进行重传。

三、提高访存速度的措施

1、单体多字系统

(1)由于程序和数据在存储体内是连续存放的,因此CPU访存取出的信息也是连续的,如果可以在一个存取周期内从同一地址取出4条指令,然后再逐条指令送至CPU执行,即每隔1/4存取周期,主存向CPU送一条指令,这样显然增大了存储器的带宽,提高了单体存储器的工作速度。

(2)下图所示是一个单体四字结构的存储器,每字W位,按地址在一个存取周期内可读出4×W位的指令或数据,使主存带宽提高到原来的4倍。采用这种办法的前提指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显。

2、多体并行系统

(1)多体并行系统就是采用多体模块组成的存储器,每个模块有相同的容量和存取速度,各模块各自都有独立的地址寄存器(MAR)、数据寄存器(MDR)、地址译码、驱动电路和读/写电路,它们既能并行工作,又能交叉工作(并行工作即同时访问N个模块,同时启动,同时读出,完全并行地工作,不过同时读出的N个字在总线上需分时传送)。

(2)下图所示的是适合于并行工作的高位交叉编址的多体存储器结构示意图,程序按体内地址顺序存放(一个体存满后,再存入下一个体),于是又有顺序存储之称。高位地址可表示体号(即
M_{i},对下图而言是最高两位地址码),低位地址为体内地址,按这种编址方式,只要合理调动,使不同的请求源同时访问不同的体,便可实现并行工作。这种编址方式由于一个体内的地址是连续的,有利于存储器的扩充。

(3)下图所示的是低位交叉编址的多体存储器结构示意图,程序连续存放在相邻体中,于是又有交叉存储之称。低位地址用来表示体号(即M_{i},对下图而言是最低两位地址码),高位地址为体内地址,这种编址方法又称为模M编址(M等于模块数,地址码除以M,余数就是体号)

(4)多体模块结构的存储器采用交叉编址后,可以在不改变每个模块存取周期的前提下提高存储器的带宽。下图所示的是CPU交叉访问4个存储体的时间关系,负脉冲为启动每个体的工作信号,虽然对每个体而言存取周期均未缩短,但由于CPU交叉访问各体,使4个存储体的读/写过程重叠进行,最终在一个存取周期的时间内,存储器实际上向CPU提供了4个存储字。

(5)假设每个体的存储字长和数据总线的宽度一致,并假设低位交叉的存储器模块数为n,存取周期为T,总线传输周期为τ,那么当采用上图所示的流水线方式存取时应满足T=n\tau。以四体低位交叉编址(交叉存储)的存储器为例,采用流水方式存取的示意图如下图所示,连续读取n个字所需的时间为t_{1}=T+(n-1)\tau;若采用的是高位交叉编址(顺序存储)的存储器,则连续读取n个字所需的时间为t_{2}=nT

3、高性能存储芯片

        采用高性能存储芯片也是提高主存速度的措施之一。DRAM集成度高,价格便宜,广泛应用与主存,其发展速度很快。为了进一步提高DRAM的性能,人们开发了许多对基本DRAM结构的增强功能,出现了SDRAM、RDRAM和CDRAM。

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 00:26:03       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 00:26:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 00:26:03       20 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 00:26:03       20 阅读

热门阅读

  1. LLM(大语言模型)常用评测指标-MAP@R

    2024-03-13 00:26:03       23 阅读
  2. 使用Docker部署debezium来监控MySQL数据库

    2024-03-13 00:26:03       23 阅读
  3. 微信小程序重新加载当前页面、刷新当前页面

    2024-03-13 00:26:03       21 阅读
  4. lmbench学习

    2024-03-13 00:26:03       25 阅读
  5. 蚂蚁SEO蜘蛛池什么用?

    2024-03-13 00:26:03       22 阅读
  6. 什么场景只能用HTTP,不能用RPC?

    2024-03-13 00:26:03       21 阅读
  7. 深入探讨C++中的可变参数列表(Variadic Templates)

    2024-03-13 00:26:03       21 阅读
  8. C++读写锁

    2024-03-13 00:26:03       22 阅读