华中科技大学 计算机组成原理 上机实验1 2018

notice: 本文已被archive,只具备历史价值,上机价值 学习

实验目的 测试

  • GB2312 区位码
  • 字模码
  • 奇偶校验校
    • 验位
    • 检错
  • 海明码编解码电路基本原理
  • 流水数据传输机制,流水暂停原理

实验环境 google

(如下文字仅供google搜索)编码

Logisim平台,该平台是一款数字电路模拟的教育软件,用户均可以经过它来学习如何建立逻辑电路,方便简单。它是一款基于Java 的应用程序,可运行在任何支持JAVA 环境的平台,方便学生来学习设计和模仿数字逻辑电路。Logisim 中的主要组成部分之一就在于设计并以图示来显示CPU。固然Logisim 中还有其余多种组合分析模型来对你进行帮助,如转换电路,表达式,布尔型和真值表等等。同时还能够从新利用小规模的电路来做为大型电路的一部分 spa

本章全部实验均基于实验包提供的data.circ 文件完成 debug

data.circ原始文件 设计

https://drive.google.com/file/d/1rvhs-o0V76AwB5HZwmVZ2ycMIEs6zdS9/view?usp=sharing3d

data.circ完成文件 code

https://drive.google.com/file/d/1jbXW2mIa82wQ-gWKbYNfjss9IeCezezG/view?usp=sharingblog

   

实验内容_汉字编码

_GB2312 区位号

 在ROM存储器中存入25个成句的汉字,并用时钟仿真依次显示

GB2312字符集构成一个94,94列的二维表,列号称为位号,行号称为区号;每个汉字或符号在码表中的位置用它所在的区号和尾号来表示

   

计算机内部每一个汉字的区号和位号分别用一个Byte来表示:例如""字的区号49,位号07,区位码即4907H

0011 0001 0000 0111

区位码由于与通讯使用的控制码(00H~1FH)冲突,因此ISO2022规定每一个汉字区号位号必须加上20H,""字的国际交换码就是

0101 0001 0010 0111

5127H

   

^注意

由于区号和尾号范围是1~94因此用7bit存储

设计国际码转区位码电路

输入:GB2312 16位国际码

输出区号行号

子电路以下

上述子电路由减法器和分离器组成

具体由实验文件data.circ可推知

汉字GB2312编码实验

5127H 表示一个汉字…

这个项目就是要找一段汉字对应的gb2312

好比下面这段

ced2 d2aa c1a2 c2ed b7a2 d2bb c6aa b2a9

实验内容_偶校验

_奇偶校验

设计16位数据编码的偶校验编码电路

编码就是 16位数据的最高位置再加上一位,这位数是全部数据位的异或值(若是是奇校验还要取反)

   

须要特别注意异或门,中的多输入行为标签,默认的不是异或门

电路设计

我没有找到按位异或的方法,下面这个子电路能够复制做为按位异或器

   

编码电路

设计17位偶校验编码的检错电路

  • 若是没有错误发生

     

  • 讨论恰好有一位错的状况 ,

    若是原始数据有偶数个1,则偶校验位就是0,

    1表示有错

    若是~有奇数个1,偶校验位就是1,

    1表示有错

  • 有两位错则没法检测出

偶校验传输测试1

没错则显示正确

出现一位错可以检错

出现两位错则误报

测试2

出现一位错能纠正错误

出现两位错则不能纠正

实验内容_海明校验

_海明校验

给你一组k位的有效信息,b1 b2 b3 b4 b5 b6 b7 b8

海明校验在其中插入r个校验位来检测错误和纠错

表示整个校验码(校验位加上有效信息)

校验位位置

从最左边开始插入在第2^i,位数是相对有效信息+校验码的总体而言

P1 P2 b1 P3 b2 b3 b4 P4 b5 b6 b7 b8 b9 b11 P5

因此信息码与检验位的位数对应以下

1

2~4

5~11

12~26

2

3

4

5

检验位是多少

例子10011101

插入ab1c001d1101(字母表示校验码

a的肯定由第1,3,5,7,9,…位肯定

 若是是奇校验(要求被检验位中1的个数是奇数个),

若是是偶校验位

bcd的肯定由下表的规律:

检验码所在海明码的位置

检验的海明码的位数

1(P1)

(1) 3 5 7 9 11 13 15 17 19 21 23

2(P2)

(2),3 6,7 10,11 14,15 18,19 22,23

4(P3)

(4),5,6,7 12,13,14,15 20,21,22,23

若是检验位所在海明码的位置是

检验的海明码的位数

纠错方法

这里介绍的只能纠错一位:

引入指错码G1 G2 G3 G4 G5

 

也就是第i个指错码是i个检验位的值异或它以前检验的值

根据奇偶校验的性质,G1,表示G对应的检验位所负责的组中出现了问题

按照先前分组的规则,纠错能够根据2进制的特色来判断:好比第1,2,8(G1,G2,G4)位校验位=1,表示第1+2+8位的数据出错

^注意

校验位自己也可能出错

(若是只出现一位错的话)将只有1个指错码是1

设计16位数据编码的海明校验编码电路

输入16位原始数据

输出16位数据位,5位海明校验位,1位奇校验位(指的是全部数据位的异或再取反)

下面这个版本是广为流传的错误版本,引觉得戒

正确版本

校验位

被检验的数据位

P1

D1 D2 D4 D5 D7 D9 D11 D12 D14 D16

P2

D1 D3 D4 D6 D7 D10 D11 D13 D14

P3

D2 D3 D4 D8 D9 D10 D11 D15 D16

P4

D5 D6 D7 D8 D9 D10 D11

P5

D12 D13 D14 D15 D16

电路

这里的检验位P1 P2 P3 P4 P5采用偶检验;想改引脚改标签名字就能够了

这里必定要慎之又慎,而且影响下一步试验

设计22位海明校验码的解码电路

输入22位校验码

输出…

原理分析

与上面咱们谈到到海明校验码相比,这里多了一位奇校验码,因此可以纠两位错误,并改正一位错误:

  • 若是没有错误

    全部指错码都为0,奇校验码(指的是检验所有的)也为0

  • 若是有一位错误

    把指错码做为二进制的位数获得的二进制数就是出错的数;同时奇校验码为1(具体见上面的分析)

    把取反便可

  • 若是有两位错误

    首先奇校验码为0

    指错码的变化比较大..

电路设计

奇校验码

G1*G2*G3*G4*G5

  

1

0

电路设计错误

0

0

无错误

1

1

一位错

0

1

两位错

解码器的其余部分只要把编码的电路拿过来稍加改动就能够了

纠错部分比较麻烦

由上面分析咱们知道第位取反,不过电路设计比较麻烦,这也是耗时最久的

下面的电路包含了一些debug用的东西,

我测试过,正确,能纠错一个字,检查两位错

Decd

这是复用器decoder,默认下,你输入一个5位数 10001:

输出32,其中第(10001)2也就是第17位输出是1,其他均为0

海明校验传输测试

测试编解码电路的正确性(最多两位错误)

_险象

电路中出现的状况,X发生延迟时,电路的指望输出就会发现变化

相关文章
相关标签/搜索