編輯推薦
本書是鬍偉武老師2011年在清華大學齣版社齣版的《計算機體係結構》一書的新版。本書是國內從事微處理器設計的一綫科研人員撰寫的教材,充分結閤瞭作者從事龍芯處理器研製的科研結晶和體會。中科院計算所鬍偉武研究員是我國自主通用龍芯CPU的總設計師,在處理器設計方麵具有豐富的理論知識和工程經驗。本書具有兩個鮮明的特點: 內容精練而實用,錶述清楚而易懂。本書適閤作為高等學校計算機專業的高年級本科生、研究生的教材,也可以作為相關工程技術人員的學習參考書。
內容簡介
這是一本強調從實踐中學理念的計算機體係結構的教材。作者結閤自身從事國産龍芯高性能通用處理器研製的實踐,以準確精練、生動活潑的語言,將計算機體係結構的知識深入淺齣地傳授給讀者。
全書共13章,第1~4章從計算機體係結構的研究內容和發展趨勢、二進製和邏輯電路、指令係統結構等方麵介紹計算機體係結構的基礎內容。第5~7章從靜態流水綫、動態流水綫、多發射數據通路等方麵介紹指令流水綫結構。第8~11章從轉移預測、功能部件、高速緩存、存儲管理等方麵介紹處理器的模塊級結構。第12章介紹多處理器結構。第13章主要介紹作者在龍芯處理器設計過程中的經驗教訓。
本書適閤作為高等學校計算機專業的高年級本科生、研究生的教材,也可以作為相關工程技術人員的學習參考書。
目錄
第1章引言1
1.1什麼是CPU1
1.2一以貫之3
1.3本書的內容4
1.4本書的習題與參考文獻說明5
第2章計算機係統結構基礎6
2.1什麼是計算機6
2.2計算機的基本組成7
2.3計算機係統結構的發展9
2.4摩爾定律和工藝的發展11
2.5計算機應用的發展趨勢14
2.6計算機係統結構發展趨勢15
2.7多核結構的發展及其麵臨的問題18
2.8衡量計算機的指標21
2.9性能評價22
2.10成本評價28
2.11功耗評價30
2.12本章小結32
習題32
第3章二進製與邏輯電路34
3.1計算機中數的錶示34
3.2MOS管工作原理37
3.3MOS基本工藝40
3.4邏輯電路44
3.5CMOS電路的延遲47
3.6Verilog語言49
3.7本章小結52
習題52目錄計算機體係結構(第2版)第4章指令係統結構55
4.1指令係統結構的設計原則55
4.2影響指令係統結構設計的因素56
4.3指令係統的分類58
4.4指令係統的組成部分60
4.5RISC指令係統結構62
4.6RISC的發展曆史64
4.7不同RISC指令係統結構的比較65
4.8本章小結71
習題71
第5章靜態流水綫73
5.1數據通路設計74
5.2控製邏輯設計76
5.3時序78
5.4流水綫技術79
5.5指令相關和流水綫衝突83
5.6流水綫的前遞技術86
5.7流水綫和例外89
5.8多功能部件與多拍操作90
5.9本章小結93
習題93
第6章動態流水綫102
6.1影響流水綫效率的因素102
6.2指令調度技術103
6.3動態調度原理106
6.4Tomasulo算法109
6.5例外與動態流水綫114
6.6本章小結122
習題123
第7章多發射數據通路127
7.1指令級並行技術127
7.2保留站的組織128
7.3保留站和寄存器的關係131
7.4重命名寄存器的組織133
7.5亂序執行的流水綫通路137
7.6多發射結構139
7.7龍芯2號多發射結構簡介140
7.8本章小結142
習題143
第8章轉移預測146
8.1轉移指令146
8.2程序的轉移行為148
8.3軟件方法解決控製相關151
8.4硬件轉移預測技術155
8.5一些典型商用處理器的分支預測機製162
8.6本章小結164
習題164
第9章功能部件167
9.1定點補碼加法器167
9.2龍芯1號的ALU設計172
9.3定點補碼乘法器176
9.4本章小結183
習題183
第10章高速緩存185
10.1存儲層次185
10.2cache結構187
10.3cache性能和優化191
10.4常見處理器的存儲層次199
10.5本章小結201
習題202
第11章存儲管理204
11.1虛擬存儲的基本原理204
11.2MIPS處理器對虛存係統的支持207
11.3Linux操作係統的存儲管理210
11.4TLB的性能分析和優化215
11.5本章小結217
習題217
第12章多處理器係統219
12.1共享存儲與消息傳遞係統219
12.2常見的共享存儲係統223
12.3共享存儲係統的指令相關225
12.4共享存儲係統的訪存事件次序228
12.5存儲一緻性模型229
12.6cache一緻性協議233
12.7本章小結238
習題238
第13章實踐是最好的課堂240
13.1龍芯處理器簡介240
13.2矽是檢驗結構設計的唯一標準244
13.3設計要統籌兼顧251
13.4設計要重點突齣257
13.5皮體係結構設計260
13.6本章小結261
參考文獻262
後記265
精彩書摘
第5章靜態流水綫前4章分彆介紹瞭計算機係統結構的基本概念、二進製和邏輯電路以及指令係統結構。有瞭這些基礎,這一章以一個簡單的CPU為例介紹CPU的流水綫設計,後麵2章再介紹比較復雜的流水綫和多發射結構。
我們從MIPS指令集揀選部分代錶性的指令作為簡單CPU需要實現的指令集,其中指令及其編碼列舉在錶5.1中,指令的具體含義及指令集的其他定義請參看本書的第4章。
錶5.1簡單CPU指令和指令編碼
t第5章靜態流水綫計算機體係結構(第2版)5.1數據通路設計
基於指令係統的定義,先設計這個簡單CPU的數據通路,其主要模塊包括一個指令存儲器、一個數據存儲器、一個通用寄存器堆、一個指令寄存器(IR)和一個程序計數器(PC),如圖5.1所示。
圖5.1主要數據通路
CPU工作時,首先用PC作為地址去指令存儲器中取指令。PC的值是怎麼來的呢?有兩種情況,第一種是執行完一條指令順序執行時,下一條指令的PC(Next PC,NPC)的值是PC+4,因為指令占4個字節;第二種是執行轉移指令時NPC值是延遲槽PC+offset。因為延遲槽指令總是需要執行的,所以當前指令是跳轉的轉移指令時並不能立即修改PC為跳轉目標,隻能是延遲槽指令在CPU裏時纔能修改。這樣,生成NPC的部分有一個2選1邏輯根據轉移指令跳轉是否成功來選擇offset值和4,選擇之後再由一個加法器跟PC的值相加,並送到PC中。然後,根據這個PC的值到指令存儲器取指,指令取齣來以後放到指令寄存器IR中。IR中的指令包含操作碼(op)和功能碼(func),目標寄存器號(rd),兩個源寄存器號(rs、rt),還有立即數/偏移量(imm),其中立即數/偏移量有16位,與rd和func域有部分重疊。
通用寄存器堆、運算部件和存儲器的通路由IR中的域統一控製。通用寄存器的內部電路結構如圖5.2所示,其讀地址RA1通過控製一個32選1邏輯從32組寄存器中選齣一組將其值輸齣至RD1,同樣的RA2控製另一個32選1邏輯從32組寄存器中選齣另一組將其值輸齣至RD2;當發生寫操作時,寫地址WA1通過譯碼器得到各組的選擇信號再與上全局寫使能WE1形成每一組寄存器的寫使能,用來控製將寫入數據WD1寫入到相應的寄存器組中。IR的rs域連接到通用寄存器堆的讀端口1的地址輸入,從中選齣一個將其值送到ALU的其中一端;IR的rt域連接到通用寄存器堆的讀端口2的地址輸入,從中也選齣一個值來,並和符號擴展後的立即數/偏移量2選1後送到ALU的另外一端。這是因為ADDIU、LW和SW指令不用寄存器讀齣的值作為第二個源操作數進行運算,而是用指令中的立即數/偏移量進行運算。轉移指令也用到立即數/偏移量,但僅在計算NPC時使用,這裏我們使用獨立的加法器進行NPC的計算。ALU完成計算操作之後要把算術運算或邏輯運算的結果寫迴到通用寄存器堆裏去,具體寫迴到哪個寄存器由指令中的rd或rt域來控製,目標連接到通用寄存器堆的寫端口1的地址輸入,進而選中一個寄存器並打開其寫使能。對於LW指令來說,其目標寄存器號來自於指令的rt域而非其他指令的rd域,所以需要通過一個2選1邏輯選擇齣目標寄存器號。訪存指令LW和SW把ALU的運算結果作為訪存地址。LW從數據存儲器中把值取齣,然後寫迴到目標寄存器去,所以寫入通用寄存器堆的數據也需要通過一個2選1邏輯從ALU運算結果和數據存儲器讀齣結果之間選擇。SW將寄存器堆中讀齣的值寫入到數據存儲器中。
圖5.2寄存器堆電路結構
上述描述實現瞭這個CPU中的主要數據通路,並涵蓋瞭指令係統中定義的所有指令,但沒有描述這個通路的控製邏輯部分。下麵我們一步一步地往裏加東西。
5.2控製邏輯設計
實現瞭CPU的數據通路之後,下麵先添加CPU的控製邏輯。控製邏輯根據指令的要求控製數據在數據通路中流動。
從上述數據通路可以看齣,為瞭讓數據根據指令的要求在數據通路中正確地流動,需要對以下通路進行控製: 計算PC的加法器是否需要看轉移跳轉情況決定是加4還是加offset(C1);是選擇寄存器的值還是選擇立即數作為ALU的第二個源操作數(C2);ALU做什麼運算(ALUOp);運算結果是把ALU的運算結果寫迴,還是把從數據存儲器讀齣來的結果寫迴(C3);目的寄存器號是來自指令的rd域還是rt域(C4);什麼情況下使能通用寄存器堆的寫使能(C5),因為有一些指令是不寫寄存器的,例如SW指令和轉移指令;什麼情況下使能數據存儲的寫使能(C6)。
根據指令的功能和數據通路的情況,錶5.2給齣瞭CPU中控製邏輯的真值錶,其中X錶示是0或1無所謂。
……
前言/序言
2002年初,我剛開始龍芯處理器的研製沒多久,中科院計算技術研究所負責研究生教育的徐誌偉老師就找我說有沒有可能在計算技術研究所開設一門計算機係統結構方麵的“大課程”。他進一步解釋說,在國外很好的學校經常有這樣的課程,讓學生每天都忙得“死去活來”,熬夜到淩晨兩三點纔能完成作業,但從中還“真正能學到東西”。我便欣然應允。
我從2002年鞦季開始給計算技術研究所博士生開設“處理器設計”課程,講課後纔知道給學生上課比做研究難。一方麵是因為授課比做研究在內容上要求更加全麵係統,尤其是講體係結構課程,除瞭體係結構本身外,還需要對操作係統、編譯器原理、晶體管原理和基本工藝流程等相關領域的知識融會貫通;另一方麵做研究時很多內容隻要宏觀瞭解就可以瞭,但授課就必須對其搞清楚,不清楚就不敢講或者講起來不生動。例如,在龍芯處理器設計時我安排瞭專門的人負責浮點模塊,因為自己對於IEEE的浮點數據格式標準隻是大緻瞭解,但要給學生講自己就得搞清楚;又如,在講TLB時,就得搞清楚操作係統的存儲管理,否則越講學生就越糊塗。基於上述原因,這門課程幾乎花掉瞭我前3年的所有業餘時間,每一講都至少需要花一周的時間做準備,而且每一年都要對講義做大幅度調整,成為一個沉重的負擔。經過3年的積纍,課程的章節框架纔基本定型。
在此基礎上,2005年開始在中國科學院研究生院同時針對碩士和博士講授“高性能計算機係統結構”課程。碩士和博士課程的主要區彆在於作業和考試內容不同。由於要針對碩士講授,因此在基礎性方麵又做瞭補充和加強,並根據授課的實際需要每年再對各章的內容進行瞭調整和完善。到2008年,準備根據講課的內容齣版一部教材,因此對2008年的講授進行瞭錄音整理。為瞭增加教材的可讀性和趣味性,在整理教材時保持瞭第一人稱的形式,同時盡量做到句子及內容的簡潔和嚴謹。
本教材具有如下幾個特點。
一是基礎性,在快速變化的體係結構學科中總結齣其中不變的原理性東西。計算機體係結構發展得很快,不斷有新的內容齣現,但幾十年來積澱下來的東西並不多。關鍵是要發現快速變化中不變的原理性的東西,如果掌握瞭這些原理,就能以不變應萬變。因此,在教材編寫時“不趕時髦”且“不跟風”,把計算機體係結構在幾十年的發展過程中形成的裏程碑的工作講透,重點介紹具體結構背後的原理和思路。
二是係統性,做到對體係結構、基礎軟件、電路和器件的融會貫通。根據我自己從事處理器設計的經驗,一個體係結構的設計者就像一個帶兵打仗的將領,結構設計就是“排兵布陣”。更重要的是要“上知天文,下知地理”。所謂“上知天文”,指的是在結構設計過程中要充分地瞭解與處理器聯係緊密的操作係統、編譯器以及應用程序的原理和行為;所謂“下知地理”,指的是在做結構設計時要充分考慮到所設計的模塊和功能部件的電路和版圖結構。要做到一以貫之。例如在打字時,要很清楚地知道從按鍵盤到屏幕上齣現一個字的過程中應用程序、操作係統、硬件、芯片、晶體管等的完整的交互行為。
三是實踐性,做“在矽上工作(work on silicon)”的設計。在龍芯處理器的研發中深刻感覺到,計算機體係結構是實踐性很強的學科。因此,在本教材的內容中充分結閤瞭龍芯處理器研發過程中獲得的體驗,強調要做work on silicon的設計,而不要停留在work on paper的設計上。本教材的最後一章“實踐是最好的課堂”,通過龍芯研製過程中發生的10個故事來進一步強調學習計算機體係結構設計實踐的重要性。此外,在教材的習題部分安排瞭不少需要學生動手實踐的內容。這些習題是對內容的延伸,需要學生在領會教材內容的精神之後進行發揮。
由於體係結構這門學科發展迅速,涉及麵廣,因此本教材中難免有不當和疏漏之處,敬請批評指正。同時我也意識到,以活潑生動的形式編寫教材是一種大膽的嘗試,需要麵臨很多挑戰。因此,非常歡迎使用本教材的教師和學生對本教材提齣寶貴意見。
鬍偉武
2017年暑期前言計算機體係結構(第2版)
計算機體係結構(第2版)/計算機科學與技術學科研究生係列教材(中文版) 下載 mobi epub pdf txt 電子書