计算机组成原理第4章-(主存储器)【中】

发布时间:2023年12月20日

只读存储器ROM分类

对于只读存储器ROM来说,共有三类:“PROM”、“EPROM”、“EEPROM”。

存储器的扩展【重要

首先,我们要明白存储器为什么要扩展??

因为单片存储芯片的容量是有限的,很那满足实际的需要,因此,必须将若干存储芯片连在一起才

能组成足够容量的扩展器,这就是存储容量的扩展,也叫作存储器的扩展。

通常,对于存储器的扩展,有:“位扩展”、“字扩展”。

位扩展

位扩展是增加存储字长,例如2片1K * 4的芯片可以组成1片1K * 8的芯片。

这里有一点需要提醒读者,位扩展可以说对应的是MDR。(根数

我们给出一个例子,对于下图两片2114芯片,我们让其中一片2114芯片的D0,D1,D2,D3作为组成

的新的芯片的D4,D5,D6,D7

\

字扩展

字扩展是指增加存储器字的数量。(存储器单元的数量

对应的是MAR。(根数

例如,用2片1 K *8的芯片可以组成1片2K * 8的芯片。

对应的,此时我们增加一根MAR线,记做A10,A10用来区分两片芯片,可以假设A10为1的时候选

中左边的芯片,A10为0的时候选中右边的芯片,相对于位扩展来说,字扩展需要额外增加MAR线

的数量

在这里,抛给读者一个问题,当我想用四片1K * 8的芯片组成一片4K * 8的芯片,那么请问MAR线

有几根呢?

答案是11根。

对于答案的产生有两种方法,在这里作者按照之前讲的方法赘述一下:

已知一片1K * 8的芯片,需要10根MAR线,此时我们再拿出一根MAR线,这根MAR线可以存“0”,

也可以存“1”,那么是不是可以代表着能指示两片芯片呢??

同理,当我们多拿出两根MAR线,对于这两根MAR线,它们的数据组成一共有四种,换算成二进

制代码就是:“00”,“01”,“10”,“11”,即2^{2}

对于这四种二进制代码,每一个都对应一个芯片的地址芯片号)。

在这里,其实还有字扩展和位扩展同时使用,不过原理都是一样的,作者就不赘述了。

存储器的校验方法【极其重要

对于存储器来说,它里面存的数据可能会出错,比如当某个电器元件短路时,DRAM依靠电容存储

数据,此时它的数据就会出错,为此我们需要一种方法来检验存储器里面存储的数据是否正确。

我们主要说明两种方法:“汉明校验法”【必会】、“CRC校验法”。

汉明校验码

汉明校验码只具有“1纠错能力

汉明校验码需要具备一定的能力,慎重考虑。

我们先来了解一下,纠错理论:

“L - 1 = D + C 且 D >= C”。

即编码最小距离L越大,其检错位数D就越大,纠错位数C就越大。

其中C恒小于等于D。

例如,当L = 3时,那么这种编码可以检错2位或者可以检错1位并且纠错1位

我们再来看一下汉明校验码的编码理论

假设需要检测的二进制代码位数为n位,那么需要添加k为检测位,共组成n+k位二进制编码。

其中:

2^{k}?>= n + k + 1。

当k的位数确定后,我们就可以分配增加的k位检测码放到哪里了。

我们人为规定将n+k位二进制代码,从左至右依次记为1,2,3,4...n+k位(这与二进制代码从右至

左是不同的,不要弄混),我们再将k位检测码分别放到1,2,4,8,16...2^{k-1}位上。

其中,每一个检测位对应一个检测小组,具体分配如下:

C1:检测的小组包含1,3,5,7,9,11...位【从1开始,组长为1】?组1

C2:检测的小组包含2,3,6,7,10,11...位【从2开始,组长为2】?组2

C4:检测的小组包含4,5,6,7,12,13,14,15...位【从4开始,组长为4】?组3

C8:检测的小组包含8,9,10,11,12,13,14,15...位【从8开始,组长为8】?组4

.....

这样划分有下面三个特点:

1.每个小组有一位是它自己独有的。

2.每两个小组共同占有一位是其他小组没有的,这个位数是:“2^{i-1}+2^{j-1}”,其中i,j是组号

3.每三个小组共同占有“2^{i-1}+2^{j-1}+2^{k-1}”。其中i,j,k是组号

以此类推。

检错过程

现在给出一个例子:

建设我们要传递的信息是b4b3b2b1,那么我们可以求出k=3,此时它们的安排如下。

在这里,我们还需要强调一下,在汉明码检错的时候,有两种格式:“偶原则”、“奇原则”。

其中,偶原则是异或奇原则是先异或后对结果取反

现在我们再假设b4b3b2b1是:“0101”。

那么按照偶原则:

C1组包含:1,3,5,7,9....

在这个例子中就是包含1,3,5,7四位。

除去它自身第1位,就是包含3,5,7三位,即b4,b3,b1,我们对它们异或: 0?^ 1?^ 1?== 0。

同理,C2组包含:2,3,6,7,10,11...

在这个例子中就是包含2,3,6,7四位,即b4,b2,b1,对它们异或:0 ^ 0 ^ 1 == 1。

C4组就包含:4,5,6,7四位,即b3,b2,b1,对它们异或:1 ^ 0 ^ 1 == 0。

故7位汉明校验码就是:

0100101。

纠错过程

纠错过程就是检错过程的逆置,我们假设检测位Pi为(I=1,2,4,8,.....),即C1,C2,C4....

例如对于7位检测码,我们只需要检测P1,P2,P4即可。

若是偶原则,则P1,P2,P4需要是0,若是奇原则,则需要是1

我们假设接受到一个汉明码为:0100111。

该码为7位,因此,我们需要检测P1,P2,P4即可。

怎么检测呢?

偶原则就是异或,奇原则就是异或后取反!

所以P1 = 1 ^ 3 ^ 5 ^ 7(1357是位置) ,即P1 = 0 ^ 0 ^ 1 ^ 1 = 0

P2 = 2 ^ 3 ^ 6 ^ 7,即P2 = 1 ^ 0 ^ 1 ^ 1 = 1

P4 = 4 ^ 5 ^ 6 ^ 7,即P4 = 0 ^ 1 ^ 1 ^ 1 = 1

可见P2,P4出错(不是0),那么是哪一位出错了呢?

前面我们讲到,汉明码分类的一个重要性质:“每两组唯一确定一位”,ok啊!

那么它们确定的位是2^{2-1}+2^{3-1},即第 2 + 4 = 6位。

那么第6位是1,只需要将它取反变成0即可,此时正确的汉明码我们已经求出:

0100101。

下图是该例子的一个示意图:

下面,我们给出一道练习题:

“已知接收到的汉明码为0110101(偶原则配置),试问欲传送的信息是什么?”

原谅作者手机马赛克画质QVQ

最后,我们再给出一道课后练习题,交给读者们自行完成:

请按照奇原则配置1100101的汉明码:

文章来源:https://blog.csdn.net/zheshiyangyang/article/details/135116640
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。