华中科技大学 计算机组成原理 上机实验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個檢驗位的值異或它之前檢驗的值
根據奇偶校驗的性質,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發生延遲時,電路的期望輸出就會發現變化
?
轉載于:https://www.cnblogs.com/migeater/p/9078117.html
總結
以上是生活随笔為你收集整理的华中科技大学 计算机组成原理 上机实验1 2018的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 点对点架构模式
- 下一篇: 用简单的方法构建一个高可用服务端