華中科技大學 計算機組成原理 上機實驗1 2018
實驗目的
- GB2312 區位碼
- 字模碼
- 奇偶校驗校
- 驗位
- 檢錯
- 海明碼編解碼電路基本原理
- 流水數據傳輸機制,流水暫停原理
實驗環境
(以下文字僅供google搜索)
Logisim平臺,該平臺是一款數字電路模擬的教育軟件,用戶都可以通過它來學習如何創建邏輯電路,方便簡單。它是一款基於Java 的應用程序,可運行在任何支持JAVA 環境的平臺,方便學生來學習設計和模仿數字邏輯電路。Logisim 中的主要組成部分之一就在於設計並以圖示來顯示CPU。當然Logisim 中還有其他多種組合分析模型來對你進行幫助,如轉換電路,表達式,布爾型和真值表等等。同時還可以重新利用小規模的電路來作為大型電路的一部分
本章所有實驗均基於實驗包提供的data.circ 文件完成
data.circ原始文件
https://drive.google.com/open?id=1rvhs-o0V76AwB5HZwmVZ2ycMIEs6zdS9
data.circ完成文件
https://drive.google.com/file/d/1jbXW2mIa82wQ-gWKbYNfjss9IeCezezG/view?usp=sharing
實驗內容_漢字編碼
_GB2312 區位號
在ROM存儲器中存入25個成句的漢字,並用時鐘仿真依次顯示
GB2312字符集構成一個94行,94列的二維表,列號稱為位號,行號稱為區號;每一個漢字或符號在碼表中的位置用它所在的區號和尾號來表示
計算機內部 每個漢字的區號和位號分別用一個Byte來表示:例如"學"字的區號49,位號07,區位碼即4907
0011 0001 0000 0111
區位碼因為與通信使用的控制碼(00H~1FH)沖突,所以ISO2022規定每個漢字區號位號必須加上20H,"學"字的國際交換碼就是
0101 0001 0010 0111:5127H
^註意
因為區號和尾號範圍是1~94所以用7bit表示
設計國際碼轉區位碼電路
輸入:GB2312 16位國際碼
輸出 區號行號
子電路如下
上述子電路由減法器和分離器組成
具體由實驗文件data.circ可推知
漢字GB2312編碼實驗
5127H 表示一個漢字…
這個項目就是要找一段漢字對應的
比如下面這段
ced2 d2aa c1a2 c2ed b7a2 d2bb c6aa b2a9 |
實驗內容_偶校驗
_奇偶校驗
…
設計16位數據編碼的偶校驗編碼電路
編碼就是 16位數據的最高位置再加上一位,這位數是所有數據位的異或值(如果是奇校驗還要取反)
需要特別註意異或門,中的多輸入行為標簽,默認的不是異或門
電路設計
我沒有找到按位異或的方法,下面這個 子電路 可以復制作為按位異或器
編碼電路
設計17位偶校驗編碼的檢錯電路
- 如果沒有錯誤發生
- 討論剛好有一位錯的情況,
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,…位確定
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個檢驗位的值 異或 它之前檢驗的值
根據奇偶校驗的性質,G為1,表示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
海明校驗傳輸測試
測試編解碼電路的正確性(最多兩位錯誤)…
_險象
華中科技大學 計算機組成原理 上機實驗1 2018