基于Python的计算机组成原理可视化教学研究

2022-07-19 09:13王泽梁汪丽华
黄山学院学报 2022年3期
关键词:校验码汉明校验

王泽梁,汪丽华

(黄山学院 信息工程学院,安徽 黄山 245041)

1 引 言

计算机组成原理是计算机专业的一门专业基础核心课程,在专业硬件课程体系中承担着承上启下的作用。通过该课程的学习,不仅能够使学生掌握计算机硬件系统各组成部件的工作原理和部件之间的联系,还可以使学生理解计算机软件的底层基础和运行机制,达到软硬件知识融汇贯通的效果,从而有利于学生构建学科知识的整体框架。

现有计算机组成原理课程教学模式存在一定的局限性,通过对教学反馈的总结,可以发现现有教学表现形式比较单调枯燥。受芯片集成度不断提高的影响,课程中讲授的原理已很难在现有的计算机中找到具体一对一的实物,而实验模型机的方式又与实际脱节,导致课程教学往往流于枯燥理论的讲解,甚至演化为公式的推导,曲高和寡直接形成了教师不愿看到的学生缺乏学习兴趣的现状,这种情况是与新工科建设的要求背道而驰的。专业知识的学习最终是为了提高学生解决工程实际问题的能力[1],因此,在硬件课程教学中,应将理论问题与工程实践结合,设计工程化的实例,同时利用可视化的手段展现,以提高学生的学习兴趣,最终达到学懂、弄通、会用的效果。

汉明码具有自动纠错能力,已被广泛应用于存储器校验[2]、音频水印[3]、文本信息隐藏[4]、医学图像共享[5]等领域中。在教材[6]第四章介绍存储器的校验原理中,详细介绍了汉明校验码的查错纠错工作原理,并附有例题说明汉明校验码的计算方法。文献[7]中基于硬件描述语言VHDL、QuartusII 仿真平台和FPGA 芯片实现汉明码的编解码。文献[8]同样基于VHDL 和FPGA 芯片实现汉明码的编解码,不同的是采用ModelSim 仿真平台。文献[9]基于MATLAB 和快速分组方法实现汉明码仿真。然而已有方法存在某些方面的不足:第一,实现方法采用的硬件描述语言需要学生具备较扎实硬件知识,对于计算机专业学生来说,各种高级编程语言的学习已应接不暇;第二,仿真平台软件或非开源,或软件功能庞大,学生首先需要花费大量精力学习仿真平台的使用。因此,可采用简单易学的高级编程语言(如C、Python 等)实现汉明码校验展示以减少学生知识迁移与吸收的时间,同时使枯燥原理的工程实现达到可视化的直观效果。鉴于Python 具有简单易学、跨平台和功能强大等各种优势,得以迅速的普及,目前很多高校在非计算机专业也已使用Python 讲授程序设计课程[10,11]。同时由于Python 具有丰富的标准库和第三方模块资源,因此可以选用其作为可视化实现的工具。

2 汉明码原理

信息进行传输的过程中可能会出现错误,且出现一位错误的概率最大[6]。在信息接收端针对已收到的数据判断是否与发送端一致,最基本检验方法可通过奇偶校验法。以偶校验为例,在待传输信息中加入一位偶校验位,以确保发送端数据中包含偶数个1。在信息的接收端如果检测到奇数个1,则说明传输的数据发生了奇数位变化,但却无法确定出错的位置信息,因而无法纠错。汉明码就是在奇偶校验码的基础上,运用编码纠错理论,在信息编码中加入若干校验位,以增加编码最小距离,从而实现能纠正一位错误的编码。其本质为分组奇偶校验码。增加t 位的校验位需满足关系式2t≥n + t +1,其中n 为待传输的二进制信息位数。以传输16位(n=16)的汉字内码为例,则至少需要的汉明校验码的位数t应为5,即共分成5组进行奇偶校验,且发送端经过汉明编码后的总数据位数为21。其校验码和各分组配置规则如下:

1.校验码C1、C2、C3、C4、C5依次位于汉明码的第1、2、4、8、16位(从左往右),即2的指数次方位置上,待传输二进制信息按照高位在左、低位在右原则依次填充在剩余的汉明码位置上;

2.组1由校验码C1开始,依次选取1位、间隔1位,即汉明码的第1、3、5、7、9、11、13、15、17、19、21位;

3.组2 由校验码C2开始,依次选取2 位、间隔2位,即汉明码的第2、3、6、7、10、11、14、15、18、19位;

4.组3 由校验码C3开始,依次选取4 位、间隔4位,即汉明码的第4、5、6、7、12、13、14、15、20、21位;

5.组4 由校验码C4开始,依次选取8 位、间隔8位,即汉明码的第8、9、10、11、14、15、18、19位;

6.组5 由校验码C5开始,依次选取8 位、间隔8位,即汉明码的第16、17、18、19、20、21位。

