华中科技大学 计算机组成与原理 实验记录 【数据表示实验】

本实验是华科大三的核心课计算机组成原理的配套实验,设计非常良心,而且理论课和实验课都在mooc上有全套视频,地址为计算机组成原理_中国大学MOOC实验所用的软件资源/测试电路也全部开放,地址为:计算机硬件系统设计_中国大学MOOC

数据表示实验

国标转区位码

  • 要求用加法器实现
  • 回顾:区位码+2020H=国标码
  • 那么根据补码原理,国标-2020H = 国标+FFFFH-2020H+1 = 国标+DFDFH+1 = 国标+DFE0H

华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第1张图片
如图,模运算意义下加法和减法是等价的

海明编码

  • 输入16位数据,输出22位加冗余位后的编码,其中5位校验,1位做奇偶总校验
  • 根据分组的原理:
1 = 1
2 = 2
3 = 1 + 2
4 = 4
5 = 1 + 4
6 = 2 + 4
7 = 1 + 2 + 4
8 = 8
9 = 1 + 8
10 = 2 + 8
11 = 1 + 2 + 8
12 = 4 + 8
13 = 1 + 4 + 8
14 = 2 + 4 + 8
15 = 1 + 2 + 4 + 8
16 = 16
17 = 1 + 16
18 = 2 + 16
19 = 1 + 2 + 16
20 = 4 + 16
21 = 1 + 4 + 16
22 = 2 + 4 + 16
位号 校验位 输入位
1 P1 1,3,5,7,9,11, // 13,15,17,19,21
2 P2 2,3,6,7,10,11, // 14,15,18,19
4 P3 4,5,6,7, // 12,13,14,15,20,21
8 P4 8,9,10,11, // 12,13,14,15
16 P5 16,17,18,19,20,21

由于这里输入位与实验中数据位有区别,我们连线时需要进行一个映射。然后因为Logisim只允许12位输入,所以可以建造两个辅助电路自动生成引脚;)
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第2张图片

P6是总的偶校验位,值为其他所有位的异或:
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第3张图片

海明解码

解码电路就是再去算一遍这些位置的校验码,看有没有出错。如果没有错的话,理论校验位的值和实际校验位的值应该相等,异或为0.

有一位错的话偶校验错,有两位错的话偶校验是对的。

首先我们需要一个辅助电路,根据出错位的值来纠正相应的数据位。
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第4张图片

解1和解2就是在判断哪一位出了错,相当于一个译码器
然后我们有了纠错字 和收到的数据按位异或,就能纠正数据。
按位异或如何实现:采用一个16位的异或门。

这里有一个很容易犯的错误,就是纠正电路的纠正的位数只可能是1位,analyze的时候得保证这位出错,而其他位没错。
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第5张图片

CRC 编码

  • 回顾一下:模2除法具有很多很好的特点,比如余数循环,比如结合律。这里要求生成并行的编码,也就是说要先算出(二进制)1,10,100,1000,10000,1000000这些数G(x)的余数,再把他们拼接起来得到最终校验位。

先来考虑一下需要多少位的生成多项式。输入16位,即 16 + r + 1 ≤ 2 r 16+r+1 \le 2^r 16+r+12r,至少要5位。实验刚好就是让我们用5位CRC校验,多一位做总的偶校验。

P6的偶校验很简单,和海明校验一样先连好就行。
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第6张图片

然后我们考虑选用哪个生成多项式。
-w479
这个刚好是5阶的所以就它了。写成二进制就是100101

按照常规,我们应该将数据位左移5位再模2除100101,但是这样串行的太慢了,所以要先算出从 2 6 2^6 26 2 21 2^{21} 221这些数除100101的余数,再加起来生成最后的余数。
计算结果就是,

1  00101
2  01010
3  01101
4  11010
5  10001
6  00111
7  01110
8  11100
9  11101
10 11111
11 11011
12 10011
13 00011
14 00110
15 01100

有了每一位对应的余数,只需在Data相应位为1的时候把相应余数加到(模2意义下也就是异或)最后的校验位P中就好了。如果不为1,就加上0。需要16个二路选择器或者16个比特拓展。
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第7张图片

CRC解码

为了检查数据是否出错,需要用CRC编码除以生成多项式。余数为0则正确,否则可以根据余数确定具体哪位出错。这里要求并行,所以不能原始上商做除法。还是采用类似的思路,用Data部分计算出余数的理论值,和校验码异或得到实际的余数。这部分的原理是模2除法满足结合律,所以(data+p)%G(x) = data%G(x) + p%G(x)。而p才5位,都没有G(x)长,所以p%G(x)=p。

有了余数之后我们就可以确定哪一位是错的。这个译码比较复杂,就是对比余数和该位的余数是否相等。如果相等的话这位就是错的。错了这位的数据就应该取反,可以异或1来实现。
华中科技大学 计算机组成与原理 实验记录 【数据表示实验】_第8张图片

OK这样就做好了。

你可能感兴趣的:(华中科技大学 计算机组成与原理 实验记录 【数据表示实验】)