計算機體系結(jié)構(gòu)與SoC設(shè)計(附微課視頻)
本書是一本以產(chǎn)教融合思想為指引,面向處理器與系統(tǒng)芯片設(shè)計人才培養(yǎng)的新型教材,主要分為基礎(chǔ)和實驗兩部分。基礎(chǔ)部分側(cè)重于基于開源指令架構(gòu)RISC-V并結(jié)合阿里平頭哥半導(dǎo)體公司的玄鐵C910等先進(jìn)處理器案例講授計算機體系結(jié)構(gòu)的基本原理。RISC-V架構(gòu)的開放性與良好生態(tài)為理論知識的教學(xué)提供了更好的藍(lán)本,通過剖析業(yè)界先進(jìn)的RISC-V處理器也使理論知識能夠更好地聯(lián)系具體應(yīng)用。實驗部分詳細(xì)介紹基于RISC-V開源項目開發(fā)的系列實驗,包括編譯與仿真工具鏈實驗、體系結(jié)構(gòu)探索實驗、SoC設(shè)計實驗等內(nèi)容,充分利用了平頭哥XuanTie處理器、Wujian100 SoC平臺等工業(yè)級的開發(fā)資源,使學(xué)生可以切實感受體系結(jié)構(gòu)知識的實踐運用和完整的軟硬件開發(fā)流程。
1.融入主流應(yīng)用,系統(tǒng)性凝練知識體系。
2.結(jié)合企業(yè)實際,注重培養(yǎng)工程師實踐能力。
3.依托前沿場景,聚焦業(yè)務(wù)邏輯,實現(xiàn)應(yīng)用開發(fā)。
這本教材,把最新的RISC-V技術(shù)發(fā)展動態(tài)融合進(jìn)理論授課中,引入真實的工業(yè)級處理器案例和軟硬件開發(fā)流程,讓學(xué)生緊跟產(chǎn)業(yè)前沿,并通過相關(guān)的實驗教學(xué)內(nèi)容構(gòu)建理論聯(lián)系實際的學(xué)習(xí)過程。
韓軍,復(fù)旦大學(xué)教授,中國計算機學(xué)會計算機工程與工藝專業(yè)委員會常務(wù)委員及教育工作組組長、復(fù)旦大學(xué)集成芯片與系統(tǒng)全國重點實驗室 IP 與芯片架構(gòu)創(chuàng)新中心主任、國家重點研發(fā)計劃“光電子與微電子器件及集成”重點專項“高能效人機交互芯片技術(shù)”項目首席科學(xué)家、國家自然科學(xué)基金重點項目負(fù)責(zé)人。以第一作者和通信作者在國內(nèi)外重要的學(xué)術(shù)期刊與會議上發(fā)表論文 90 篇,獲 30 項國家發(fā)明專利。擔(dān)任《電子學(xué)報》、Microelectronics Journal 和Chinese Journal of Electronics編委會委員。長期致力于開展處理器架構(gòu)與系統(tǒng)芯片的產(chǎn)學(xué)合作。
第 一章 計算機體系結(jié)構(gòu)簡介 1
1.1 計算機的過去,現(xiàn)在和未來 1
1.1.1 計算機的歷史回顧 1
1.1.2 計算機的發(fā)展現(xiàn)狀 4
1.1.3 計算機的未來趨勢 8
1.2 計算機體系結(jié)構(gòu)的定義 13
1.2.1 ISA 14
1.2.2 微架構(gòu) 16
1.2.3 硬件實現(xiàn) 18
1.3 主流ISA介紹 18
1.3.1 ISA的誕生 19
1.3.2 CISC架構(gòu)指令集 19
1.3.3 RISC架構(gòu)指令集 21
1.4 案例學(xué)習(xí):平頭哥C910處理器介紹 27
1.4.1 平頭哥公司介紹 27
1.4.2 玄鐵C910簡介 28
1.4.3 玄鐵C910的處理器微架構(gòu) 28
1.4.4 玄鐵C910的工作模式 32
1.5 本章小結(jié) 32
第二章 指令集基本原理 34
2.1 指令集的發(fā)展歷史與分類 34
2.1.1 CISC和RISC之爭 35
2.1.2 指令集的分類 36
2.2 指令尋址模式 37
2.2.1 指令的組成 38
2.2.2 常見的指令尋址模式 38
2.3 數(shù)據(jù)類型與指令操作 39
2.3.1 RISC-V指令集的數(shù)據(jù)類型 39
2.3.2 指令操作分類 40
2.3.3 控制流指令 42
2.4 指令集編碼 42
2.4.1 可變長度編碼與固定長度編碼 43
2.4.2 操作碼的編碼 44
2.4.3 RISC-V的指令編碼 45
2.5 特權(quán)等級與CSR 46
2.5.1 特權(quán)等級 47
2.5.2 RISC-V指令集的CSR 48
2.6 指令集的ABI規(guī)定 49
2.7 案例學(xué)習(xí):平頭哥C910處理器的自定義指令 50
2.7.1 Cache指令子集 51
2.7.2 多核同步指令子集 51
2.7.3 算術(shù)運算指令子集 52
2.7.4 位操作指令子集 52
2.7.5 存儲指令子集 53
2.8 本章小結(jié) 53
第三章 處理器流水線結(jié)構(gòu) 55
3.1 實現(xiàn)RISC指令集的典型硬件結(jié)構(gòu) 55
3.1.1 微架構(gòu)與指令集的關(guān)系 55
3.1.2 RV32I指令集的數(shù)據(jù)通路 56
3.2 基礎(chǔ)流水線 60
3.2.1 流水線的基本概念 60
3.2.2 基礎(chǔ)流水線的性能分析 64
3.3 流水線沖突 66
3.3.1結(jié)構(gòu)沖突(structural hazard) 66
3.3.2控制沖突(control hazard) 66
3.3.3數(shù)據(jù)沖突(data hazard) 67
3.4 前饋 69
3.5 亂序執(zhí)行和超標(biāo)量流水線 72
3.5.1 基礎(chǔ)流水線的性能瓶頸 72
3.5.2 多發(fā)射(multiple issue)技術(shù)與超標(biāo)量(superscalar)技術(shù) 73
3.5.3 亂序執(zhí)行與動態(tài)調(diào)度 74
3.5.4 重排序緩沖區(qū)(reorder buffer,ROB) 77
3.5.5 寄存器重命名和Tomasulo算法 80
3.6 分支預(yù)測 85
3.6.1 靜態(tài)預(yù)測 85
3.6.2 局部預(yù)測器 86
3.6.3 相關(guān)預(yù)測器 90
3.6.4 預(yù)測跳轉(zhuǎn)地址 91
3.6.5 指令復(fù)用 94
3.6.6 預(yù)測的代價 95
3.6.7 BOOM中的分支預(yù)測器 96
3.7 指令級并行的過去與未來 102
3.8 案例學(xué)習(xí):平頭哥C910處理器的指令級并行 104
3.9 本章小結(jié) 105
第四章 計算機存儲系統(tǒng) 107
4.1 半導(dǎo)體存儲技術(shù) 107
4.1.1 SRAM 108
4.1.2 DRAM 108
4.1.3 flash 109
4.1.4 RRAM 111
4.1.5存儲技術(shù)在計算機中的應(yīng)用 111
4.2 虛擬存儲(virtual memory) 112
4.2.1 虛擬存儲的工作原理 112
4.2.2 保護(hù)進(jìn)程 114
4.2.3 頁式虛擬存儲的可能結(jié)構(gòu) 115
4.3 處理器與內(nèi)存的速度差距:內(nèi)存墻 117
4.4 緩存 118
4.4.1 緩存的概念 118
4.4.2 緩存的基本性質(zhì) 119
4.5 緩存結(jié)構(gòu)示例 124
4.6 緩存的性能和基本優(yōu)化手段 124
4.6.1 增加緩存容量,以降低缺失率 125
4.6.2 增加路數(shù),以降低缺失率 125
4.6.3 增加塊粒度,以降低缺失率 126
4.6.4 緩存讀優(yōu)先于緩存寫,以降低缺失懲罰 126
4.6.5 多級緩存,以降低缺失懲罰 126
4.6.6 地址翻譯和緩存索引并行,以減少命中時間 127
4.7 多核處理器中的緩存一致性 128
4.7.1 緩存一致性協(xié)議的分類和比較 129
4.7.2 MSI一致性協(xié)議 131
4.8 案例學(xué)習(xí):平頭哥C910處理器的存儲系統(tǒng) 133
4.8.1 平頭哥玄鐵C910的緩存層次 134
4.8.2 平頭哥玄鐵C910緩存優(yōu)化手段 136
4.8.3 平頭哥玄鐵C910的虛擬內(nèi)存系統(tǒng) 137
4.9 本章小結(jié) 139
第五章 計算機I/O原理 140
5.1 I/O概述 140
5.1.1 I/O設(shè)備 141
5.1.2 I/O接口和I/O總線 142
5.2 I/O設(shè)備與主機間的通信 145
5.2.1 處理器查詢方式 145
5.2.2 中斷方式 147
5.2.3 DMA方式 148
5.3 常見的I/O總線協(xié)議 151
5.3.1 PCI,PCI-X,PCI-E 151
5.3.2 SCSI,SAS,iSCSI 152
5.3.3 ATA,SATA 153
5.4 磁盤的基本原理 154
5.4.1 磁盤的經(jīng)典結(jié)構(gòu) 154
5.4.2 磁盤的演化 155
5.4.3 磁盤陣列 157
5.5 排隊論簡介 163
5.5.1 隊列系統(tǒng)的簡單抽象 163
5.5.2 隊列系統(tǒng)的表示——Kendall表示法 164
5.5.3 Little定理 165
5.5.4 用排隊論評估簡單的I/O系統(tǒng) 165
5.6 案例學(xué)習(xí):wujian100的USI模塊 167
5.6.1 UART 169
5.6.2 SPI 170
5.6.3 I2C 172
5.7 本章小結(jié) 173
第六章 SoC系統(tǒng)設(shè)計 175
6.1 SoC概述 175
6.1.1 SoC簡介 175
6.1.2 SoC的基本組成 176
6.1.3 SoC的優(yōu)勢 178
6.1.4 SoC面臨的發(fā)展挑戰(zhàn) 180
6.2 系統(tǒng)總線 181
6.2.1 總線概述 181
6.2.2 AMBA總線 183
6.3 SoC軟硬件協(xié)同開發(fā) 189
6.3.1 SoC的軟件環(huán)境 189
6.3.2 SoC的軟硬件協(xié)同設(shè)計 190
6.4 案例學(xué)習(xí):wujian100 SoC平臺 195
6.5 本章小結(jié) 198
第七章 嵌入式操作系統(tǒng) 200
7.1 操作系統(tǒng)簡介 200
7.1.1 操作系統(tǒng)的基本概念 200
7.1.2 操作系統(tǒng)的發(fā)展歷史 201
7.1.3 嵌入式操作系統(tǒng)的主要特點 203
7.2 進(jìn)程與保護(hù) 204
7.2.1 進(jìn)程的基本概念 204
7.2.2 進(jìn)程保護(hù) 207
7.3 進(jìn)程調(diào)度 209
7.3.1 單處理器進(jìn)程調(diào)度 210
7.3.2 實時調(diào)度 213
7.4 文件管理 215
7.4.1 文件系統(tǒng) 215
7.4.2 目錄 217
7.4.3 文件 219
7.5 案例學(xué)習(xí):在RISC-V處理器上運行Linux系統(tǒng) 220
7.5.1 GNU和LLVM項目 220
7.5.2 準(zhǔn)備交叉編譯環(huán)境 222
7.5.3 編譯內(nèi)核 223
7.5.4 根文件系統(tǒng)和引導(dǎo)程序 224
7.6 本章小結(jié) 226
第八章 體系結(jié)構(gòu)仿真器實驗 227
8.1 RISC-V交叉編譯和仿真環(huán)境的安裝與配置 227
8.1.1 實驗?zāi)康?227
8.1.2 實驗介紹 227
8.1.3 實驗內(nèi)容 229
8.2 QEMU運行裸機程序與Linux系統(tǒng)并調(diào)試 234
8.2.1 實驗?zāi)康?234
8.2.2 實驗介紹 234
8.2.3 實驗內(nèi)容 236
8.3 RISC-V匯編程序編程練習(xí) 247
8.3.1 實驗?zāi)康?247
8.3.2 實驗介紹 247
8.3.3 實驗內(nèi)容 250
8.4 QEMU上運行YOLO算法 254
8.4.1 實驗?zāi)康?254
8.4.2 實驗介紹 254
8.4.3 實驗內(nèi)容 259
8.5 本章小結(jié) 264
第九章 RTL級的SoC平臺仿真實驗 265
9.1 SMART平臺基礎(chǔ)操作實驗 265
9.1.1 實驗?zāi)康?265
9.1.2 實驗介紹 265
9.1.3 實驗內(nèi)容 268
9.2 緩存操作實驗 270
9.2.1 實驗?zāi)康?270
9.2.2 實驗介紹 270
9.2.3 實驗內(nèi)容 271
9.3 分支預(yù)測實驗 275
9.3.1 實驗?zāi)康?275
9.3.2 實驗介紹 275
9.3.3 實驗內(nèi)容 276
9.4 YOLO綜合仿真實驗 278
9.4.1 實驗?zāi)康?278
9.4.2 實驗介紹 278
9.4.3 實驗內(nèi)容 281
9.5 本章小結(jié) 285
第十章 基于FPGA的SoC板級測試實驗 286
10.1 wujian100平臺介紹和FPGA測試 286
10.1.1 實驗?zāi)康?286
10.1.2 實驗介紹 286
10.1.3 實驗內(nèi)容 288
10.2 語音識別電子系統(tǒng)綜合設(shè)計 295
10.2.1 實驗?zāi)康?295
10.2.2 實驗介紹 295
10.2.3 實驗內(nèi)容 301
10.3 本章小結(jié) 303