对于只读存储器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”,即。
对于这四种二进制代码,每一个都对应一个芯片的地址(芯片号)。
在这里,其实还有字扩展和位扩展同时使用,不过原理都是一样的,作者就不赘述了。
对于存储器来说,它里面存的数据可能会出错,比如当某个电器元件短路时,DRAM依靠电容存储
数据,此时它的数据就会出错,为此我们需要一种方法来检验存储器里面存储的数据是否正确。
我们主要说明两种方法:“汉明校验法”【必会】、“CRC校验法”。
汉明校验码只具有“1”位纠错能力。
汉明校验码需要具备一定的能力,慎重考虑。
我们先来了解一下,纠错理论:
“L - 1 = D + C 且 D >= C”。
即编码最小距离L越大,其检错位数D就越大,纠错位数C就越大。
其中C恒小于等于D。
例如,当L = 3时,那么这种编码可以检错2位或者可以检错1位并且纠错1位。
我们再来看一下汉明校验码的编码理论:
假设需要检测的二进制代码位数为n位,那么需要添加k为检测位,共组成n+k位二进制编码。
其中:
?>= n + k + 1。
当k的位数确定后,我们就可以分配增加的k位检测码放到哪里了。
我们人为规定将n+k位二进制代码,从左至右依次记为1,2,3,4...n+k位(这与二进制代码从右至
左是不同的,不要弄混),我们再将k位检测码分别放到1,2,4,8,16...位上。
其中,每一个检测位对应一个检测小组,具体分配如下:
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.每两个小组共同占有一位是其他小组没有的,这个位数是:“+”,其中i,j是组号
3.每三个小组共同占有“++”。其中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 + 4 = 6位。
那么第6位是1,只需要将它取反变成0即可,此时正确的汉明码我们已经求出:
0100101。
下图是该例子的一个示意图:
下面,我们给出一道练习题:
“已知接收到的汉明码为0110101(偶原则配置),试问欲传送的信息是什么?”
原谅作者手机马赛克画质QVQ
最后,我们再给出一道课后练习题,交给读者们自行完成:
请按照奇原则配置1100101的汉明码: