圖書簡介
本書是大學本科計算機科學和計算機工程專業講授“計算機組織”課程的教科書或教學參考書。其內容的深度和廣度,既適用於大學本科的課堂教學,也適用於計算機
專業技術人員閱讀參考。
本書內容自成體系,深入淺出地介紹了計算機各主要功能部件的組成原理,通過具體的性能分析,了解其基本設計方法。為了適應廣大讀者不同的專業背景以及不同專業課程體系對“計算機組織”課程內容的要求,本書在選材上著重考慮從基本內容(數字信息和基本邏輯設計)出發,逐步深入到計算機各主要功能部件以及由它們相互連線組成的數據路徑和控制器的設計。
本書區別於其他同類教材的主要特點之一是同時出版由原作者撰寫的英文和中文教材,以便於大學推廣雙語教學,並將有利於學生在學習本書的同時,提高英文閱讀寫作能力,同時還可以進一步參考有關的英文文獻。
前言
本書寫作目的是為計算機科學和計算機工程專業提供一本可用於“計算機組織”課程的基礎教科書。本書內容自成體系,因而只需具備計算機高級語言程式設計的基礎知識即可閱讀。在選材廣度上包括計算機信息和數字邏輯的基礎知識,在深度上則為學生進一步學習和將來從事計算機專職工作打下堅實基礎。
寫作一本“計算機組織”教材的難點之一是關於“計算機組織”和“計算機結構”缺乏被共同接受的定義。通常在科研文獻中對這兩個名詞的了解從概念上有如下區分:計算機結構是指由彙編語言程式設計人員所看到的計算機系統的特性, 而計算機組織則是為實現計算機結構而組成的功能部件及其相互連線。我們比較贊同這一理解,從而認為“計算機組織”是一門低層次的偏重硬體的課程,而“計算機結構”則是一門高層次的偏重系統的課程。另一方面,我們理解計算機組織和計算機結構的課程體系又是相互緊密關聯的,以至於我們很難把它們明確區分開來。我們寧願把計算機組織中的“硬體”理解為一種“邏輯”個體而不是一種“物理”個體。
從系統的角度看,計算機系統可以被視為一種多層次結構的抽象體,而這種觀點對於理解計算機結構和組織有很重要的影響。有些關於計算機組織的教科書按照計算機層次結構從上而下或從下而上地表達,這種方法特別適合於對只有極少背景知識而缺乏這種層次結構概念的學生講授。然而,更多的計算機組織教科書是根據計算機的主要功能部件(
中央處理器、存儲器、輸入輸出、控制器等)來表述,同時在觀念上仍保持計算機系統的全局性層次結構。後一種方法的優點是可以集中敘述計算機各個功能部件的原理和設計,從而避免導致課程涉及面過廣的毛病。我們在本書中選擇了第二種方法, 首先在第1章介紹計算機系統的層次結構,這樣使學生知道如何把各章的內容與計算機的全局結構聯繫起來。
我們假定計算機層次模型從上而下分為6級——高級語言、作業系統、彙編語言、常規機器(暫存器傳送)、微程式以及數字邏輯。如果我們試圖區分結構和組織,便可能認為高級語言級和作業系統級較為適合“結構”的範疇。而常規機器級、微程式級和數字邏輯級則較為適合“組織”的範疇,同時彙編語言級則可能位於結構和組織兩者之間。
基於這一理解,我們認為下列各課題是位於層次結構的低層,它們都屬於本書的範圍:
彙編語言級(本級的低層討論由機器指令和數據組成的二進制信息以及對這些數據的各種操作):
數據和信息的機器表示(第2章);
複雜算術操作(第6章);
指令系統結構(第7章)。
常規機器或暫存器傳送級(彙編級機器組織和功能組織,其中計算機硬體被視為一些信息存儲和處理單元,相互連線成數據路徑,用於傳送各種數據和控制信息):
控制器(第9章,硬聯控制部分);
存儲器(第10章,主存儲器);
接口和通信(第11章,輸入輸出)。
微程式級(第9章,微程式控制部分)。
數字邏輯級(數字邏輯和數字系統,其中上列各功能部件被視為由基本構件組成的邏輯線路和
有限狀態機):
組合邏輯(第3章);
時序邏輯(第4章)。
高等計算機組織(第12章,流水線)。
關於本書涵蓋範圍的詳細情況,請見每一章小結的內容。
本書的使用
本書是在作者們講授計算機科學專業課程“計算機組織概論”經驗的基礎上寫成的。一般而言,像我們這樣的計算機科學專業,其課程體系中沒有一門關於數字邏輯的專門課程,但可能會有一門被稱為“
計算機系統”的課程。這門課程可能包括某些數字邏輯的概念,但主要講授彙編語言程式設計,至少會講授彙編語言的基本概念作為計算機系統層次的重要一級。因此本書不講授一種特定的彙編語言並讓學生實際練習程式設計,但是我們仍列入一章“指令系統結構”, 集中講授與計算機組織緊密相關的一些課題(例如指令形式、 變址方式和指令系統設計)。因而本書不強調彙編語言, 而強調數字邏輯,並且我們處理數字邏輯的教學材料是從實際的觀點出發的,即強調它對計算機線路和部件設計基礎的重要性。學生應從介紹數字邏輯的兩章(第3章和第4章)學習這些線路和部件的分析和設計方法。如果條件(資源和課程進度計畫)允許,他們還可以使用模擬軟體來實現和測試這些線路和部件。 這樣的實際動手經驗會給學生奠定紮實的基礎,去學習以後各章在計算機功能部件一級進行計算機設計的有關內容。
本書的副標題強調計算機組織的分析與設計。但是,我們並不是企圖教會學生設計能作為商品的實際計算機。我們的目的只是為了讓學生根據本書所敘述的方法,通過分析和設計加深對計算機組織的了解。因此,本書並不強調商品處理機的典型研究,因為它們過於複雜,可能會妨礙學生學習基本層次設計方法。我們的意圖仍然是教會學生設計現代計算機的概念和技術,但我們使用實際計算機的簡化版本作為例子,從高層的指令系統級直到基礎層的邏輯線路級和微程式級來說明計算機的數據路徑和控制器的設計方法。這樣“從動手中學習”,學生不但能設計簡單的處理機,並且能利用適當的模擬軟體在個人計算機上去實現一個“真實的”工作模型。我們的教學經驗表明這一學習方法對於計算機科學專業的學生是有效的。他們不需學習額外的硬體課程而學到現代化計算機的內部工作原理。
為了針對不同專業的不同課程體系使用本書,我們按照講授一個學期計算機組織課程的安排做下列建議:
對於未學過數字邏輯課的學生:
A. 講授範圍可包括除第12章以外的所有各章,但某些講授專題的節次可以跳過去,例如:邏輯線路的動態特性(3.5節),
有限狀態機的設計(4.6節),雙精度算術運算(6.2節和6.4節),中央處理器位片器件(8.5節),查錯和糾錯代碼(11.6.2小節),以及除PCI以外的匯流排標準(11.7.2~11.7.5小節)。
B. 為了能在(15周的)一個學期課程中容納本書的基本內容,每一章可以著重講授下列基本選題:
二進制補碼和操作(2.3.2小節和2.4.2小節),組合邏輯線路在加法器以及中規模集成器件(MSI)上的設計與實現(3.1~3.4節、3.6節),帶時鐘脈衝的時序邏輯線路在計數器和MSI器件上的設計與實現(4.2~4.5節),算術邏輯單元的設計與實現(5.2節、 5.3節、 5.4.1小節、 5.4.2小節和5.5.2小節),浮點運算(6.5節),指令形式與定址方式(7.1節和7.2節),基於累加器和通用暫存器組的中央處理器(8.3.1小節和8.4節),根據基本指令周期設計操作表和微程式流程圖(9.4.1~9.4.3小節以及9.5.3~9.5.4小節),存儲層次結構和主存儲器(10.1節和10.2節),以及輸入輸出訪問和接口(11.3~11.5節)。
對於學過數字邏輯的學生:
C. 可以講授或要求學生自學第3章和第4章(3.3~3.5節和4.3~4.5節)的設計例題以求複習一些選題。這樣便可能講授上述A項中列為可選的或高等的課題,以及第12章的流水線。
D. 講授上述B項中列為常規的課題便可以強調設計,以及在邏輯線路級上的實現。如果可能,還應配合實驗環節。
我們謹向在本書寫作過程中提供鼓勵、支持和幫助的人們表示感謝。我們特別感謝Christopher W. Hatfield博士幫助校閱全書原稿,並進行文字加工以求表述更為清晰。我們衷心感謝
清華大學出版社及其總編和責任編輯們的遠見共識,得以倡導和支持本書的出版。
我們感謝美國Fresno加州州立大學計算機科學系系主任Henderson Yeung博士對本書寫作一貫的支持,還感謝我們學校的學生集體,他們在本書早期版本的多年課堂試教過程中為我們奠定了重要的試驗和改進的基礎。
由於我們教學工作比較繁忙,寫作時間比較倉促,本書的初版無疑會有一些缺點和錯誤。我們歡迎讀者提出寶貴意見和指正書中的錯誤
目錄
第1章緒論
1.1計算機結構和組織的領域1
1.2計算機組織的模型2
1.2.1計算機設計過程的層次結構2
1.2.2計算機組織的RTL模型3
1.2.3計算機系統的性能模型6
1.3計算機進化簡史8
1.4有代表性的計算機系列9
1.4.1Pentium系列9
1.4.2SPARC系列10
1.4.3PowerPC系列11
1.5計算機進化的前景12
1.5.1十億電晶體晶片的挑戰12
1.5.2下一代個人計算機的新角色13
1.5.3嵌入式系統14
1.6小結16
第2章計算機的信息表示
2.1計算機中表示信息的數據類型17
2.2定點無符號數的表示18
2.2.1一般的位置數制18
2.2.2小數的表示20
2.2.3不同表示的數之間的轉換21
2.3定點符號數的表示24
2.3.1符號數值表示24
2.3.3二進制補碼的使用動機27
2.3.4二進制反碼錶示29
2.4二進制加減法30
2.4.1符號數值加減法31
2.4.2二進制補碼加減法32
2.4.3二進制反碼加減法34
2.5利用二進制位串的其他代碼制35
2.5.1格雷碼35
2.5.2十進制碼36
2.5.3字元碼38
2.6小結39
習題39
目錄計算機組織:原理、分析與設計第3章組合線路的邏輯設計
3.1組合邏輯函式及表達式43
3.1.1使用真值表定義組合邏輯函式43
3.1.2原始組合函式和基本邏輯操作44
3.1.3布爾代數和邏輯表達式45
3.1.4正則邏輯表達式46
3.2用於簡化邏輯函式的卡諾圖49
3.3組合邏輯函式的實現51
3.3.1AND,OR和NOT門51
3.3.2NAND和NOR門52
3.3.3XOR和XNOR門53
3.4組合邏輯線路的設計54
3.4.1全加器的設計55
3.4.2用外部線路做減法的波浪進位加減法器57
3.4.3雙精度加減法59
3.4.4用於符號數值表數法的波浪進位加法器60
3.5組合邏輯線路的動態特性62
3.5.1組合邏輯線路的傳遞延遲62
3.5.2組合邏輯線路的波形圖63
3.5.3組合邏輯線路中的冒險64
3.6MSI組合電路模組67
3.6.1多路轉接器68
3.6.2解碼器/多路分離器72
3.6.3編碼器73
3.7可程式邏輯器件75
3.7.3可程式陣列邏輯(PAL)78
3.8小結83
習題83
第4章時序線路的邏輯設計
4.1時序線路的普遍模型89
4.2觸發器90
4.2.1簡單SR暫存器的分析90
4.2.2SR觸發器92
4.2.4T觸發器95
4.2.5D觸發器96
4.2.6實際的觸發器線路97
4.3時序邏輯線路的分析101
4.3.2從狀態轉換圖到有限狀態機103
4.4時序邏輯線路的綜合104
4.5MSI時序線路模組107
4.5.1暫存器107
4.5.3計數器108
4.6有限狀態機的設計112
4.7小結115
習題116
5.1馮·諾依曼計算機模型121
5.2並行快速加法器122
5.2.1進位傳遞的性質122
5.2.4分塊式先行進位加法器線路125
5.3一個商售ALU晶片設計的分析128
5.3.1基於加法器的ALU的組織128
5.3.2針對邏輯操作進行輸入線路的設計129
5.3.3ALU用於算術操作的分析132
5.4算術邏輯單元的設計方法134
5.4.1設計一個利用外接門以實現邏輯操作的ALU134
5.4.2設計基於標準ALU晶片的ALU136
5.4.3重新設計ALU的輸入線路138
5.4.4設計利用加法器的內部線路的ALU141
5.4.5重新設計加法器的輸出線路143
5.4.6ALU的不同設計方法的比較146
5.5ALU中配備移位器147
5.5.1設計一個在ALU中的嵌入式移位器148
5.5.2設計作為一個獨立單元的移位器152
5.5.3鼓形移位器的設計154
5.6小結157
習題157
第6章複雜算術操作
6.1單精度乘法166
6.1.1二進制補碼乘法的基本算法166
6.1.2快速乘法169
6.2雙倍精度乘法175
6.2.1對算法的特殊要求175
6.2.2雙精度正數乘法的算法176
6.2.3雙精度二進制補碼乘法的算法178
6.3單精度除法181
6.4雙精度除法185
6.4.1對算法的特殊要求185
6.4.2雙精度小數除算法186
6.4.3雙精度整數除算法187
6.5浮點操作190
6.5.1浮點數的表示190
6.5.2浮點數操作算法193
6.5.3一個完整的浮點加減算法194
6.5.4用時序邏輯實現浮點加減法195
6.6小結196
習題197
第7章指令系統結構
7.1指令格式201
7.2定址方式205
7.2.1在指令碼中指定運算元205
7.2.2在暫存器中指定運算元206
7.2.3指定存儲器中的運算元206
7.2.4在彙編語言程式內部指定一個位置210
7.2.5定址方式的實例研究212
7.3指令系統設計214
7.3.1數移動指令214
7.3.2算術邏輯指令216
7.3.3控制指令217
7.4精簡指令系統計算機(RISC)220
7.5小結224
習題224
第8章中央處理器
8.1中央處理器的功能和功能部件229
8.2CPU的基本組織230
8.2.2基於累加器的CPU組織231
8.2.3基於處理器堆疊的CPU組織232
8.3基於累加器的CPU的構造233
8.3.1建立在單匯流排上基於累加器的CPU的設計234
8.3.2雙匯流排和三匯流排基於累加器的CPU的設計238
8.3.3設計一個在ALU上構造的基於累加器的CPU240
8.4.1通用暫存器組的構造243
8.4.2基於通用暫存器的CPU的設計244
8.5CPU位片器件—實例研究246
8.6小結249
習題249
第9章控制器
9.1控制器的功能和一般組織254
9.2控制線路設計初步255
9.2.1控制電位信號與控制脈衝信號255
9.2.3同步控制與異步控制257
9.2.4信號發生器的異步線路258
9.3算術操作串列控制的設計264
9.3.1按位串列加法器的設計264
9.3.2串列二進制補碼乘法器的設計268
9.4一個簡單計算機的硬聯控制的設計272
9.4.1一個簡單RISC處理機的規格272
9.4.2基本指令周期275
9.4.3為指令系統設計操作圖276
9.4.4控制信號的設計與實現281
9.4.5數據路徑和定時信號的設計和實現284
9.5一個簡單計算機微程式控制的設計289
9.5.1微程式控制的一般性探討289
9.5.2微程式控制的數據路徑設計291
9.5.3微程式控制的微指令格式的設計295
9.5.4微程式控制的流程圖設計297
9.5.5獲得微程式代碼表301
9.6小結303
習題304
第10章主級存儲器
10.1存儲器層次結構312
10.1.1存儲器系統的層次組織312
10.1.2存儲器層次結構的功能和性能312
10.2主存儲器的組織314
10.2.1RAM晶片的功能和特性315
10.2.2RAM晶片的內部組織315
10.2.3訪問RAM的基本操作317
10.2.4RAM晶片互聯以擴大容量318
10.3性能最佳化的RAM技術320
10.3.1異步DRAM321
10.3.2FPM和EDO322
10.3.3同步DRAM(SDRAM)323
10.3.4RambusDRAM(RDRAM)324
10.3.5閃爍存儲器與EEPROM的對比325
10.3.6分割匯流排326
10.4高速快取326
10.4.1存儲器訪問局部性327
10.4.2映射函式328
10.4.3寫操作策略334
10.4.4替換算法334
10.4.5高速快取的組織和性能335
10.5主級存儲器總體組織337
10.5.1串列存儲器窄匯流排組織337
10.5.2並行存儲器寬匯流排組織338
10.5.3並行存儲器窄匯流排組織339
10.5.4交叉存儲器窄匯流排組織340
10.6小結343
習題343
第11章輸入輸出
11.1I/O子系統的功能和特點347
11.2次級存儲器349
11.2.1磁碟350
11.2.3光碟355
11.2.4磁帶358
11.3輸入輸出訪問359
11.3.1I/O暫存器的定址359
11.3.2程控I/O360
11.3.3中斷驅動I/O362
11.3.4直接存儲器訪問364
11.4異常事件和異常事件處理366
11.4.1中斷請求和中斷回答366
11.4.2中斷辨認367
11.4.3中斷服務和中斷返回371
11.5.1I/O匯流排規程372
11.6串列I/O數據通信376
11.6.1串列傳輸的時間同步376
11.6.2錯誤檢測和糾正碼378
11.6.3串列接口和I/O連線埠389
11.7匯流排標準394
11.7.2SCSI並行接口397
11.7.3USB串列匯流排401
11.7.4FireWire串列匯流排407
11.7.5開關
纖維結構和InfiniBand409
11.8小結411
習題412
第12章流水線
12.1流水線的基本概念416
12.1.1時間並行性比較空間並行性417
12.1.2流水線中的時間並行性417
12.1.3流水線的性能421
12.2流水線的一般組織422
12.2.1同步流水線422
12.2.2異步流水線424
12.3通過函式分解設計流水線425
12.3.1指令流水線的特性426
12.3.2數據流樣式向流水線的映射427
12.3.3流水線基本數據路徑的設計429
12.4從冒險分析設計流水線數據路徑431
12.4.1構造冒險431
12.4.2數據冒險的一般討論432
12.4.3數據冒險分析433
12.4.4控制冒險440
12.4.5流水線完整的數據路徑445
12.5.1超標量處理機的特性447
12.5.2超標量處理機的概念性結構448
12.5.3指令傳送和指令執行策略450
12.6小結452
習題452