所有资源都已打包
计算机组成原理.zip官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘
一、实验目的
1.理解汉字机内码、区位码的概念,并且能够利用相关的工具批量获取一段汉字文字的GB2312机内码,利用简单的电路实现汉字GB2312机内码与区位码的转换;
2.了解字形码显示的基本原理,能够在实验环境中实现汉字GB2312编码的字形码点阵显示;
3.掌握CRC校验码设计原理与纠错性能,能单独设计实现16位汉字GB2312机内码的CRC编码体系,并最终在实验环境中利用硬件电路实现对应的CRC编码和解码电路;
4.熟悉流水传输机制、流水暂停原理,能够对实验环境提供的五段流水编码传输电路进行简单的修改,实现数据编码在不可靠网络中的可靠传输。
二、实验内容
1.汉字编码实验
1.1设计国标转区位码电路;
1.2汉字GB2312机内码提取实验;
1.3在线自动测试。
2.CRC校验码设计实验
2.1设计CRC校验编码电路;
2.2设计CRC校验解码电路;
2.3 CRC校验传输测试。
3.编码流水传输设计实验
三、实验工具
Logisim仿真实验软件、浏览器
四、方案设计与实验步骤及结果
1.国标转区位码
区位码和GB2312编码之间的转换关系为:区位码+A0A0H=GB2312编码,所以区位码= GB2312-A0A0H。
图表 1 国标转区位码电路图
2.汉字GB2312机内码提取实验
汉字GB2312机内码可以通过编写程序获得,也可通过市面上已经有免费的转换程序获得,故借用浏览器搜索相关网页完成汉字GB2312机内码的获取,需要注意汉字要全角输入。实现过程如“汉字GB2312机内码提取图”所示。
图表 2 汉字GB2312机内码提取图
3.在线自动测试
将通过步骤2(汉字GB2312机内码提取)提取的机内码输入至汉字显示电路中的ROM存储器中,运行电路进行测试,直至LED点阵显示出正确的汉字显示结果,显示频率应调整为8Hz。实现效果如“汉字显示电路图”所示。
图表 3 汉字显示电路图
4.CRC编码电路
图表 4 CRC编码 |
4.1 CRC编码原理
输入的是16位数据,输出22位CRC编码数据,其中包括16位原始数据,6位校验位,其中一位为总的奇偶校验位(校验位的位数也可由k+r<=2^r-1得到)。因此此时的r=5(不包含奇偶校验位),选择的多项式G(x)位数则为r+1=6位,选择多项式G(x)=100101,原始16位数据Q(X),左移r=5位成21位Q’(x)(即后面补r个0),再与多项式100101做模2运算,得到的r位的余数,将该余数替换掉Q’(X)后面的r位,即将它后面的r个0替换成该余数。如图所示r5r4r3r2r1便是得到的余数,而r6是总的奇偶校验位,对所有数据进行异或便可得到该偶校验位r6。
由于要采用并行编码,又有以下公式
因此可先对该16位数据按位与该多项式进行模2除运算,再根据其实际数据进行异或操作。
先将16位原始数据所对应位置上取1时,与G(x)进行模2除运算得到各自的5位余数,再用选择器进行根据每一位数据选择输入的是余数还是0,最后将16个输入数据进行异或,即可得到5位最终的余数。
4.2 选择器的使用原理
图表 5 多路复用器
此时选择器的选择端连接的是D1,由于D1数据位宽为1,则选择器有2^1=2个输入端。当D1为0,则输入0端的数据即00;若D1为1时,则输入1端的数据即0a。将16位数据Di(i=1,2…16)作为选择端控制每位数据输入的是00还是该位与多项式进行模2运算后的余数,最后将最终输入的16个5位数据进行异或,即可得到最终的余数。
图表 6 CRC编码 |
4.3求16位与多项式的余数
如上图所示,Di(i=1,2…16)分别位数CRC编码的第7,8,9…22位上,因此其各自取1时与多项式模2除运算后的余数如下所示:
图表 7 多项式模2除运算所得余数 |
根据以上分析,编写出如下CRC编码电路图:
图表 8 CRC编码电路图
5.CRC解码电路
5.1 检码原理
接收方在接受到CRC编码后,将该编码与多项式进行模2除运算,得到余数r’,再根据q(假设q为总的奇偶检验位,将所有数据进行异或可得)的值进行判断数据是否产生错误,及产生错误后是一位错还是两位错。
有以下情况:
①r’ =0,q=0,表示数据无出错;
②r’ !=0,q=1,表示发生一位数据出错;
③r’ =0,q=1,表示该奇偶校验位出错,即发生一位出错;
④r’ !=0,q=0,表示发生两位数据出错。
在求余数时,可参照设计CRC编码时求余数的方法。因为CRC编码最后的r位少于多项式位数,因此可将最后r位看作一个整体,让它与多项式进行模2除运算后,得到的余数显然是它本身,因此让它与其它16位数据与G(x)模2除后所得的余数进行异或,即可得最后接收方检验的余数。
如下图所示,箭头所指的该5位数据位便是其最终得到的余数(异或门输出位宽为5)。
图表 9 部分CRC解码电路
5.2 纠错,得原始16位数据
若CRC编码发生出错,而它的出错位可能为第7,8,9…22位(不考虑第1到6位,因为我们要得的原始16位数据处于第7…22位上,因此只需要判断这些位是否出错,若出错对它们进行纠正,再输出即可)。因此将CRC编码按位取反后再与G(x)进行模2除运算,若余数为0,则说明该位出错,因此将余数取反为1,再与该位数据进行异或从而纠正该位的数据;若余数不为0,则说明该数据位并未发生传输错误,因此对该余数取反为0,再与该位的数据进行异或得到的数据仍为该数据位。(x异或0=x,x异或1=x反)
CRC编码按位取反(即按位异或1)后再与G(x)进行模2除运算,根据公式可化成
CRC编码%G(x)异或该数据位取1%G(x)。
5.3 CRC解码电路图
图表 10 CRC解码电路图
6.CRC传输测试
在CRC传输测试电路中测试CRC编解码电路的正确性,通过发送方与接收方的汉字显示对比可以很直观地观察CRC编码纠错的效果。通过设置干扰位数,可以测试电路在不同干扰下产生的效果。无错误、一位错和两位错时的结果分别如“CRC传输测试图1”、“CRC传输测试图2”和“CRC传输测试图3”所示。
图表 11 CRC传输测试图1
图表 12 CRC传输测试图2
图表 13 CRC传输测试图3
由结果可以看出,当出现一位错时,可以判断错误位数并纠正错误,出现两位错时,便只能检测出错误而不能纠错。
7.编码流水传输设计实验
7.1地址回滚
当传输过程出现两位错时,因为无法纠正错误,所以需要重新传送信息,可以使用选择器,当无两位错发生时,则按正常传输,当出现两位错时,则进行地址回滚。实现电路如“地址回滚功能实现电路图”所示。
图表 14 地址回滚功能实现电路图
7.2清空数据
由于每个阶段都保存有原来的数据,实现数据重传功能需要清空原来已有的数据,即当数据传输有效且发生两位错时需要进行数据清0操作。实现电路如“清空数据功能实现电路图”所示。
图表 15 清空数据功能实现电路图
7.3暂停显示
数据发生两位错时,该数据不应该传入显示阶段,显示阶段应该继续显示上个数据,即暂停显示阶段的动作。有两种情况应该暂停显示阶段的动作:1.发生两位错误时;2.数据无效时。任意一种情况发生,都要进行暂停显示阶段的动作。实现电路如“暂停显示功能实现电路图”所示。
图表 16 暂停显示功能实现电路图
图表 17 CRC编码流水传输电路图
通过一位错纠错动作,两位错地址回滚、清空数据和暂停显示的数据重传动作,即可以实现在两位错误以内的数据正常传输,实现效果如“CRC编码流水传输电路图“所示。