手把手教你RISC·VCPU上檢視原始碼討論檢視歷史
![]() |
《手把手教你RISC·VCPU上》,副標題:處理器設計,胡振波主編 芯來科技生態組 著,出版社: 人民郵電出版社。
人民郵電出版社,1953年10月成立,隸屬於中國工信出版傳媒集團,是工業和信息化部主管的大型專業出版社[1]。建社以來,人民郵電出版社圍繞「立足工信事業,面向現代社會,傳播科學知識,引領美好生活」的出版宗旨,已發展成為集圖書、期刊、音像電子及數字出版於一體的綜合性出版大社[2]。
內容簡介
本書系統地介紹了 CPU 設計技巧和新興開源RISC-V架構,內容翔實,涵蓋開源蜂鳥E203處理器各模塊的具體實現,以及可擴展協處理器的實現機制。為了讓讀者學以*用,本書還集成了大量的實例,用實例把各個模塊的實現方式貫穿起來。
本書適合從事CPU設計的工程師和技術愛好者閱讀。
目錄
第 **分 CPU與RISC-V綜述
第 *章 CPU之三生三世 2
- .* 眼看他起*樓,眼看他宴賓客,眼看他樓塌了—CPU眾生相 3
- .*.* ISA—CPU的靈魂 4
- .*.2 CISC架構與RISC架構 5
- .*.3 32位架構與64位架構 6
- .*.4 ISA眾生相 6
- .*.5 CPU的*域之分 **
- .2 ISA請扛起這口鍋—為什麼*產CPU尚未足夠成熟 *2
- .2.* MIPS系—龍芯和君正 *2
- .2.2 x86系—北大眾志、上海兆芯和天津海光 *3
- .2.3 Power系—中晟宏芯 *4
- .2.4 Alpha系—申威 *4
- .2.5 ARM系—飛騰、海思、展訊 *4
- .2.6 RISC-V系—平頭哥、芯來科技 *6
- .2.7 背鍋俠ISA *6
- .3 人生已如此艱難,你又何*拆穿—CPU從業者的*奈 *8
- .4 *敵者是多麼寂寞—ARM統治着的* *9
- .4.* *樂樂與眾樂樂—ARM公司的盈利模式 *9
- .4.2 小個子有大力量—*處*在的Cortex-M系列 22
- .4.3 移動*者—Cortex-A系列在手持設備*域的巨大成功 23
- .4.4 進擊的巨人—ARM進軍PC與服務器*域的雄心 25
- .4.5 ARM當前發展 26
- .5 東邊日出西邊雨,道是*晴卻有晴—RISC-V登場 26
- .5.* 緣起名校 26
- .5.2 興於開源 27
- .5.3 本土發展 29
- .6 舊時*謝堂前燕,飛入尋常*姓家—你也可以設計自己的處理器 30
第 2章 大道*簡—RISC-V架構之魂 3*
2.* 簡單*是美—RISC-V架構的設計理念 32
2.*.* *病*身輕—架構的篇幅 32
2.*.2 能屈能伸—模塊化的指令集 34
2.*.3 濃縮的*是*華—指令的數量 34
2.2 RISC-V架構簡介 35
2.2.* 模塊化的指令集 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.*0 簡潔的運算指令 40
2.2.** *雅的壓縮指令子集 4*
2.2.*2 *權模式 42
2.2.*3 CSR 42
2.2.*4 中斷和異常 42
2.2.*5 P擴展指令子集 43
2.2.*6 矢量指令子集 43
2.2.*7 自定義指令擴展 43
2.2.*8 比較 43
2.3 RISC-V軟件工具鏈 44
2.4 RISC-V和其他開放架構有何*同 47
2.4.* 平民英雄—OpenRISC 47
2.4.2 豪門顯貴—SPARC 48
2.4.3 身出*—MIPS 48
2.4.4 名校*生—RISC-V 49
第3章 亂花漸欲迷人眼—盤點RISC-V商業版本與開源版本 50
3.* 各商業版本與開源版本綜述 5*
3.*.* Rocket Core 5*
3.*.2 BOOM Core 53
3.*.3 Freedom E3*0 SoC 54
3.*.4 LowRISC SoC 54
3.*.5 PULPino Core與SoC 54
3.*.6 PicoRV32 Core 55
3.*.7 SCR* Core 56
3.*.8 ORCA Core 56
3.*.9 Andes Core 56
3.*.*0 Microsemi Core 56
3.*.** Codasip Core 57
3.*.*2 Nuclei Core 57
3.*.*3 蜂鳥E203處理器核與SoC 58
3.2 小結 59
第4章 開源RISC-V—蜂鳥E203處理器核與SoC 60
4.* 與眾*同的蜂鳥E203處理器 6*
4.2 蜂鳥E203處理器簡介—蜂鳥雖小,五臟俱* 62
4.3 蜂鳥E203處理器的性能指標 64
4.4 蜂鳥E203處理器的配套SoC 64
4.5 蜂鳥E203處理器的配置選項 66
第二*分 手把手教你使用Verilog設計CPU
第5章 先見森林,後觀樹木—蜂鳥E203處理器核設計總覽和*層 70
5.* 處理器硬件設計概述 7*
5.*.* 架構和微架構 7*
5.*.2 CPU、處理器、Core和處理器核 7*
5.*.3 處理器設計和驗證 7*
5.2 蜂鳥E203處理器核的設計理念 72
5.3 蜂鳥E203處理器核的RTL代碼風格 73
5.3.* 使用標準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.*0 小結 82
第6章 流水線*是流水賬—蜂鳥E203處理器核流水線 83
6.* 處理器流水線概述 84
6.*.* 從*的5級流水線說起 84
6.*.2 可否*要流水線—流水線和狀態機的關係 86
6.*.3 深處種菱淺種稻,*深*淺種荷花—流水線的深度 86
6.*.4 向上生長—越來越深的流水線 87
6.*.5 向下生長—越來越淺的流水線 88
6.2 處理器流水線中的亂序 88
6.3 處理器流水線中的反壓 88
6.4 處理器流水線中的衝突 89
6.4.* 流水線中的資源衝突 89
6.4.2 流水線中的數據衝突 90
6.5 蜂鳥E203處理器的流水線 9*
6.5.* 流水線總體結構 9*
6.5.2 流水線中的衝突 92
6.6 小結 92
第7章 萬事開頭難— *切從取指令開始 93
7.* 取指概述 94
7.*.* 取指*點 94
7.*.2 如何快速取指 95
7.*.3 如何處理地址*對齊的指令 96
7.*.4 如何處理分支指令 97
7.2 RISC-V架構*點對於取指的簡化 *02
7.2.* 規整的指令編碼格式 *02
7.2.2 指令長度指示碼放於低位 *02
7.2.3 簡單的分支跳轉指令 *03
7.2.4 沒有分支延遲槽指令 *04
7.2.5 提供明確的靜態分支預測依據 *05
7.2.6 提供明確的RAS依據 *05
7.3 蜂鳥E203處理器的取指實現 *06
7.3.* IFU總體設計思路 *06
7.3.2 簡單譯碼 *08
7.3.3 簡單BPU **0
7.3.4 PC生成 **4
7.3.5 訪問ITCM和BIU **6
7.3.6 ITCM *20
7.3.7 BIU *20
7.4 小結 *2*
第8章 *鼓作氣,執行力是關鍵—執行 *22
8.* 執行概述 *23
8.*.* 指令譯碼 *23
8.*.2 指令執行 *23
8.*.3 流水線的衝突 *24
8.*.4 指令的交付 *24
8.*.5 指令發射、派遣、執行、寫回的順序 *24
8.*.6 分支解析 *26
8.2 RISC-V架構的*點對於執行的簡化 *26
8.2.* 規整的指令編碼格式 *27
8.2.2 *雅的*6位指令 *27
8.2.3 *簡的指令個數 *27
8.2.4 整數指令的操作數個數是*或2 *27
8.3 蜂鳥E203處理器的執行實現 *27
8.3.* 執行指令列表 *28
8.3.2 EXU總體設計思路 *28
8.3.3 譯碼 *29
8.3.4 整數通用寄存器組 *35
8.3.5 CSR *38
8.3.6 指令發射、派遣 *39
8.3.7 流水線衝突、長指令和OITF *43
8.3.8 ALU *49
8.3.9 交付 *62
8.3.*0 寫回 *62
8.3.** 協處理器擴展 *62
8.4 小結 *63
第9章 善始者實繁,克*者蓋寡—交付 *64
9.* 處理器中指令的交付、取消、沖刷 *65
9.*.* 指令交付、取消、沖刷 *65
9.*.2 指令交付的常見實現策略 *66
9.2 RISC-V架構*點對於交付的簡化 *66
9.3 蜂鳥E203處理器中指令交付的硬件實現 *67
9.3.* 分支預測指令的處理 *68
9.3.2 中斷和異常的處理 *7*
9.3.3 多周期執行的指令的交付 *7*
9.4 小結 *72
第 *0章 讓子彈飛*會兒—寫回 *73
- 0.* 處理器的寫回 *74
- 0.*.* 處理器寫回功能簡介 *74
- 0.*.2 處理器常見寫回策略 *74
- 0.2 蜂鳥E203處理器的寫回硬件實現 *74
- 0.2.* 最*寫回仲裁 *75
- 0.2.2 OITF模塊和長指令寫回仲裁模塊 *76
- 0.3 小結 *79
第 **章 哈弗還是比亞迪—存儲器 *8*
- .* 存儲器概述 *82
- .*.* 誰說處理器*定要有緩存 *82
- .*.2 處理器*定要有存儲器 *83
- .*.3 ITCM和DTCM *85
- .2 RISC-V架構*點對於存儲器訪問指令的簡化 *86
- .2.* *支持小端格式 *86
- .2.2 *地址自增/自減模式 *86
- .2.3 **次讀多個數據和*次寫多個數據的指令 *86
- .3 RISC-V架構的存儲器訪問指令 *87
- .3.* 存儲器讀和寫指令 *87
- .3.2 fence指令和fence.i指令 *87
- .3.3 A擴展指令集 *87
- .4 蜂鳥E203處理器核的存儲器子系統硬件實現 *88
- .4.* 存儲器子系統總體設計思路 *88
- .4.2 AGU *88
- .4.3 LSU *93
- .4.4 ITCM和DTCM *95
- .4.5 A擴展指令集的硬件實現 *98
- .4.6 fence與fence.i指令的硬件實現 202
- .4.7 BIU 204
- .4.8 ECC 204
- .5 小結 204
第 *2章 黑盒子的窗口—總線接口單元 205
- 2.* 片上總線協議概述 206
- 2.*.* AXI 206
- 2.*.2 AHB 206
- 2.*.3 APB 207
- 2.*.4 TileLink 207
- 2.*.5 總結比較 207
- 2.2 自定義總線協議ICB 208
- 2.2.* ICB協議簡介 208
- 2.2.2 ICB協議信號 209
- 2.2.3 ICB協議的時序 209
- 2.3 ICB的硬件實現 2*4
- 2.3.* *主多從 2*4
- 2.3.2 多主*從 2*5
- 2.3.3 多主多從 2*6
- 2.4 蜂鳥E203處理器核BIU 2*7
- 2.4.* BIU簡介 2*7
- 2.4.2 BIU的微架構 2*8
- 2.4.3 BIU的源代碼 2*8
- 2.5 蜂鳥E203處理器SoC總線 2*9
- 2.5.* SoC總線簡介 2*9
- 2.5.2 SoC總線的微架構 220
- 2.5.3 SoC總線的源代碼 220
- 2.6 小結 22*
第 *3章 *得*說的故事—中斷和異常 222
- 3.* 中斷和異常概述 223
- 3.*.* 中斷概述 223
- 3.*.2 異常概述 224
- 3.*.3 廣義上的異常 224
- 3.2 RISC-V架構異常處理機制 226
- 3.2.* 進入異常 226
- 3.2.2 退出異常 229
- 3.2.3 異常服務程序 230
- 3.3 RISC-V架構中斷定義 23*
- 3.3.* 中斷類型 23*
- 3.3.2 中斷屏蔽 233
- 3.3.3 中斷等待 233
- 3.3.4 中斷*先級與仲裁 234
- 3.3.5 中斷嵌套 235
- 3.4 RISC-V架構中與中斷和異常相關的CSR 236
- 3.5 蜂鳥E203處理器中異常處理的硬件實現 236
- 3.5.* 蜂鳥E203處理器的異常和中斷實現要點 236
- 3.5.2 蜂鳥E203處理器支持的中斷和異常類型 237
- 3.5.3 蜂鳥E203處理器對mepc寄存器的處理 237
- 3.5.4 蜂鳥E203處理器的中斷接口 238
- 3.5.5 蜂鳥E203處理器CLINT微架構及源代碼分析 239
- 3.5.6 蜂鳥E203處理器PLIC微架構及源代碼分析 242
- 3.5.7 蜂鳥E203處理器中交付模塊對中斷和異常的處理 244
- 3.6 小結 248
第 *4章 最*起眼的其實是最難的—調試機制 249
- 4.* 調試機制概述 250
- 4.*.* 交互調試概述 250
- 4.*.2 跟蹤調試概述 252
- 4.2 RISC-V架構的調試機制 252
- 4.2.* 調試器軟件的實現 253
- 4.2.2 調試模式 253
- 4.2.3 調試指令 254
- 4.2.4 調試模式下的CSR 254
- 4.2.5 調試中斷 254
- 4.3 蜂鳥E203處理器中的調試機制 254
- 4.3.* 蜂鳥E203處理器中的交互式調試 254
- 4.3.2 DTM 255
- 4.3.3 硬件調試模塊 256
- 4.3.4 調試中斷處理 259
- 4.3.5 調試模式下CSR的實現 260
- 4.3.6 調試機制指令的實現 26*
- 4.4 小結 262
第 *5章 動如脫兔,靜若處子—低功耗的訣竅 263
- 5.* 處理器低功耗技術概述 264
- 5.*.* 軟件層面的低功耗 264
- 5.*.2 系統層面的低功耗 264
- 5.*.3 處理器層面的低功耗 265
- 5.*.4 模塊和單元層面的低功耗 265
- 5.*.5 寄存器層面的低功耗 266
- 5.*.6 鎖存器層面的低功耗 267
- 5.*.7 SRAM層面的低功耗 267
- 5.*.8 組合邏輯層面的低功耗 267
- 5.*.9 工藝層面的低功耗 268
- 5.2 RISC-V架構的低功耗機制 268
- 5.3 蜂鳥E203處理器低功耗機制的硬件實現 268
- 5.3.* 蜂鳥E203處理器在系統層面的低功耗 268
- 5.3.2 蜂鳥E203處理器層面的低功耗 270
- 5.3.3 蜂鳥E203處理器在單元層面的低功耗 272
- 5.3.4 蜂鳥E203處理器在寄存器層面的低功耗 272
- 5.3.5 蜂鳥E203處理器在鎖存器層面的低功耗 275
- 5.3.6 蜂鳥E203處理器在SRAM層面的低功耗 276
- 5.3.7 蜂鳥E203處理器在組合邏輯層面的低功耗 277
- 5.3.8 蜂鳥E203處理器在工藝層面的低功耗 278
- 5.4 小結 278
第 *6章 工欲善其事,*先利其器—RISC-V可擴展協處理器 279
- 6.* *域*定架構 280
- 6.2 RISC-V架構的可擴展性 28*
- 6.2.* RISC-V架構的預留指令編碼空間 28*
- 6.2.2 RISC-V架構的預定義指令 282
- 6.3 蜂鳥E203處理器的協處理器擴展機制—NICE 282
- 6.3.* NICE指令的編碼 282
- 6.3.2 NICE協處理器的接口信號 283
- 6.3.3 NICE協處理器的流水線接口 284
- 6.3.4 NICE協處理器的存儲器接口 285
- 6.3.5 NICE協處理器的接口時序 286
- 6.4 蜂鳥E203處理器的協處理器參考示例 290
- 6.4.* 示例協處理器的實現需求 290
- 6.4.2 示例協處理器的自定義指令 29*
- 6.4.3 示例協處理器的硬件實現 292
- 6.4.4 示例協處理器的軟件驅動 292
- 6.4.5 示例協處理器的性能分析 294
第三*分 開發實戰
第 *7章 先冒個煙—運行Verilog仿真測試 298
- 7.* E203開源項目的代碼層次結構 299
- 7.2 E203開源項目的測試用例 300
- 7.2.* riscv-tests自測試用例 300
- 7.2.2 編譯ISA自測試用例 30*
- 7.3 E203 開源項目的測試平台 304
- 7.4 在測試平台中運行測試用例 304
第 *8章 套上殼子上路—更多實踐 308
附錄A RISC-V架構的指令集 3**
附錄B RISC-V架構的CSR 34*
附錄C RISC-V架構的PLIC 35*
附錄D 存儲器模型背景 359
附錄E 存儲器原子操作指令背景 364
附錄F RISC-V指令編碼列表 367
附錄G RISC-V偽指令列表 374
參考文獻
- ↑ 我國出版社的等級劃分和分類標準,知網出書,2021-03-01
- ↑ 人民郵電出版社簡介,人民郵電出版社