手把手教你設計 CPU-RISC-V 處理器篇 手把手教你设计CPU-RISC-V处理器篇

胡振波

  • 出版商: 人民郵電出版社
  • 出版日期: 2018-05-01
  • 定價: $594
  • 售價: $594
  • 貴賓價: 9.5$564
  • 語言: 簡體中文
  • 頁數: 428
  • 裝訂: 平裝
  • ISBN: 7115480524
  • ISBN-13: 9787115480521
  • 銷售排行: 🥉 2018/9 簡體中文書 銷售排行 第 3 名

立即出貨

買這商品的人也買了...

相關活動主題

20181206 %e7%b0%a1%e9%ab%94%e6%9b%b8 s

商品描述

本書是一本介紹通用CPU設計的入門書,以通俗的語言系統介紹了CPU和RISC-V架構,力求為讀者揭開CPU設計的神秘面紗,打開電腦體系結構的大門。

本書共分為四部分。第一部分是CPU與RISC-V的綜述,幫助初學者對CPU和RISC-V快速地建立起認識。

第二部分講解如何使用Verilog設計CPU,使讀者掌握處理器核的設計精髓。

第三部分主要介紹蜂鳥E203配套的SoC和軟件平臺,使讀者實現蜂鳥E203 RISC-V處理器在FPGA原型平臺上的運行。第四部分是附錄,介紹了RISC-V指令集架構,輔以作者加入的背景知識解讀和註解,以便於讀者理解。

本書不僅適合CPU或芯片設計相關從業者閱讀使用,也適合作為大中專院校相關師生學習RISC-V處理器設計(使用Verilog語言)和CPU設計的指導用書。

作者簡介

胡振波,上海交通大學電子工程系本科、微電子學院碩士。擁有業界多年ASIC和CPU設計與驗證經驗,先後在Marvell任職ARM架構CPU設計高級工程師、在Synopsys任職研發經理、在比特大陸任職IC設計總監、在武漢聚芯微電子任職架構師,現致力於推動RISC-V架構在國內的傳播和發展。

目錄大綱

第一部分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的領域之分10 
1.2 ISA請扛起這口鍋——為什麼國產CPU尚未足夠成功12 
1.2.1 MIPS系——龍芯和君正12 
1.2.2 x86系——北大眾志、兆芯和海光13 
1.2.3 Power系——中晟宏芯13 
1.2.4 Alpha系——申威14 
1.2.5 ARM系——飛騰、華為海思、展訊和華芯通14 
1.2.6背鍋俠ISA 15 
1.3人生已是如此艱難,你又何必拆穿——CPU從業者的無奈17 
1.4無敵是多麼寂寞——ARM統治著的世界18 
1.4.1獨樂樂與眾樂樂——ARM公司的盈利模式18 
1.4.2小個子有大力量——無處不在的Cortex-M系列21 
1.4.3移動王者——Cortex-A系列在手持設備領域的巨大成功23 
1.4.4進擊的巨人——ARM進軍PC與服務器領域的雄心25 
1.5東邊 出西邊雨,道是無晴卻有晴——RISC-V登場25
1.6原來你是這樣的“薯片”——ARM的免費計劃28 
1.7舊時王謝堂前燕,飛入尋常百姓家——你也可以設計自己的處理器28 
第2章大道至簡——RISC- V架構之魂29 
2.1簡單就是美——RISC-V架構的設計哲學30 
2.1.1無病一身輕——架構的篇幅30 
2.1.2能屈能伸——模塊化的指令集32 
2.1.3濃縮的都是精華——指令的數量32 
2.2 RISC-V指令集架構簡介33 
2.2.1模塊化的指令子集33 
2.2.2可配置的通用寄存器組34 
2.2.3規整的指令編碼34 
2.2.4簡潔的存儲器訪問指令34 
2.2.5高效的分支跳轉指令35 
2.2.6簡潔的子程序調用36 
2.2.7無條件碼執行37 
2.2.8無分支延遲槽37 
2.2.9零開銷硬件循環38 
2.2.10簡潔的運算指令38 
2.2.11優雅的壓縮指令子集39 
2.2.12特權模式40 
2.2.13 CSR寄存器40 
2.2.14中斷和異常40 
2.2.15矢量指令子集40 
2.2.16自定制指令擴展41 
2.2 .17總結與比較41
2.3 RISC-V軟件工具鏈42 
2.4 RISC-V和其他開放架構有何不同44 
2.4.1平民英雄——OpenRISC 44 
2.4.2豪門顯貴——SPARC 44 
2.4.3名校優生——RISC-V 45 
第3章亂花漸欲迷人眼——盤點RISC-V商業版本與開源版本46 
3.1各商業版本與開源版本綜述47 
3.1.1 Rocket Core(開源) 47 
3.1.2 BOOM Core(開源) 49 
3.1.3 Freedom SoC(開源) 50 
3.1.4 LowRISC SoC(開源) 50 
3.1.5 PULPino Core and SoC(開源) 50 
3.1.6 PicoRV32 Core(開源) 51 
3.1.7 SCR1 Core(開源) 51 
3.1.8 ORCA Core(開源) 51 
3.1.9 Andes Core(商業IP) 52 
3.1.10 Microsemi Core(商業IP) 52 
3.1.11 Codasip Core(商業IP) 53 
3.1.12蜂鳥E200 Core與SoC(開源) 53 
3.2總結53 
第4章開源RISC-V——蜂鳥E200系列超低功耗Core與SoC 54 
4.1與眾不同的蜂鳥E200處理器55
4.2蜂鳥E200簡介——蜂鳥雖小,五臟俱全56 
4.3蜂鳥E200型號系列57 
4.4蜂鳥E200性能指標58 
4.5蜂鳥E200配套SoC 59 
4.6蜂鳥E200配置選項60 

第二部分手把手教你使用Verilog設計CPU 

第5章先見森林,後觀樹木——蜂鳥E200設計總覽和頂層介紹65 
5.1處理器硬件設計概述66 
5.1.1架構和微架構66 
5.1.2 CPU、處理器、Core和處理器核66 
5.1.3處理器設計和驗證的特點66 
5.2蜂鳥E200處理器核設計哲學67 
5.3蜂鳥E200處理器核RTL代碼風格介紹68 
5.3.1使用標準DFF模塊例化生成寄存器68 
5.3.2推薦使用assign語法替代if-else和case語法70 
5.3.3其他若干注意事項71 
5.3.4小結72 
5.4蜂鳥E200模塊層次劃分72 
5.5蜂鳥E200處理器核源代碼73 
5.6蜂鳥E200處理器核配置選項73 
5.7蜂鳥E200處理器核支持的RISC-V指令子集74 
5.8蜂鳥E200處理器流水線結構74 
5.9蜂鳥E200處理器核頂層接口介紹74 
5.10總結77
第6章流水線不是流水賬——蜂鳥E200流水線介紹78 
6.1處理器流水線概述79 
6.1.1從經典的五級流水線說起79 
6.1.2可否不要流水線——流水線和狀態機的關係81 
6.1.3深處種菱淺種稻,不深不淺種荷花——流水線的深度81 
6.1.4向上生長——越來越深的流水線82 
6.1.5向下生長——越來越淺的流水線83 
6.1. 6總結83 
6.2處理器流水線中的亂序83 
6.3處理器流水線中的反壓84 
6.4處理器流水線中的衝突84 
6.4.1流水線中的資源衝突84 
6.4.2流水線中的數據衝突85 
6.5蜂鳥E200處理器的流水線86 
6.5.1流水線總體結構86 
6.5.2流水線中的衝突87 
6.6總結87 
第7章萬事開頭難嗎——一切從取指令開始88 
7.1取指概述89 
7.1.1取指特點89 
7.1.2如何快速取指90 
7.1.3如何處理非對齊指令91 
7.1.4如何處理分支指令92 
7.2 RISC-V架構特點對於取指的簡化97 
7.2.1規整的指令編碼格式97 
7.2.2指令長度指示碼放 低位97
7.2.3簡單的分支跳轉指令98 
7.2.4沒有分支延遲槽指令100 
7.2.5提供明確的靜態分支預測依據100 
7.2.6提供明確的RAS依據101 
7.3蜂鳥E200處理器的取指實現101 
7.3 .1 IFU總體設計思路102 
7.3.2 Mini-Decode 103 
7.3.3 Simple-BPU分支預測105 
7.3.4 PC生成109 
7.3.5訪問ITCM和BIU 111 
7.3.6 ITCM 115 
7.3.7 BIU 116 
7.4總結116 
第8章一鼓作氣,執行力是關鍵——執行117 
8.1執行概述118 
8.1.1指令譯碼118 
8.1.2指令執行118 
8.1.3流水線的衝突119 
8.1.4指令的交付119 
8.1.5指令發射、派遣、執行、寫回的順序119 
8.1.6分支解析121 
8.1.7小結121 
8.2 RISC-V架構特點對於執行的簡化121 
8.2.1規整的指令編碼格式122 
8.2.2優雅的16位指令122 
8.2 .3精簡的指令個數122 
8.2.4整數指令都是兩操作數122
8.3蜂鳥E200處理器的執行實現123 
8.3.1執行指令列表123 
8.3.2 EXU總體設計思路123 
8.3.3譯碼124 
8.3.4整數通用寄存器組130 
8.3.5 CSR寄存器133 
8.3.6指令發射派遣134 
8.3.7流水線衝突、長指令和OITF 139 
8.3.8 ALU 145 
8.3.9高性能乘除法157 
8.3.10浮點單元158 
8.3.11交付159 
8.3.12寫回159 
8.3.13協處理器擴展160 
8.3.14小結160 
第9章善始者實繁,克終者蓋寡——交付161 
9.1處理器交付、取消、沖刷162 
9.1.1處理器交付、取消、沖刷簡介162 
9.1.2處理器交付常見實現策略163 
9.2 RISC-V架構特點對於交付的簡化164 
9.3蜂鳥E200處理器交付硬件實現164 
9.3.1分支預測指令的處理165 
9.3.2中斷和異常的處理168 
9.3.3多周期執行指令的交付169 
9.3.4小結169 
第10章讓子彈飛一會兒——寫回170 
10.1處理器的寫回171
10.1.1處理器寫回功能簡介171 
10.1.2處理器寫回常見策略171 
10.2蜂鳥E200處理器的寫回硬件實現171 
10.2.1最終寫回仲裁172 
10.2.2 OITF和長指令寫回仲裁174 
10.2.3小結177 
第11章哈弗還是比亞迪——存儲器架構178 
11.1存儲器架構概述179 
11.1.1誰說處理器一定要有緩存179 
11.1.2處理器一定要有存儲器180 
11.1.3 ITCM和DTCM 182 
11.2 RISC-V架構特點對於存儲器訪問指令的簡化183 
11.2.1僅支持小端格式183 
11.2.2無地址自增自減模式183 
11.2.3無“一次讀多個數據”和“一次寫多個數據”指令183 
11.3 RISC-V架構的存儲器相關指令184 
11.3.1 Load和Store指令184 
11.3.2 Fence指令184 
11.3.3 “A”擴展指令184 
11.4蜂鳥E200處理器存儲器子系統硬件實現185 
11.4. 1存儲器子系統總體設計思路185 
11.4.2 AGU 186 
11.4.3 LSU 190 
11.4.4 ITCM和DTCM 192
11.4.5 “A”擴展指令處理195 
11.4.6 Fence與Fence.I指令處理200 
11.4.7 BIU 202 
11.4.8 ECC 202 
11.4.9小結202 
第12章黑盒子的窗口——總線接口單元BIU 203 
12.1片上總線協議概述204 
12.1.1 AXI 204 
12.1.2 AHB 204 
12.1.3 APB 205 
12.1.4 TileLink 205 
12.1.5總結比較205 
12.2自定義總線協議ICB 206 
12.2.1 ICB總線協議簡介206 
12.2.2 ICB總線協議信號207 
12.2.3 ICB總線協議時序207 
12.3 ICB總線的硬件實現210 
12.3.1一主多從210 
12.3.2多主一從211 
12.3.3多主多從212 
12.4蜂鳥E200處理器核BIU 212 
12.4.1 BIU簡介212 
12.4.2 BIU微架構213 
12.4.3 BIU源碼分析214 
12.5蜂鳥E200處理器SoC總線214 
12.5.1 SoC總線簡介215
12.5.2 SoC總線微架構215 
12.5.3 SoC總線源碼分析216 
12.6總結216 
第13章不得不說的故事——中斷和異常217 
13.1中斷和異常概述218 
13.1.1中斷概述218 
13.1.2異常概述219 
13.1.3廣義上的異常219 
13.2 RISC-V架構異常處理機制221 
13.2.1進入異常221 
13.2.2退出異常224 
13.2.3異常服務程序225 
13.3 RISC-V架構中斷定義226 
13.3.1中斷類型226 
13.3.2中斷屏蔽228 
13.3.3中斷等待229 
13.3.4中斷優先級與仲裁230 
13.3.5中斷嵌套230 
13.3.6總結比較231 
13.4 RISC-V架構異常相關CSR寄存器232 
13.5蜂鳥E200異常處理的硬件實現232 
13.5.1蜂鳥E200處理器的異常和中斷實現要點232 
13.5.2蜂鳥E200處理器的異常類型233 
13.5.3蜂鳥E200處理器對於mepc的處理234 
13.5.4蜂鳥E200處理器的中斷接口234
13.5.5蜂鳥E200處理器CLINT微架構及源碼分析235 
13.5.6蜂鳥E200處理器PLIC微架構及源碼分析238 
13.5.7蜂鳥E200處理器交付模塊對中斷和異常的處理242 
13.5.8小結245 
第14章最不起眼的,其實是最難的——調試機制246 
14.1調試機制概述247 
14.1.1交互調試概述247 
14.1.2跟踪調試概述249 
14.2 RISC-V架構的調試機制249 
14.2.1調試器軟件的實現250 
14.2.2調試模式250 
14.2.3調試指令251 
14.2.4調試機制CSR 251 
14.2.5調試中斷251 
14.3蜂鳥E200調試機制的硬件實現251 
14.3.1蜂鳥E200交互式調試概述251 
14.3. 2 DTM模塊253 
14.3.3硬件調試模塊253 
14.3.4調試中斷處理257 
14.3.5調試機制CSR寄存器的實現258 
14.3.6調試機制指令的實現258 
14.3.7小結259 
第15章動如脫兔,靜若處子——低功耗的訣竅260 
15.1處理器低功耗技術概述261
15.1.1軟件層面低功耗261 
15.1.2系統層面低功耗261 
15.1.3處理器層面低功耗262 
15.1.4單元層面低功耗262 
15.1.5寄存器層面低功耗263 
15.1.6鎖存器層面低功耗264 
15.1.7 SRAM層面低功耗264 
15.1.8組合邏輯層面低功耗264 
15.1.9工藝層面低功耗265 
15.2 RISC-V架構的低功耗機制265 
15.3蜂鳥E200低功耗機制的硬件實現265 
15.3.1蜂鳥E200系統層面低功耗265 
15.3.2蜂鳥E200處理器層面低功耗267 
15.3.3蜂鳥E200單元層面低功耗269 
15.3.4蜂鳥E200寄存器層面低功耗269 
15.3.5蜂鳥E200鎖存器層面低功耗272 
15.3.6蜂鳥E200 SRAM層面低功耗273 
15.3.7蜂鳥E200組合邏輯層面低功耗274 
15.3.8蜂鳥E200工藝層面低功耗275 
15.4總結275 
第16章工欲善其事,必先利其器——RISC-V可擴展協處理器276 
16.1專用領域架構DSA 277 
16.2 RISC-V架構的可擴展性278
16.2.1 RISC-V的預留指令編碼空間278 
16.2.2 RISC-V的預定義的Custom指令279 
16.3蜂鳥E200的協處理器接口EAI 279 
16.3.1 EAI指令的編碼279 
16.3.2 EAI接口信號280 
16.3.3 EAI流水線接口281 
16.3.4 EAI存儲器接口282 
16.3.5 EAI接口時序283 
16.4蜂鳥E200的協處理器參考示例286 
16.4.1示例協處理器需求286 
16.4.2示例協處理器指令287 
16.4.3示例協處理器實現288 
16.4.4示例協處理器性能289 
16.4.5示例協處理器代碼290 

第三部分使用Verilog進行仿真和在FPGA SoC原型上運行軟件

第17章冒個煙先— —運行Verilog仿真測試292 
17.1 E200開源項目的代碼層次結構293 
17.2 E200開源項目的測試用例294 
17.2.1 riscv-tests自測試用例294 
17.2.2編譯ISA自測試用例295 
17.3 E200開源項目的測試平台( TestBench) 298 
17.4在Verilog TestBench中運行測試用例299
第18章套上殼子上路——實現SoC和FPGA原型302 
18.1 Freedom E310 SoC簡介303 
18.2 HBird-E200-SoC簡介304 
18.2.1 HBird-E200-SoC組成結構304 
18.2.2 HBird-E200-SoC代碼結構309 
18.3 HBird-E200-SoC FPGA原型平台311 
18.3.1 FPGA開發板311 
18.3.2生成mcs文件燒寫FPGA 314 
18.3.3 JTAG調試器317 
18.3.4 FPGA原型平台DIY總結320 
18.4蜂鳥E200專用FPGA開發板320 
第19章畫龍點睛——運行和調試軟件示例321 
19.1 Freedom-E-SDK平台簡介322 
19.2 SIRV-E-SDK平台簡介323 
19.2.1 SIRV-E-SDK簡介323 
19.2.2 SIRV-E- SDK代碼結構324 
19.3使用SIRV-E-SDK運行示例程序325 
19.4使用GDB和OpenOCD調試示例程序328 
19.5 Windows圖形化IDE開發工具331 
第20章是騾子是馬?拉出來遛遛——運行跑分程序332 
20.1跑分程序簡介333 
20.2 Dhrystone簡介333
20.3運行Dhrystone Benchmark 335 
20.4 CoreMark簡介337 
20.5運行CoreMark Benchmark 338 
20.6總結與比較340 

附錄部分RISC-V架構詳述

附錄A RISC-V架構指令集介紹342 
附錄B RISC-V架構CSR寄存器介紹374 
附錄C RISC -V架構的PLIC介紹384 
附錄D存儲器模型背景介紹392 
附錄E存儲器原子操作指令背景介紹397 
附錄F RISC-V指令編碼列表400 
附錄G RISC-V偽指令列表404