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 2018
偶校驗傳輸測試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個檢驗位的值異或它之前檢驗的值
根據奇偶校驗的性質,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 | 電路設計錯誤 | |
無錯誤 | ||
1 | 1 | 一位錯 |
1 | 兩位錯 |
解碼器的其他部分隻要把編碼的電路拿過來稍加改動就可以了
糾錯部分比較麻煩
由上面分析我們知道第位取反,不過電路設計比較麻煩,這也是耗時最久的
下面的電路包含了一些debug用的東西,
我測試過,正确,能糾錯一個字,檢查兩位錯
Decd
這是複用器decoder,預設下,你輸入一個5位數 10001:
輸出32位,其中第(10001)2也就是第17位輸出是1,其餘均為0
海明校驗傳輸測試
測試編解碼電路的正确性(最多兩位錯誤)…
_險象
電路中出現的情況,當X發生延遲時,電路的期望輸出就會發現變化