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

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

实验目的

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

实验环境

(以下文字仅供google搜索)

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

本章所有实验均基于实验包提供的data.circ 文件完成

data.circ原始文件

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

data.circ完成文件

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

   

实验内容_汉字编码

_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发生延迟时,电路的期望输出就会发现变化

 

posted @ 2018-05-23 17:49 migeater 阅读(...) 评论(...) 编辑 收藏