以偶校验为例,各校验码的设置需保证每组数据中均含有偶数个1。在接收端再次对每组进行偶校验,并形成新的检测位为P1、P2、P3、P4、P5,记录由P5P4P3P2P1组成的二进制数据,例如(10011)2,则表示第5、2、1 组同时发生错误,由上述配置规则可知为第19位出错,正好为该二进制数据所对应的十进制数据,故称为校验和。因此汉明码具有一位纠错能力。但是上述编码规则的汉明码不能发现两位错误,例如第3、5位同时出错,则校验和为6,此时汉明码会得出第6位出错的结论,与实际情况不符。

3 教学实例设计与实现

以培养学生的工程应用能力为目标,教师对于知识点的教学要求不应仅局限于会进行汉明码的数学计算,还需扩展介绍知识点的真实应用场景。因此设计汉字传输与校验的教学实例,通过Python程序展示发送端和接收端的汉字信息,以及汉明校验码的一位纠错能力。首先,从键盘输入一个汉字到字符串变量,完成GB2312 机内码的转换;其次,对机内码进行汉明编码并传输;再次,对发送的汉明码分别加入随机一位、两位干扰,并对接收到的信息仅取出机内码位信息,转为点阵输出。同时,对接收到的信息进行汉明解码,将纠错后的机内码转为点阵输出,并与未执行校验和纠错的输出对比,以展示汉明码的一位纠错能力。汉明码教学案例项目的整体流程如图1所示。

图1 汉明码教学案例流程图

3.1 汉字编码转换

汉字的编码包括机内码、区位码和Unicode 编码等方式[12]。常用汉字采用分区管理,进而编码为对应的区位码,区位码需转为对应的机内码进行存储。将机内码的两个字节数据分别减去十六进制数A0,可获得汉字的区位码。通过区位码和点阵字库信息可获得汉字的字形码以输出显示。Unicode编码为每种语言中的每个字符设定了统一且唯一的二进制编码,以实现跨平台、跨语言的信息处理与交换。

在Python 中,通过调用系统的encode 函数可实现GB2312 机内码的获取,因该信息为bytes 类型数据,须通过调用字节类型数据到十六进制数据的转换,而后以Unicode字符进行存储。

3.2 汉明码编码功能实现

在编码函数中,主要实现5位校验位的产生,再将其与机内码按照汉明码编码规则进行组合形成发送端信息编码。以进行偶校验为例,校验位的产生按照每组配置偶数个1 的规则,又因校验位为每组所独有,因此校验位可通过对该组其余的信息位进行异或运算获得。其实现代码如下:

其 中,变 量code_1、code_2、code_4、code_8、code_16分别对应校验码C1、C2、C3、C4、C5。

3.3 汉明码解码与纠错功能实现

在汉明码解码函数中,分别对组1 到组5 进行偶校验以获得新的检测位P1、P2、P3、P4、P5。由其组成的校验和判断出错的信息位置,若校验和为0,则表示传输未出错。若校验和不为0,根据校验和所对应的位置信息,自动进行一位纠错。纠错代码的实现如下:

其中,变量code_checksum表示校验和。

3.4 汉明码纠错能力测试

在汉明码纠错能力测试模块,分别针对发送端汉明码数据进行无噪声、随机加入一位噪声和两位噪声的3 种情况,检测有无汉明解码与纠错对输出的影响。汉字点阵输出的实现过程如下:

首先,由接收端汉明码解析出机内码;

其次,由机内码与区位码的关系计算出汉字的区位码;

最后,通过调用汉字库文件HZK16,使用16*16点阵显示机内码对应的中文汉字。

以输入中文汉字“天”为例,在上述3 种情况下其对应输出的汉字如图2 所示,其中第一行展示未采用汉明纠错,直接提取机内码得到的输出,第二行展示经过汉明码纠错模块后得到的输出。图2(a)未采用汉明纠错为“天”,校验和为0,校验结果仍为“天”,表明无噪声状态下汉明校验有效;图2(b)中无汉明纠错输出为“添”,由校验和21 可知信息传输发生错误,再由汉明校验纠错恢复原始汉字“天”,表明汉明校验具有一位检错纠错能力;图2(c)中未经汉明纠错输出为“田”,校验和为1,所以汉明纠错模块仅纠正编码的第一位。因第一位为校验位而非信息位,故校正与否并不影响输出结果,因此仍输出汉字“田”,表明汉明码未能实现两位出错的纠错。因此若希望汉明码能够纠正两位错误,需对原始汉明校验码进行改进,例如再增添一位检测位等。

图2 汉明码纠错能力测试

4 结 语

计算机组成原理课程作为计算机类专业的核心课程,其教学效果直接影响学生对硬件知识的掌握。本文针对现有教学与工程实践脱节的问题,以汉明码教学为例,设计并采用Python 语言实现了汉明码检错纠错的案例,达到了可视化的教学效果。通过实际教学检验,学生普遍反馈该方式比传统教学方式更加直观,而且体验到了学有所用的教学效果。未来应进一步设计更多的教学案例,促进课程教学,主动适应新工科建设的需要。

猜你喜欢
校验码汉明校验
Basic UDI校验码算法
基于加密设备特征信息的配置数据自动校验方法
炉温均匀性校验在铸锻企业的应用
结合抓包实例分析校验和的计算
分析校验和的错误原因
基于Excel实现书号校验码的验证
媳妇管钱
身份证号码中的数学
汉明距离矩阵的研究
浅谈微电子故障校验