当前位置:文档之家› 计算机组成原理实验报告

计算机组成原理实验报告

2)海明码的每一位码Hi(包括数据位和校验位本身)由多个校验位校验,其关系是被校验的每一位位号等于校验它的各校验位的位号之和。
3)在增大合法码的码距时,所有码的码距应尽量均匀增大,以保证对所有码的检错能力平衡提高。
下面具体看一下对一个字节进行海明编码的实现过程。
只实现一位纠错两位检错,由前面的表可以看出,8位数据位需要5位校验位,可表示为H13H12…H2H1。
0
0
1
1
0
0
1
1
0
S1
0
0
1
0
1
0
1
0
1
0
1
0
1
由此可得校验后的数据位表达式为:
D1=D1 (S1•S2• • •S5)
D2=D2 (S1• •S3• •S5)
D3=D3 ( •S2•S3• •S5)
D4=D4 (S1•S2•S3• •S5)
D5=D5 (S1• • •S4•S5)
D6=D6 ( •S2• •S4•S5)
答:我们认为16位数据位的编码原理与8位数据位的hamming编码原理基本相同。即:,在k个数据位之外加上r个校验位,从而形成一个k+r位的新的码字,使新的码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
《计算机组成原理》
实验报告
实验室名称:S402
任课教师:邹洋
小组成员:王娜任芬
学号:2010212121 2010212119
实验一_Hamming码2
实验二_乘法器7
实验三_时序部件16
实验四_CPU__算术逻辑单元实验24
实验五_CPU__指令译码器实验32
实验六_CPU_微程序控制器实验143
表1.2海明码位号与校验位位号的关系
海明码位号
数据位
校验位
参与校验的
校验位位号
海明码位号
=校验位位号之和
1
1
1
1=1
2
2
2
2=2
3
1
1、2
3=1+2
4
3
4
4=4
5
2
1、4
5=1+4
6
3
2、4
6=2+4
7
4
1、2、4
7=1+2+4
8
4
8
8=8
9
5
1、8
9=1+8
10
6
2、8
10=2+8
11
7
1、2、8
综上2)和4)所述,一位错对应的S5~S1的值如表1.3所示:
表1.3 Hamming码出错情况对照表
检验位
P5
D8
D7
D6
D5
P4
D4
D3
D2
P3
D1
P2
P1
位号
13
12
11
10
9
8
7
6
5
4
3
2
1
S5
1
1
1
1
1
1
1
1
1
1
1
1
1
S4
0
1
1
1
1
1
0
0
0
0
0
0
0
S3
0
1
0
0
0
0
1
1
1
1
0
0
0
S2
0
0
1
1
}
for(j=0;j<16;j++)
for(i=0;i<128;i++)
{
for(z=0;z<7;z++)
{
if(s[0][j][z]!=d[i][z])
break;
}
if(z==7)
{
for(m=0;m<7;m++)
d[i][m]=0;
break;
}
}
m=1;
re:for(i=0;i<128;i++)
int s[8][16][7],n=0;
//标准阵列
//构造第一行的码子
for(b[0]=0;b[0]<2;b[0]++)
for(b[1]=0;b[1]<2;b[1]++)
for(b[2]=0;b[2]<2;b[2]++)
for(b[3]=0;b[3]<2;b[3]++)
{
for(j=0;j<7;j++)
1.输入的8位操作数对应开关SD15(高位)~SD8(低位),编码后的hamming码在灯A12~A0上体现。
2.开关SA0是控制位,(拨1进行校验)待校验的13位数据对应SD7~SD0与SA5~SA1。
3.比较的结果在灯R4~R0上体现。(分别对应S5~S1)
如对8位数据10101100进行hamming编码和校验。
{
n=0;
for(j=0;j<7;j++)
n+=d[i][j];
if(n==p)
{
for(z=0;z<7;z++)
s[m][0][z]=d[i][z];
m++;
}
if(m==8)
break;
}
if(m!=8)
{
p++;
goto re;
2r-1 ≥ k + r (2.8)
按上述不等式,可计算出数据位k与校验位r的对应关系K值最小的r值
3-4 4
5-10 5
11-25 6
26-56 7
57-119 8
只实现一位纠错两位检错,由前面的表可以看出,8位数据位需要5位校验位,而16位数据位需要6位校验位
2、有能力的同学可以试着自己编写hamming编码和校验的源代码。在老师的帮助下,编译成功,将.sof文件下载到FPGA进行正确性验证。
P5=D1 D2 D3 D4 D5 D6 D7 D8 P1 P2 P3 P4
在这种安排中,每一位数据位,都至少出现在三个Pi值的形成关系中。当任一位数据码发生变化时,必将引起三个或四个Pi跟着变化,即合法海明码的码距都为4。
如按如下关系对所得到的海明码实现偶校验,即:
S1=P1 D1 D2 D4 D5 D7
D7=D7 (S1•S2• •S4•S5)
D8=D8 ( • •S3•S4•S5)
1.3
1、先连接JTAG线和USB线,然后接实验箱电源线,最后才可以打开电源。(切记:不能带电插拔Jtag口,否则会损坏实验设备)
2、安装ByteBlaster:Quartustools>programmerHardwareSetup(在打开programmer窗口的左上角或从Edit菜单—> HardwareSetup亦可打开)选Hardware Settings点击Add HardwareHardware typeAltera ByteBlasterok即可(若已安装,此步可省);Mode选Jtag。
假设为k个数据位设置r个校验位,则校验位能表示2r个状态,可用其中的一个状态指出"没有发生错误",用其余的2 r -1个状态指出有错误发生在某一位,包括k个数据位和r个校验位,因此校验位的位数应满足如下关系:
2r ≥ k + r + 1 (2.7)
如要能检出与自动校正一位错,并能同时发现两位错,此时校验位的位数r和数据位的位数k应满足下述关系:
五个校验位P5~P1对应的海明码位号分别为H13、H8、H4、H2和H1。P5只能放在H13位上,因为H13已经是海明码的最高位了,其他四位满足Pi的位号等于2i-1的关系,其余位为数据位Di,则有如下排列关系:
P5D8D7D6D5P4D4D3D2P3D1P2P1
按前面讲的,每个海明码的位号要等于参与检验的几个校验位的位号之和的关系,可给出如表1.2所示结果:
按上述不等式,可计算出数据位k与校验位r的对应关系,如表1.1所示:
表1.1数据位k与校验位r的对应关系
k值
最小的r值
1~3
4
4~10
5
11~25
6
26~56
7
57~119
8
若海明码的最高位号为m,最低位号为1,即HmHm-1…H2H1,则此海明码的编码规律通常是
1)校验位与数据位之和为m,每个校验位Pi在海明码中被分在位号为2i-1的位置上,其余各位为数据位,并按从低向高逐位依次排列的关系分配各数据位。
辅助算法一(C++):
先构造一个标准阵列,然后用所收到的码字在标准阵列里找到对应的码字,达到纠正的目的。
#include "iostr,j,z=0,g[4][7]={1,0,0,0,1,0,1,0,1,0,0,1,1,1,0,0,1,0,1,1,0,0,0,0,0,0,1,1},sum=0,b[4],r[7];
2)当S5~S1中仅有一位不为0,表明某一位校验位出错,或三位海明码(包括数据位与校验位)同时出错。由于后一种出错的可能性要比前一种小得多,认为就是一位出错,出错位是该Si对应的Pi位。
3)当S4~S1有不为0且S5=0时,表明两位海明码同时出错,此时只能发现这种错误,而无法确定是哪两位错。
4)当S5~S1中有3位或4位不为0,表明是一位数据位出错,或多个海明码同时出错。由于后一种出错的可能性要比前一种小得多,认为就是一位数据位出错,出错位位号由S4~S1的编码值指明,因此此时不仅能发现一位错,而且能改正一位错,即将出错的数据位变为其反码。
相关主题