16位海明解码电路设计(计算机数据表示实验)

首先了解实验大体的要求,该实验要求我们对22位海明编码进行解码成原来的16位,且判断是否出错,有一位错,两位错,还有无错。对于一位错,我们要进行纠正。

1.判断是否出错
设置有六位指错字,Gi(i=1,2,3,4,5,6),其中G5G4G3G2G1是进行判断是否数据出错,G6是总的奇偶校验位,可以用来检验数据是一位错,还是两位错。
已知有:
在这里插入图片描述
则可得Gi(i=1,2,3,4,5,6)

在这里插入图片描述
2.检错原理
当G5G4G3G2G1=0时,表示数据无传输错误,否则,表示出错。当发生一位数据错误时,G5G4G3G2G1所指示的数据,表示那位数据出错(例如G5G4G3G2G1=00101,则表示第5位数据出错)。若发生两位错时,G5G4G3G2G1仍不为0,由于只能纠正1位错误,故该海明编码是尽努力去纠正。
因此,增加一位总的奇偶校验位G6,进行判断是一位错,还是两位错。
①当G5G4G3G2G1=0,G6=0,表示数据无出错;
②G5G4G3G2G1 !=0,G6=1,表示发生一位数据出错;
③G5G4G3G2GG1=0,G6=1,表示该奇偶校验位出错,即发生一位出错;
④G5G4G3G2G1 !=0,G6=0,表示发生两位数据出错。

3.纠正数据
在纠正数据,得到原始16位数据这块设计上,可采用解码器对出错位进行输出,再与原来的数据进行异或,即可得纠正后的数据。
首先,我们来了解下解码器的功能。
在这里插入图片描述
左边箭头指向的为输入数据,是5位的二进制数据,第二个箭头是选择哪个输出为1,此时由于它连接了5位二进制数据,则该Decd解码器的输出端有2^5个输出端。此时数据为00000对应的十进制为0,则可从图中看出第0位输出是1,其他输出为0。

在这里插入图片描述
此时输入数据为00110对应十进制为6,则可从图中看出,第六位输出为1,其他输出为0。

因此如果输入数据为0的话,则第0位输出为1,否则第0位输出为0,因此我们可以将输入数据换成G5G4G3G2G1,用第0位输出判断G5G4G3G2G1是否为0(G5G4G3G2G1=0,则第0为输出为1),或者不为0(G5G4G3G2G1!=0,则第0位输出为0)。

纠正数据:将输入数据换成G5G4G3G2G1,将该解码器的第1位至23位用分离器连接起来,如上图的右边部分所示(此时,如果G5G4G3G2G1等于某个不为0的数据时,该数据将会输出为1)。将该22位数据与原来的海明码进行按位异或,则可得到原来无出错的数据,即进行纠正。
(提示:x异或0=x,x异或1=x的非)

4.电路图设计
由于一个电路图太大,就截两次图啦~
在这里插入图片描述
在这里插入图片描述
以下是完整的电路图,看不清楚的话,看上面两张的截图。在这里插入图片描述
这边说下,由于要获得纠正后的数据,即16位数据,由于该数据是从0开始的,故其检验位分别位于0,1,3,7,15,21上,因此要去掉这些位置的数据,即可得到原来的16位数据。因此采用分离器输出的时候,位宽仍然是22位,但是位0,位1,位3,位5,位7,位15,位21,是无的。
在这里插入图片描述
5,进行测评
保存电路图,复制粘贴代码到EduCoder平台进行测试,即可通关。
在这里插入图片描述

发布了4 篇原创文章 · 获赞 5 · 访问量 145

猜你喜欢

转载自blog.csdn.net/weixin_44750465/article/details/105469953