notice: 本文已被archive,只具備歷史價值,上機價值 學習
實驗目的 測試
實驗環境 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個檢驗位的值異或它以前檢驗的值
根據奇偶校驗的性質,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
海明校驗傳輸測試
測試編解碼電路的正確性(最多兩位錯誤)…
_險象
電路中出現的狀況,當X發生延遲時,電路的指望輸出就會發現變化