实验一_Hamming码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机要求
1、预习:计算机组织与结构(计算机组成原理)此门实验课课
前最好是对相应章节的原理进行预习,不然的话,上课可能
搞不懂原理而变得很机械的做实验。
同学们,学习要自觉,请遵照执行。
2、课堂上认真完成,不准相互抄袭。
3、上机不能打游戏等与实验课无关的事情。
4、每次课后写实验日志
5、最后一次课后写一个大的报告
6、爱惜实验设备,如损坏则按有关规定处理并照价赔偿。
7、讲卫生,不准在实验室吃东西,下课时请带走座位附近的垃
圾。
8、下载芯片过程中的注意事项:
A、不要带电插拔下载电缆
下载电缆连接的是计算机的并行口,因此插拔下载电缆时要关掉电源,不要带电操作,否则会烧坏芯片。
B、下载芯片时一般不要加密
下载芯片之前要注意一些细节问题,这样就能在以后的调试中省去不少麻烦。
需要注意的是不要选择Hardware Setup中的Security Bit,即不要给芯片加密。
如果加了密,以后将不能修改。
计算机专业实验中心
2011.9
1 编码实验:Hamming码 (2)
1.1、实验目的 (2)
1.2、实验原理 (2)
1.3、实验步骤 (5)
1.4、观察实验现象并记录相应数据 (5)
1.5、思考题 (6)
1 编码实验:Hamming码
1.1、实验目的
1、对容错技术有初步了解,理解掌握海明码的原理
2、掌握海明码的编码以及校验方法
1.2、实验原理
海明码是由Richard Hamming于1950年提出的,目前是被广泛采用的很有效的校验编码。
它的特点是只要增加少数几个校验位,就能检测出多位出错,并能自动纠错。
Hamming码的实现原理是在数据中加入几个校验位,将数据代码的码距比较均匀的拉大,并把数据的每一个二进制位分配在几个奇偶校验组中。
当某一位出错后,就会引起有关的几个校验位的值发生变化。
这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。
假设校验位的个数为r,则它能表示2r个信息,用其中的一个信息指出“没有错误”,其余的2r-1个信息指出错误发生在哪一位。
然而错误也可能发生在校验位,因此只有k=2r-1-r个信息能用于纠正被传送数据的位数,也就是说要满足关系:
2r≥k+r+1
若要能检测与自动校正一位错,并能发现两位错,此时校验位的位数r和数据位的位数k应满足下述关系:2r-1≥k+r
按上述不等式,可计算出数据位k与校验位r的对应关系,如表1.1所示:
m m-121
通常是
1)校验位与数据位之和为m,每个校验位P i在海明码中被分在位号为2i-1的位置上,其余各位为数据位,并按从低向高逐位依次排列的关系分配各数据位。
2)海明码的每一位码H i(包括数据位和校验位本身)由多个校验位校验,其关系是被校验的每一位位号等于校验它的各校验位的位号之和。
3)在增大合法码的码距时,所有码的码距应尽量均匀增大,以保证对所有码的检错能力平衡提高。
下面具体看一下对一个字节进行海明编码的实现过程。
只实现一位纠错两位检错,由前面的表可以看出,8位数据位需要5位校验位,可表示为H13H12…H2H1。
五个校验位P5~P1对应的海明码位号分别为H13、H8、H4、H2和H1。
P5只能放在H13位上,因为H13已经是海明码的最高位了,其他四位满足P i的位号等于2i-1的关系,其余位为数据位D i,则有如下排列关系:
P5D8D7D6D5P4D4D3D2P3D1P2P1
按前面讲的,每个海明码的位号要等于参与检验的几个校验位的位号之和的关系,可给出如表1.2所示结果:
表1.2 海明码位号与校验位位号的关系
由上述关系可以得出四个校验位各自与哪些数据位有关,进而得出关系表达式:
P1=D1⊕D2⊕D4⊕D5⊕D7
P2=D1⊕D3⊕D4⊕D6⊕D7
P3=D2⊕D3⊕D4⊕D8
P4=D5⊕D6⊕D7⊕D8
各数据位形成P i(i=1到4)值时,不同数据位出现在P i项中的次数是不一样的,使不同数据码的海明码的码距不等,并且有两位出错与一位出错分不清的问题。
为此,还要补充一个P5总校验位,使
P5=D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P1⊕P2⊕P3⊕P4
在这种安排中,每一位数据位,都至少出现在三个P i值的形成关系中。
当任一位数据码发生变化时,必将引起三个或四个P i跟着变化,即合法海明码的码距都为4。
如按如下关系对所得到的海明码实现偶校验,即:
S1=P1⊕D1⊕D2⊕D4⊕D5⊕D7
S2=P2⊕D1⊕D3⊕D4⊕D6⊕D7
S3=P3⊕D2⊕D3⊕D4⊕D8
S4=P4⊕D5⊕D6⊕D7⊕D8
S5=P5⊕D1⊕D2⊕D3⊕D4⊕D5⊕D6⊕D7⊕D8⊕P1⊕P2⊕P3⊕P4
则得出的结果值S5~S1能反映13位海明码的出错情况。
任何偶数个数出错,S5一定为0。
1)当S5~S1为00000时,表明无错。
2)当S5~S1中仅有一位不为0,表明某一位校验位出错,或三位海明码(包括数据位与校验位)同时出错。
由于后一种出错的可能性要比前一种小得多,认为就是一位出错,出错位是该S i对应的P i位。
3)当S4~S1有不为0且S5=0时,表明两位海明码同时出错,此时只能发现这种错误,而无法确定是哪两位错。
4)当S5~S1中有3位或4位不为0,表明是一位数据位出错,或多个海明码同时出错。
由于后一种出错的可能性要比前一种小得多,认为就是一位数据位出错,出错位位号由S4~S1的编码值指明,因此此时不仅能发现一位错,而且能改正一位错,即将出错的数据位变为其反码。
综上2)和4)所述,一位错对应的S5~S1的值如表1.3所示:
由此可得校验后的数据位表达式为:
D1=D1⊕(S1•S2•3S•4S•S5)
D2=D2⊕(S1•2S•S3•4S•S5)
D3=D3⊕(1S•S2•S3•4S•S5)
D4=D4⊕(S1•S2•S3•4S•S5)
D5=D5⊕(S1•2S•3S•S4•S5)
D6=D6⊕(1S•S2•3S•S4•S5)
D7=D7⊕(S1•S2•3S•S4•S5)
D8=D8⊕(1S•2S•S3•S4•S5)
1.3、实验步骤
1、先连接JTAG线和USB线,然后接实验箱电源线,最后才可以打开电源。
(切记:不能带电插拔Jtag口,否则会损坏实验设备)
2、安装ByteBlaster:Quartus→tools→>programmer→HardwareSetup(在打开programmer 窗口的左上角或从Edit菜单—> HardwareSetup亦可打开)→选Hardware Settings→点击Add Hardware→ Hardware type →Altera ByteBlaster→ok即可(若已安装,此步可省);Mode选Jtag。
3、打开Quartus→tools→programmer→AddFile,将hamming.sof(在C盘的相应目录下)下载到FPGA中。
注意进行programmer时,应在program/configure下的方框中打勾,然后下载。
4、在实验台上通过模式开关选择FPGA独立调试模式010。
1.4、观察实验现象并记录相应数据
输入输出规则对应如下:
1.输入的8位操作数对应开关SD15~SD8,编码后的hamming码在灯A0~A12上体现。
2.开关SA0是控制位,待校验的13位数据对应SD7~SD0与S5~S1。
3.比较的结果在灯R4~R0上体现。
如对8位数据10101100进行hamming编码和校验。
1、先手工计算校验位P5~P1=________,编码后的hamming码为_______________。
2、拨动开关SD15~SD8输入10101100,观察灯A0~A12=_____________,看是否与自己手工计算的hamming码相符。
3、输入待校验的13位数据,假设输入1111001101011。
拨动开关SA0为1开始校验,拨动SD7~SD0设置数据位11101100(D7~D0),SA5~SA1设置校验位10111(P5~P1)。
观察灯R4~R0=_______,也就是校验结果的值。
4、比较编码后的hamming码和校验的hamming码,发现第____位数据错误,手工计算S=_________,和3中观察到的R4~R0是否相符。
5、可以输入其他位错误的校验数据观察结果值S是否正确。
6、1~5做完后,重新输入新的8位数据做实验,并填写表1.1.4。
注意:(以后每个实验都适用)
1、如果断电的话,需要重新对FPGA进行配置。
2、实验完毕后,将开关全部拨到’0’位。
3、在带电情况下不要插拔JTAG和串行线,容易烧坏线路。
4、开关SD15~SD0和SA5~SA0分别对应第一排的显示灯,对应关系:SD15~SD0对应
灯D15~D0、SA5~SA0对应灯RS5~RS0。
也就是说输入数据时,开关输入的内容
会在相应的灯上显示出来。
表1.1.4
1.5、思考题
1、根据8位数据位的hamming编码原理,写出16位数据位的编码原理。
2、思考hamming码中校验位出错时的情况,最高位的校验位出错时呢?
3、有能力的同学可以试着自己编写hamming编码和校验的源代码。
在老师的帮助下,编译成功,将.sof文件下载到FPGA进行正确性验证。