第3版前言
本次修訂再版的主要動因是補充精簡指令集計算機(RISC)方面的內(nèi)容。雖然第2版也有RISC相關(guān)的內(nèi)容,但僅限于指令系統(tǒng)特性的介紹,未涉及RISC的數(shù)據(jù)通路和控制器的設(shè)計。第3版以RISCV開源指令集架構(gòu)為例,介紹了單周期和流水線的數(shù)據(jù)通路以及控制器的設(shè)計方法,并且將第2版指令流水線的相關(guān)內(nèi)容合并到RISC這一章,補充了解決數(shù)據(jù)沖突的數(shù)據(jù)通路實例。
為了使讀者能夠更清楚地理解指令系統(tǒng)、數(shù)據(jù)通路以及控制器設(shè)計方法上的內(nèi)在聯(lián)系,在章節(jié)組織上,將微程序控制的復(fù)雜指令集計算機和硬布線控制的精簡指令集計算機各獨立為一章,均從指令系統(tǒng)到一般性原理,再到具體實例,使讀者從中體會微架構(gòu)的發(fā)展變化。同時,第3版改變了以總線等信息傳送通道分類數(shù)據(jù)通路的方法,不再強調(diào)數(shù)據(jù)通路結(jié)構(gòu)的單總線或多路徑,而是強調(diào)控制方法和性能的差別,分為單周期、多周期和流水線的數(shù)據(jù)通路。
第3版的另一個主要修訂是JUC系列教學(xué)模型機,將第2版的JUCⅡ模型機改進(jìn)為JUC3。為便于教學(xué)實施,JUC3分成基本模塊和擴展模塊,本書主要介紹基本模塊,擴展模塊留待實驗環(huán)節(jié)討論。JUC3主要對ALU電路進(jìn)行了改進(jìn),優(yōu)化數(shù)據(jù)通路設(shè)計,相應(yīng)地修改了微指令格式,此外還有一些細(xì)節(jié)修改。
本次修訂延續(xù)了前兩版理論與實踐結(jié)合的特點。書中介紹的RISCV單周期和流水線結(jié)構(gòu)以及
JUC3模型機已經(jīng)在FPGA上設(shè)計實現(xiàn),并且經(jīng)過了兩輪實驗教學(xué)的檢驗。
課程組開發(fā)了遠(yuǎn)程FPGA虛擬實驗平臺,建設(shè)了實驗
慕課資源,與理論課程配合開展實驗教學(xué)。
各章的具體修訂情況如下。第1章中計算機的主要性能指標(biāo)增加了平均指令周期,這個概念在第2版中是放在控制器一章的,改到第1章便于理解與其他性能指標(biāo)的聯(lián)系。第2章補充了多媒體數(shù)據(jù)的表示。第3章擴充了例題和習(xí)題。第4章的修訂主要涉及
4.1.3節(jié)補碼加減運算的邏輯實現(xiàn)和4.6節(jié)運算器的組織,修改了算術(shù)運算電路和ALU電路實例,它們將用于JUC3教學(xué)模型機; 補充了數(shù)據(jù)通路的結(jié)構(gòu)類型,通過一個簡單的例子闡明單周期、多周期、流水線數(shù)據(jù)通路的概念,為第7章的硬布線控制打基礎(chǔ)。第5章修訂了非易失性半導(dǎo)體存儲器的相關(guān)內(nèi)容,并且將原第8章中的多模塊存儲器改到這一章。第6章抽取了第2版微程序控制和復(fù)雜指令系統(tǒng)的相關(guān)內(nèi)容,教學(xué)模型機升級為JUC3,內(nèi)容上進(jìn)行了精簡。第7章從單周期、多周期和流水線的角度重寫了硬布線控制方法,增加了RISCV開源指令集構(gòu)架、RISCV的單周期微架構(gòu)設(shè)計和RISCV的流水線微架構(gòu)設(shè)計,同時將第2版第6章RISC相關(guān)內(nèi)容和第7章流水線相關(guān)內(nèi)容融合到這一章。第8章主要修改了高速緩存三種映像方式的組織結(jié)構(gòu)圖,相應(yīng)地重寫了文字講解并補充了例題; 虛擬存儲器部分沒有修改。第9章基本沒有修改。后增加了一個附錄,比較詳細(xì)地介紹了RISCV的指令系統(tǒng)。
第3版的修訂工作主要由肖鐵軍、丁偉、葛桂萍和馬學(xué)文完成。肖鐵軍負(fù)責(zé)第1章、第4章、第6章和第8章的修訂,丁偉負(fù)責(zé)第2章、第3章的修訂,葛桂萍負(fù)責(zé)第5章的修訂,第7 章的修訂工作由丁偉、葛桂萍和肖鐵軍合作完成,馬學(xué)文編寫了附錄。肖鐵軍和丁偉承擔(dān)了全書的統(tǒng)稿工作。鄒婷婷、楊旭東參加了本書第1版和第2版的編寫工作。
由于編者的水平有限,尤其RISCV是近年的新架構(gòu),如果書中有疏漏之處,歡迎讀者提出意見和建議。
本書配套微課視頻,請讀者先用手機微信掃描封底刮刮卡,獲得權(quán)限,再掃描書中章節(jié)標(biāo)題
旁的二維碼,即可觀看相應(yīng)的教學(xué)視頻。其他教學(xué)資源可掃描下方二維碼獲得。本書還配套了在線作業(yè)系統(tǒng),讀者可掃描封底刮刮卡,登錄作業(yè)系統(tǒng),即可在線答題。
教學(xué)資源
編者
2021年7月
第2版前言
本書第1版出版后不少教師和讀者發(fā)來電子郵件,提出了許多寶貴的意見和建議。為了使本書能夠更好地適應(yīng)不同學(xué)校、專業(yè)的教學(xué)計劃,反映計算機技術(shù)的發(fā)展,第2版對書中內(nèi)容做了一些補充和修改、調(diào)整。第2版還配套了實踐教程,便于結(jié)合理論課開展實踐教學(xué),倡導(dǎo)從設(shè)計的角度理解計算機的組成和工作原理的教學(xué)理念。
近年有些學(xué)校嘗試教學(xué)改革,將硬件相關(guān)基礎(chǔ)課程打通為一門計算機組成原理或計算機硬件基礎(chǔ),為此本書第2版增加了信息表示和邏輯電路基礎(chǔ)兩章,其中信息表示一章除了介紹進(jìn)位計數(shù)制和定點數(shù)、浮點數(shù)的表示等內(nèi)容外,還增加了如何理解C語言數(shù)據(jù)類型的內(nèi)容。邏輯電路基礎(chǔ)一章除了邏輯代數(shù)基礎(chǔ)知識外,著重從應(yīng)用的角度介紹計算機中常用的基本邏輯模塊的功能?紤]到有的專業(yè)沒有單獨開設(shè)匯編語言課程,指令系統(tǒng)這一章補充了匯編語言程序設(shè)計的基礎(chǔ)知識。存儲器與存儲體系分為兩章,存儲器一章增加了相變存儲器等新型非易失性存儲器; 存儲體系一章重點對高速緩存做了修改。控制器和中央處理器一章介紹的模型機升級為JUCⅡ,該模型機已經(jīng)在FPGA上實現(xiàn),配套實踐教程設(shè)計了相應(yīng)的實驗和課程設(shè)計項目; 這一章安排在存儲體系之前,有利于更早地建立整機的概念,更好地理解高速緩存、虛擬存儲與CPU的關(guān)系。將第1版的輸入輸出系統(tǒng)和系統(tǒng)總線兩章合并為一章,刪除了教學(xué)中一般較少涉及的輸入輸出設(shè)備內(nèi)部結(jié)構(gòu)原理以及I/O通道等內(nèi)容,重新組織了內(nèi)容。
本書第2版主要由肖鐵軍、丁偉、鄒婷婷、楊旭東、馬學(xué)文共同編寫,劉芳參加了第9章的部分編寫工作。歡迎讀者一如既往地對本書提出意見和建議。
編者
2014年9月
第1版前言
本書適用于高等院校計算機類各專業(yè)及相關(guān)專業(yè)的本科生。計算機組成原理作為計算機專業(yè)的一門重要的核心專業(yè)基礎(chǔ)課程,主要討論計算機從部件到整機的組織結(jié)構(gòu)和工作原理,在課程體系中起著承上啟下的作用。
本書講述的是一般性原理,并不針對任何具體的商業(yè)機型,而是綜合了國內(nèi)外計算機類型中較為成熟的先進(jìn)技術(shù),兼顧計算機發(fā)展的新技術(shù)、新成果,力求做到深入淺出。為了避免一般性的抽象原理不利于分析理解,本書既從面上反映不同的典型結(jié)構(gòu),也有深入的分析,點面結(jié)合; 通過一個模型機的實例將相關(guān)章節(jié)聯(lián)系起來,終形成一個整機的概念,系統(tǒng)性較強。本書設(shè)計的JUC1教學(xué)微處理器已經(jīng)在FPGA上設(shè)計實現(xiàn),可用于配套的實踐教學(xué)。
本書共分7章,授課學(xué)時為70~90學(xué)時,在教學(xué)中可根據(jù)具體情況對書中內(nèi)容進(jìn)行取舍。
第1章計算機系統(tǒng)概論首先透過計算機的發(fā)展歷程探究計算機技術(shù)飛速發(fā)展的動力所在,然后介紹了馮·諾依曼結(jié)構(gòu)計算機的基本組成,使讀者建立整體概念,了解計算機各部件之間的關(guān)系,有利于后續(xù)的學(xué)習(xí)。
第2章討論運算方法和運算器,包括數(shù)制與編碼的基礎(chǔ)知識、數(shù)據(jù)的表示方法和校驗方法、定點數(shù)和浮點數(shù)的四則運算及溢出判斷方法、運算器的組織結(jié)構(gòu)及數(shù)據(jù)加工流程。
第3章介紹存儲器和存儲體系。存儲器以存儲位元存儲器芯片主存儲器為主線,講述相關(guān)的半導(dǎo)體存儲器原理和主存儲器的構(gòu)成; 存儲體系以高速緩存主存虛擬存儲為層次,討論如何解決速度與容量的矛盾。
第4章是指令系統(tǒng),講述指令系統(tǒng)的一般設(shè)計原則、尋址技術(shù),后以JUC1教學(xué)模型機為例,介紹了它的指令系統(tǒng)。
第5章是很關(guān)鍵的一章,通過這一章的學(xué)習(xí)將建立起計算機主機的概念,并通過指令執(zhí)行流程,理解計算機的工作原理。在講述了控制器的基本原理之后,以JUC1教學(xué)模型機為例,具體講解了微程序控制器設(shè)計方法。這一章的后還介紹了指令流水線。
第6章和第7章講解輸入輸出系統(tǒng)和系統(tǒng)總線,包括常用外部設(shè)備、輔助存儲器、主機與外設(shè)的數(shù)據(jù)傳送方式、總線仲裁等內(nèi)容。
本書由計算機組成原理課程組的6位老師合作編寫,第1章和第5章由肖鐵軍編寫,第2章由鄒婷婷編寫,第3章主要由楊旭東編寫,第4章由丁偉編寫,第6章由袁曉云編寫,馬學(xué)文編寫了第7章以及第3章的一部分。研究生于洋參加了JUC1教學(xué)模型機的FPGA設(shè)計和驗證工作。由于編者水平有限,書中難免有疏漏之處,敬請讀者批評指正。
編者
2010年3月
第1章計算機系統(tǒng)概述
1.1計算機的發(fā)展歷程
1.2計算機硬件的基本組成
1.2.1存儲器
1.2.2運算器
1.2.3控制器
1.2.4輸入輸出設(shè)備
1.2.5總線
1.3程序設(shè)計語言和計算機的層次結(jié)構(gòu)
1.4計算機的主要性能指標(biāo)
1.4.1機器字長
1.4.2運行速度
習(xí)題
第2章信息表示
2.1進(jìn)位計數(shù)制及其相互轉(zhuǎn)換
2.1.1進(jìn)位計數(shù)制
2.1.2數(shù)制轉(zhuǎn)換
2.2數(shù)值數(shù)據(jù)的表示
2.2.1定點數(shù)的表示
2.2.2浮點數(shù)的表示
2.2.3C語言中定點數(shù)和浮點數(shù)的表示
2.2.4十進(jìn)制數(shù)的二進(jìn)制編碼
2.3非數(shù)值數(shù)據(jù)的表示
2.3.1邏輯類型數(shù)據(jù)表示
2.3.2字符編碼
2.3.3漢字編碼
2.3.4多媒體數(shù)據(jù)的表示
2.4可靠性編碼
2.4.1格雷碼
2.4.2奇偶校驗碼
2.4.3海明碼
2.4.4循環(huán)冗余校驗碼
習(xí)題
第3章邏輯電路基礎(chǔ)
3.1邏輯代數(shù)基礎(chǔ)
3.1.1邏輯常量、邏輯變量
3.1.2邏輯代數(shù)的基本運算
3.1.3基本邏輯公式、定理和規(guī)則
3.1.4邏輯函數(shù)
3.1.5邏輯函數(shù)化簡
3.2邏輯電路
3.2.1邏輯門電路
3.2.2門電路的實現(xiàn)
3.2.3集成電路
3.2.4可編程邏輯電路
3.2.5邏輯電路的設(shè)計模式
3.3計算機中常用的組合邏輯電路
3.3.1加法器
3.3.2譯碼器
3.3.3多路選擇器
3.3.4三態(tài)門
3.4計算機中常用的時序邏輯電路
3.4.1基本RS觸發(fā)器和D觸發(fā)器
3.4.2鎖存器
3.4.3數(shù)據(jù)寄存器
3.4.4移位寄存器
3.4.5計數(shù)器
習(xí)題
第4章運算方法與運算器
4.1定點數(shù)加減法運算
4.1.1原碼加減運算方法
4.1.2補碼加減運算方法
4.1.3補碼加減運算的邏輯實現(xiàn)
4.1.4運算結(jié)果的特征標(biāo)志
4.1.5移碼加減運算
4.2定點數(shù)移位運算
4.2.1邏輯移位
4.2.2算術(shù)移位
4.2.3循環(huán)移位
4.3定點乘法運算
4.3.1原碼乘法運算
4.3.2補碼乘法運算
4.3.3陣列乘法器
4.4定點除法運算
4.4.1原碼除法運算
4.4.2補碼除法運算
4.4.3陣列除法器
4.5浮點數(shù)的四則運算
4.5.1浮點加減運算
4.5.2浮點乘除運算
4.6運算器的組織
4.6.1算術(shù)邏輯單元設(shè)計實例
4.6.2數(shù)據(jù)通路的結(jié)構(gòu)類型
4.6.3運算器數(shù)據(jù)通路
4.6.4浮點運算器的組成與結(jié)構(gòu)
習(xí)題
第5章存儲器
5.1存儲器概述
5.1.1存儲器的分類
5.1.2存儲器的性能指標(biāo)
5.2半導(dǎo)體隨機存取存儲器
5.2.1靜態(tài)隨機存取存儲位元
5.2.2動態(tài)隨機存取存儲位元
5.2.3半導(dǎo)體隨機存取存儲芯片
5.2.4DRAM的發(fā)展
5.3非易失性半導(dǎo)體存儲器
5.3.1掩模型只讀存儲器
5.3.2一次可編程只讀存儲器
5.3.3可擦除可編程只讀存儲器
5.3.4電可擦除可編程只讀存儲器
5.3.5Flash存儲器
5.3.6鐵電存儲器
5.3.7磁性隨機存儲器
5.3.8相變存儲器
5.4主存儲器的組織
5.4.1CPU與主存儲器的連接
5.4.2主存儲器容量的擴充
5.4.3主存儲器的編址方式
5.4.4哈佛結(jié)構(gòu)
5.5多模塊存儲器
5.6輔助存儲器
5.6.1磁記錄原理及記錄方式
5.6.2磁盤存儲器
5.6.3磁帶存儲器
5.6.4光盤存儲器
習(xí)題
第6章微程序控制計算機
6.1指令系統(tǒng)
6.1.1指令和指令系統(tǒng)
6.1.2指令的格式
6.1.3指令的類型
6.1.4尋址方式
6.1.5符號指令和匯編語言
6.1.6指令系統(tǒng)設(shè)計實例
6.2控制器概述
6.2.1控制器的基本組成
6.2.2控制器的工作過程
6.3CPU數(shù)據(jù)通路
6.3.1Intel 8080的數(shù)據(jù)通路
6.3.2VAX11/780的數(shù)據(jù)通路
6.3.3JUC3的數(shù)據(jù)通路
6.4指令執(zhí)行流程
6.4.1取指令階段
6.4.2取操作數(shù)階段
6.4.3執(zhí)行階段
6.4.4指令執(zhí)行的微操作序列舉例
6.5微程序控制器
6.5.1微程序控制基本原理
6.5.2微指令編碼方式
6.5.3后繼微指令地址的形成
6.5.4微程序控制的時序
6.6微程序控制器設(shè)計實例
6.6.1微指令編碼設(shè)計
6.6.2微轉(zhuǎn)移方式
6.6.3取指令的微程序設(shè)計
6.6.4取操作數(shù)的微程序設(shè)計
6.6.5執(zhí)行階段的微程序
6.7JUC匯編語言程序設(shè)計
6.7.1符號指令與功能
6.7.2順序結(jié)構(gòu)程序設(shè)計
6.7.3分支程序設(shè)計
6.7.4循環(huán)程序設(shè)計
6.7.5堆棧及子程序
習(xí)題
第7章精簡指令集計算機
7.1RISC概述
7.1.1RISC的產(chǎn)生及發(fā)展
7.1.2RISC的主要特點
7.1.3RISC與CISC的比較
7.2硬布線控制
7.2.1單周期數(shù)據(jù)通路的控制
7.2.2多周期數(shù)據(jù)通路的控制
7.2.3流水線數(shù)據(jù)通路的控制
7.3RISCV開源指令集架構(gòu)
7.3.1RISCV指令集
7.3.2RISCV的尋址方式
7.3.3RV32I指令舉例
7.4RISCV的單周期微架構(gòu)設(shè)計
7.4.1數(shù)據(jù)通路設(shè)計
7.4.2控制器的設(shè)計方法
7.5RISCV的流水線微架構(gòu)設(shè)計
7.5.1流水線的基本原理
7.5.2RISCV流水線設(shè)計
7.5.3RISCV流水線數(shù)據(jù)通路
7.5.4RISCV流水線控制
7.6流水線的性能
7.6.1流水線的性能指標(biāo)
7.6.2指令流水線的相關(guān)與沖突
7.6.3流水線的指令調(diào)度
7.6.4超標(biāo)量與超流水線
習(xí)題
第8章存儲體系
8.1存儲體系的層次結(jié)構(gòu)
8.2高速緩沖存儲器
8.2.1Cache的基本原理
8.2.2相聯(lián)存儲器
8.2.3全相聯(lián)映像方式
8.2.4直接映像方式
8.2.5組相聯(lián)映像方式
8.2.6Cache的讀策略和替換算法
8.2.7Cache的寫策略
8.2.8多級Cache
8.3虛擬存儲器
8.3.1虛擬存儲器的基本概念
8.3.2頁式虛擬存儲器
8.3.3段式虛擬存儲器
8.3.4段頁式虛擬存儲器
8.3.5快速地址變換
8.4多級存儲的性能指標(biāo)
習(xí)題
第9章輸入輸出系統(tǒng)
9.1輸入輸出系統(tǒng)概述
9.1.1輸入輸出系統(tǒng)的組成
9.1.2輸入輸出設(shè)備
9.1.3輸入輸出接口
9.1.4輸入輸出接口與主機的信息傳送控制方式
9.2程序查詢方式
9.2.1程序查詢傳送工作流程
9.2.2查詢輸入接口
9.2.3查詢輸出接口
9.3程序中斷方式
9.3.1中斷概述
9.3.2中斷請求的表示與控制
9.3.3中斷響應(yīng)
9.3.4中斷服務(wù)和中斷返回
9.3.5中斷嵌套
9.3.6中斷優(yōu)先級的動態(tài)分配
9.4DMA方式
9.4.1DMA概述
9.4.2DMA控制器
9.4.3DMA傳送方式
9.4.4DMA傳送過程
9.5總線
9.5.1總線的特性和性能指標(biāo)
9.5.2總線仲裁
9.5.3總線操作和定時
9.5.4典型總線標(biāo)準(zhǔn)
習(xí)題
附錄ARISCV指令系統(tǒng)
A.1RISCV概述
A.2RISCV指令系統(tǒng)的模塊化結(jié)構(gòu)
A.3RISCV的指令長度編碼
A.4基本整數(shù)指令集RV32I
A.4.1RV32I的寄存器模型
A.4.2RV32I的指令格式
A.4.3RV32I指令集詳解
A.5標(biāo)準(zhǔn)擴展指令集
A.5.1乘法/除法擴展指令集RV32M
A.5.2壓縮擴展指令集RV32C
A.6RISCV匯編語言程序設(shè)計
A.6.1RISCV的偽指令
A.6.2RISCV寄存器使用約定
A.6.3RISCV匯編語言程序設(shè)計實例
參考文獻(xiàn)