手把手教你RISC-V CPU(上) 處理器設計( 簡體 字) | |
作者:胡振波 主編 芯來科技生態組 | 類別:1. -> 電腦組織與體系結構 -> 單晶片 -> RISC-V |
出版社:人民郵電出版社 | 3dWoo書號: 55277 詢問書籍請說出此書號! 缺書 NT售價: 550 元 |
出版日:10/1/2021 | |
頁數:376 | |
光碟數:0 | |
站長推薦: | |
印刷:黑白印刷 | 語系: ( 簡體 字 ) |
ISBN:9787115568007 | 【不接受訂購】 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證, 繁體書的下載亦請直接連絡出版社) | |
第 一部分 CPU與RISC-V綜述
第 1章 CPU之三生三世 2 1.1 眼看他起高樓,眼看他宴賓客,眼看他樓塌了—CPU眾生相 3 1.1.1 ISA—CPU的靈魂 4 1.1.2 CISC架構與RISC架構 5 1.1.3 32位架構與64位架構 6 1.1.4 ISA眾生相 6 1.1.5 CPU的領域之分 11 1.2 ISA請扛起這口鍋—為什么國產CPU尚未足夠成熟 12 1.2.1 MIPS系—龍芯和君正 12 1.2.2 x86系—北大眾志、上海兆芯和天津海光 13 1.2.3 Power系—中晟宏芯 14 1.2.4 Alpha系—申威 14 1.2.5 ARM系—飛騰、海思、展訊 14 1.2.6 RISC-V系—平頭哥、芯來科技 16 1.2.7 背鍋俠ISA 16 1.3 人生已如此艱難,你又何必拆穿—CPU從業者的無奈 18 1.4 無敵者是多么寂寞—ARM統治著的世界 19 1.4.1 獨樂樂與眾樂樂—ARM公司的盈利模式 19 1.4.2 小個子有大力量—無處不在的Cortex-M系列 22 1.4.3 移動王者—Cortex-A系列在手持設備領域的巨大成功 23 1.4.4 進擊的巨人—ARM進軍PC與服務器領域的雄心 25 1.4.5 ARM當前發展 26 1.5 東邊日出西邊雨,道是無晴卻有晴—RISC-V登場 26 1.5.1 緣起名校 26 1.5.2 興于開源 27 1.5.3 本土發展 29 1.6 舊時王謝堂前燕,飛入尋常百姓家—你也可以設計自己的處理器 30 第 2章 大道至簡—RISC-V架構之魂 31 2.1 簡單就是美—RISC-V架構的設計理念 32 2.1.1 無病一身輕—架構的篇幅 32 2.1.2 能屈能伸—模塊化的指令集 34 2.1.3 濃縮的都是精華—指令的數量 34 2.2 RISC-V架構簡介 35 2.2.1 模塊化的指令集 35 2.2.2 可配置的通用寄存器組 36 2.2.3 規整的指令編碼 36 2.2.4 簡潔的存儲器訪問指令 37 2.2.5 高效的分支跳轉指令 38 2.2.6 簡潔的子程序調用 38 2.2.7 無條件碼執行 39 2.2.8 無分支延遲槽 40 2.2.9 零開銷硬件循環指令 40 2.2.10 簡潔的運算指令 40 2.2.11 優雅的壓縮指令子集 41 2.2.12 特權模式 42 2.2.13 CSR 42 2.2.14 中斷和異常 42 2.2.15 P擴展指令子集 43 2.2.16 矢量指令子集 43 2.2.17 自定義指令擴展 43 2.2.18 比較 43 2.3 RISC-V軟件工具鏈 44 2.4 RISC-V和其他開放架構有何不同 47 2.4.1 平民英雄—OpenRISC 47 2.4.2 豪門顯貴—SPARC 48 2.4.3 身出名門—MIPS 48 2.4.4 名校優生—RISC-V 49 第3章 亂花漸欲迷人眼—盤點RISC-V商業版本與開源版本 50 3.1 各商業版本與開源版本綜述 51 3.1.1 Rocket Core 51 3.1.2 BOOM Core 53 3.1.3 Freedom E310 SoC 54 3.1.4 LowRISC SoC 54 3.1.5 PULPino Core與SoC 54 3.1.6 PicoRV32 Core 55 3.1.7 SCR1 Core 56 3.1.8 ORCA Core 56 3.1.9 Andes Core 56 3.1.10 Microsemi Core 56 3.1.11 Codasip Core 57 3.1.12 Nuclei Core 57 3.1.13 蜂鳥E203處理器核與SoC 58 3.2 小結 59 第4章 開源RISC-V—蜂鳥E203處理器核與SoC 60 4.1 與眾不同的蜂鳥E203處理器 61 4.2 蜂鳥E203處理器簡介—蜂鳥雖小,五臟俱全 62 4.3 蜂鳥E203處理器的性能指標 64 4.4 蜂鳥E203處理器的配套SoC 64 4.5 蜂鳥E203處理器的配置選項 66 第二部分 手把手教你使用Verilog設計CPU 第5章 先見森林,后觀樹木—蜂鳥E203處理器核設計總覽和頂層 70 5.1 處理器硬件設計概述 71 5.1.1 架構和微架構 71 5.1.2 CPU、處理器、Core和處理器核 71 5.1.3 處理器設計和驗證 71 5.2 蜂鳥E203處理器核的設計理念 72 5.3 蜂鳥E203處理器核的RTL代碼風格 73 5.3.1 使用標準DFF模塊例化生成寄存器 73 5.3.2 推薦使用assign語法替代if-else和case語法 75 5.3.3 其他若干注意事項 77 5.4 蜂鳥E203模塊層次劃分 77 5.5 蜂鳥E203處理器核的源代碼 78 5.6 蜂鳥E203處理器核的配置選項 78 5.7 蜂鳥E203處理器核支持的RISC-V指令子集 79 5.8 蜂鳥E203處理器核的流水線結構 79 5.9 蜂鳥E203處理器核的頂層接口 79 5.10 小結 82 第6章 流水線不是流水賬—蜂鳥E203處理器核流水線 83 6.1 處理器流水線概述 84 6.1.1 從經典的5級流水線說起 84 6.1.2 可否不要流水線—流水線和狀態機的關系 86 6.1.3 深處種菱淺種稻,不深不淺種荷花—流水線的深度 86 6.1.4 向上生長—越來越深的流水線 87 6.1.5 向下生長—越來越淺的流水線 88 6.2 處理器流水線中的亂序 88 6.3 處理器流水線中的反壓 88 6.4 處理器流水線中的沖突 89 6.4.1 流水線中的資源沖突 89 6.4.2 流水線中的數據沖突 90 6.5 蜂鳥E203處理器的流水線 91 6.5.1 流水線總體結構 91 6.5.2 流水線中的沖突 92 6.6 小結 92 第7章 萬事開頭難— 一切從取指令開始 93 7.1 取指概述 94 7.1.1 取指特點 94 7.1.2 如何快速取指 95 7.1.3 如何處理地址不對齊的指令 96 7.1.4 如何處理分支指令 97 7.2 RISC-V架構特點對于取指的簡化 102 7.2.1 規整的指令編碼格式 102 7.2.2 指令長度指示碼放于低位 102 7.2.3 簡單的分支跳轉指令 103 7.2.4 沒有分支延遲槽指令 104 7.2.5 提供明確的靜態分支預測依據 105 7.2.6 提供明確的RAS依據 105 7.3 蜂鳥E203處理器的取指實現 106 7.3.1 IFU總體設計思路 106 7.3.2 簡單譯碼 108 7.3.3 簡單BPU 110 7.3.4 PC生成 114 7.3.5 訪問ITCM和BIU 116 7.3.6 ITCM 120 7.3.7 BIU 120 7.4 小結 121 第8章 一鼓作氣,執行力是關鍵—執行 122 8.1 執行概述 123 8.1.1 指令譯碼 123 8.1.2 指令執行 123 8.1.3 流水線的沖突 124 8.1.4 指令的交付 124 8.1.5 指令發射、派遣、執行、寫回的順序 124 8.1.6 分支解析 126 8.2 RISC-V架構的特點對于執行的簡化 126 8.2.1 規整的指令編碼格式 127 8.2.2 優雅的16位指令 127 8.2.3 精簡的指令個數 127 8.2.4 整數指令的操作數個數是1或2 127 8.3 蜂鳥E203處理器的執行實現 127 8.3.1 執行指令列表 128 8.3.2 EXU總體設計思路 128 8.3.3 譯碼 129 8.3.4 整數通用寄存器組 135 8.3.5 CSR 138 8.3.6 指令發射、派遣 139 8.3.7 流水線沖突、長指令和OITF 143 8.3.8 ALU 149 8.3.9 交付 162 8.3.10 寫回 162 8.3.11 協處理器擴展 162 8.4 小結 163 第9章 善始者實繁,克終者蓋寡—交付 164 9.1 處理器中指令的交付、取消、沖刷 165 9.1.1 指令交付、取消、沖刷 165 9.1.2 指令交付的常見實現策略 166 9.2 RISC-V架構特點對于交付的簡化 166 9.3 蜂鳥E203處理器中指令交付的硬件實現 167 9.3.1 分支預測指令的處理 168 9.3.2 中斷和異常的處理 171 9.3.3 多周期執行的指令的交付 171 9.4 小結 172 第 10章 讓子彈飛一會兒—寫回 173 10.1 處理器的寫回 174 10.1.1 處理器寫回功能簡介 174 10.1.2 處理器常見寫回策略 174 10.2 蜂鳥E203處理器的寫回硬件實現 174 10.2.1 最終寫回仲裁 175 10.2.2 OITF模塊和長指令寫回仲裁模塊 176 10.3 小結 179 第 11章 哈弗還是比亞迪—存儲器 181 11.1 存儲器概述 182 11.1.1 誰說處理器一定要有緩存 182 11.1.2 處理器一定要有存儲器 183 11.1.3 ITCM和DTCM 185 11.2 RISC-V架構特點對于存儲器訪問指令的簡化 186 11.2.1 僅支持小端格式 186 11.2.2 無地址自增/自減模式 186 11.2.3 無一次讀多個數據和一次寫多個數據的指令 186 11.3 RISC-V架構的存儲器訪問指令 187 11.3.1 存儲器讀和寫指令 187 11.3.2 fence指令和fence.i指令 187 11.3.3 A擴展指令集 187 11.4 蜂鳥E203處理器核的存儲器子系統硬件實現 188 11.4.1 存儲器子系統總體設計思路 188 11.4.2 AGU 188 11.4.3 LSU 193 11.4.4 ITCM和DTCM 195 11.4.5 A擴展指令集的硬件實現 198 11.4.6 fence與fence.i指令的硬件實現 202 11.4.7 BIU 204 11.4.8 ECC 204 11.5 小結 204 第 12章 黑盒子的窗口—總線接口單元 205 12.1 片上總線協議概述 206 12.1.1 AXI 206 12.1.2 AHB 206 12.1.3 APB 207 12.1.4 TileLink 207 12.1.5 總結比較 207 12.2 自定義總線協議ICB 208 12.2.1 ICB協議簡介 208 12.2.2 ICB協議信號 209 12.2.3 ICB協議的時序 209 12.3 ICB的硬件實現 214 12.3.1 一主多從 214 12.3.2 多主一從 215 12.3.3 多主多從 216 12.4 蜂鳥E203處理器核BIU 217 12.4.1 BIU簡介 217 12.4.2 BIU的微架構 218 12.4.3 BIU的源代碼 218 12.5 蜂鳥E203處理器SoC總線 219 12.5.1 SoC總線簡介 219 12.5.2 SoC總線的微架構 220 12.5.3 SoC總線的源代碼 220 12.6 小結 221 第 13章 不得不說的故事—中斷和異常 222 13.1 中斷和異常概述 223 13.1.1 中斷概述 223 13.1.2 異常概述 224 13.1.3 廣義上的異常 224 13.2 RISC-V架構異常處理機制 226 13.2.1 進入異常 226 13.2.2 退出異常 229 13.2.3 異常服務程序 230 13.3 RISC-V架構中斷定義 231 13.3.1 中斷類型 231 13.3.2 中斷屏蔽 233 13.3.3 中斷等待 233 13.3.4 中斷優先級與仲裁 234 13.3.5 中斷嵌套 235 13.4 RISC-V架構中與中斷和異常相關的CSR 236 13.5 蜂鳥E203處理器中異常處理的硬件實現 236 13.5.1 蜂鳥E203處理器的異常和中斷實現要點 236 13.5.2 蜂鳥E203處理器支持的中斷和異常類型 237 13.5.3 蜂鳥E203處理器對mepc寄存器的處理 237 13.5.4 蜂鳥E203處理器的中斷接口 238 13.5.5 蜂鳥E203處理器CLINT微架構及源代碼分析 239 13.5.6 蜂鳥E203處理器PLIC微架構及源代碼分析 242 13.5.7 蜂鳥E203處理器中交付模塊對中斷和異常的處理 244 13.6 小結 248 第 14章 最不起眼的其實是最難的—調試機制 249 14.1 調試機制概述 250 14.1.1 交互調試概述 250 14.1.2 跟蹤調試概述 252 14.2 RISC-V架構的調試機制 252 14.2.1 調試器軟件的實現 253 14.2.2 調試模式 253 14.2.3 調試指令 254 14.2.4 調試模式下的CSR 254 14.2.5 調試中斷 254 14.3 蜂鳥E203處理器中的調試機制 254 14.3.1 蜂鳥E203處理器中的交互式調試 254 14.3.2 DTM 255 14.3.3 硬件調試模塊 256 14.3.4 調試中斷處理 259 14.3.5 調試模式下CSR的實現 260 14.3.6 調試機制指令的實現 261 14.4 小結 262 第 15章 動如脫兔,靜若處子—低功耗的訣竅 263 15.1 處理器低功耗技術概述 264 15.1.1 軟件層面的低功耗 264 15.1.2 系統層面的低功耗 264 15.1.3 處理器層面的低功耗 265 15.1.4 模塊和單元層面的低功耗 265 15.1.5 寄存器層面的低功耗 266 15.1.6 鎖存器層面的低功耗 267 15.1.7 SRAM層面的低功耗 267 15.1.8 組合邏輯層面的低功耗 267 15.1.9 工藝層面的低功耗 268 15.2 RISC-V架構的低功耗機制 268 15.3 蜂鳥E203處理器低功耗機制的硬件實現 268 15.3.1 蜂鳥E203處理器在系統層面的低功耗 268 15.3.2 蜂鳥E203處理器層面的低功耗 270 15.3.3 蜂鳥E203處理器在單元層面的低功耗 272 15.3.4 蜂鳥E203處理器在寄存器層面的低功耗 272 15.3.5 蜂鳥E203處理器在鎖存器層面的低功耗 275 15.3.6 蜂鳥E203處理器在SRAM層面的低功耗 276 15.3.7 蜂鳥E203處理器在組合邏輯層面的低功耗 277 15.3.8 蜂鳥E203處理器在工藝層面的低功耗 278 15.4 小結 278 第 16章 工欲善其事,必先利其器—RISC-V可擴展協處理器 279 16.1 領域特定架構 280 16.2 RISC-V架構的可擴展性 281 16.2.1 RISC-V架構的預留指令編碼空間 281 16.2.2 RISC-V架構的預定義指令 282 16.3 蜂鳥E203處理器的協處理器擴展機制—NICE 282 16.3.1 NICE指令的編碼 282 16.3.2 NICE協處理器的接口信號 283 16.3.3 NICE協處理器的流水線接口 284 16.3.4 NICE協處理器的存儲器接口 285 16.3.5 NICE協處理器的接口時序 286 16.4 蜂鳥E203處理器的協處理器參考示例 290 16.4.1 示例協處理器的實現需求 290 16.4.2 示例協處理器的自定義指令 291 16.4.3 示例協處理器的硬件實現 292 16.4.4 示例協處理器的軟件驅動 292 16.4.5 示例協處理器的性能分析 294 第三部分 開發實戰 第 17章 先冒個煙—運行Verilog仿真測試 298 17.1 E203開源項目的代碼層次結構 299 17.2 E203開源項目的測試用例 300 17.2.1 riscv-tests自測試用例 300 17.2.2 編譯ISA自測試用例 301 17.3 E203 開源項目的測試平臺 304 17.4 在測試平臺中運行測試用例 304 第 18章 套上殼子上路—更多實踐 308 附錄A RISC-V架構的指令集 311 附錄B RISC-V架構的CSR 341 附錄C RISC-V架構的PLIC 351 附錄D 存儲器模型背景 359 附錄E 存儲器原子操作指令背景 364 附錄F RISC-V指令編碼列表 367 附錄G RISC-V偽指令列表 374 本書系統地介紹了 CPU 設計技巧和新興開源RISC-V架構,內容翔實,涵蓋開源蜂鳥E203處理器各模塊的具體實現,以及可擴展協處理器的實現機制。為了讓讀者學以致用,本書還集成了大量的實例,用實例把各個模塊的實現方式貫穿起來。
本書適合從事CPU設計的工程師和技術愛好者閱讀。 |