CPU 製作入門:基於 RISC-V 和 Chisel

(日)西山悠太朗等著 譯 蔣萌

  • 出版商: 科學出版
  • 出版日期: 2023-12-01
  • 定價: $588
  • 售價: 8.5$500 (限時優惠至 2024-04-28)
  • 語言: 簡體中文
  • 頁數: 318
  • 裝訂: 平裝
  • ISBN: 7030769651
  • ISBN-13: 9787030769657
  • 相關分類: RISC-V
  • 立即出貨

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

商品描述

《CPU製作入門:基於RISC-V和Chisel》基於RISC-V和Chisel講解自訂CPU的實作。
《CPU製作入門:基於RISC-V和Chisel》分為5個部分,立足於CPU、記憶體、電腦架構等基礎知識,
逐步帶領讀者實現簡單的加減法、分支、比較等基礎指令,理解流水線對於CPU高速化的重要意義及實現,
*後應用向量擴展語言實現自訂CPU。
要提醒的是,《CPU製作入門:基於RISC-V和Chisel》所指的「CPU製作」僅限於軟體上的設計和模擬,不涉及FPGA上的實作。

目錄大綱

目錄
第Ⅰ部分CPU製作的基礎知識
第1章什麼是CPU 2
1.1 電路能夠描述邏輯的理由3
1.1.1 轉換為數位訊號3
1.1.2 描述邏輯運算的電路4
1.1.3 可以描述任何真值表的基本邏輯電路7
1.2 為何能用基本邏輯電路實現CPU 9
1.2.1 時序邏輯電路:鎖存器10
1.2.2 有限狀態機11
1.2.3 透過時脈訊號同步13
1.3 CPU的製造流程17
第2章電腦架構19
2.1 記憶體20
2.1.1 暫存器21
2.1.2 主記憶體21
2.2 電腦的基本處理流程22
2.2.1 取指令(IF) 23
2.2.2 指令譯碼(ID) 23
2.2.3 運算元(27)
2. .4 存取(MEM) 27
CPU製作入門:基於RISC-V和Chisel
2.2.5 回寫27
第3章Chisel基礎30
3.1 什麼是Chisel 31
3.2 什麼是物件導向32
3.2.1 類別和實例32
3.2. 2 繼承33
3.3 Scala的基本語法34
3.3.1 變數var與val 35
3.3.2 方法:def() 35
3.3.3 集合:Seq 35
3.3.4 for表達式36
3.3.5 物件37
3.3.6 命名空間40
3.4 Chisel的基本語法42
3.4.1 位元值的基本類型42
3.4.2 運算子44
3.4.3 Module類別47
3.4.4 IO物件48
3.4.5 Flipped物件49
3.4.6 訊號連接5050
3.4.7 組合邏輯電路:Wire/WireDefault 51
3.4.8 時序邏輯電路:WireInit 51
3.4.9 用Mem定義暫存器檔案52
3.4.10 控制電路52
3.4.11 位元作56
3.4.12 用printf57
第一個簡單的CPU實作
第4章環境架構60
4.1 下載chisel-template 60
4.2 用Docker架構運行環境61
4.2.1 安裝Docker 61
4.2.2 建立Dockerfile 61
4.2.3 建立鏡像62
4.2.4 建立Dockerfile
4.3 指令文件63
4.3.1 Instructions.scala 64
4.3.2 Consts.scala 66
4.4 第Ⅱ部分要實現的指令和Chisel完整代碼69
第5章取指令的實現76
5.1 Chisel代碼概要76
5.2 Chisel的實現77
第6章以ChiselTest進行取指令測試80
6.1 ChiselTest的實作80
6.2 測試流程81
6.3 建立Chisel測試程式碼81
6.3.1 特徵:trait 82
6.3.2 peek() 方法83
6.3.3 clock.step() 方法
建立器 6.用HEX檔83
6.5 用printf輸出調試訊號85
6.6 執行測試85
6.7 Docker容器的commit 86
第7章指令譯碼器的實作87
7.1 Chisel的實作87
7.1.1 暫存器編號的譯碼87
7.1.2 暫存器資料的讀取87
7.1.3 調試訊號的輸出88
7.2 運行測試88
第8章LW指令的實現90
8.1 RISC-V的LW指令定義90
8.2 Chisel的實現91
8.2.1 指令位模式的定義92 
8.2.2 Chisel的實現91 8.2.1 指令位模式的定義92
8.2.2 CPU與記憶體之間的連接埠定義93
8.2.3 CPU內部的處理實作94
8.2.4 記憶體的資料讀取實作95
8.3 執行測試96
8.3.1 建立指令檔案lw.hex96
8.3.2 記憶體載入檔案名稱的修改97
8.3.3 測試結束條件的修改97
8.3.4 新增調試訊號97
8.3.5 運行測試98
第9章SW指令的實現99
9.1 RISC-V的SW指令定義99
9.2 Chisel的實現100
9.2.1 指令位模式的定義101
9.2.2 CPU和存儲器間的端口定義101
9.2. 3 CPU內部的處理實作101
9.2.4 記憶體的資料寫入實作102
9.3 執行測試102
9.3.1 建立指令檔sw.hex 102
9.3.2 記憶體載入檔名的修改104
9.3.3 測試結束條件的修改104
9.3.4 新增調試訊號104
9.3.5 運行測試104
第10章加減法指令的實現106
10.1 RISC-V的加減法指令定義106
10.2 Chisel的實現107
10.2.1 指令位模式的定義107
10.2.2加減法結果的連結(EX階段) 107
10.2.3 加減法結果的暫存器回寫(WB階段) 108
第11章邏輯運算的實作109
11.1 RISC-V的邏輯運算指令定義109
11.2 Chisel的實作110
11.2 .1 指令位模式的定義110
11.2.2 邏輯運算結果的連結(EX階段) 111
11.2.3 邏輯運算結果的暫存器回寫(WB階段) 111
第12章譯碼器的強化112
12.1 ALU寫(WB12 12.112
12.1 .1 譯碼器的強化(ID階段) 112
12.1.2 利用譯碼訊號簡化ALU(EX階段) 113
12.2 MEM譯碼114
12.2.1 譯碼器的強化(ID階段) 114
12.2.2 指令譯碼的非要化(MEM階段) 115
12.3 WB譯碼115
12.3.1 譯碼器強化(ID階段) 116
12.3.2 指令譯碼的非要化(WB階段) 116
第13章移位運算的實現118
13.1 RISC-V的移位運算指令定義118
13.2 Chisel的實現119
13.2.1 指令位模式的定義119
13.2.2 譯碼訊號的產生(ID階段) 120
13.2.3 移位運算結果的連接(EX階段) 120
第14章比較運算的實現121
14.1 RISC-V的比較運算指令定義121
14.2 Chisel的實現122
14.2.1 指令位模式的定義122
14.2.2 譯碼訊號的產生(ID階段) 122
14.23 比較運算結果的連結(EX階段) 123
第15章分支指令的實現124
15.1 RISC-V的分支指令定義124
15.2 Chisel的實現126
15.2.1 指令位模式的定義126
15.2.2 PC的控制(IF階段) 126
15.2 .3 立即數與譯碼訊號的產生(ID階段) 127
15.2.4 分支可否、跳轉目標位址的計算(EX階段) 128
第16章跳轉指令的實現129
16.1 RISC-V的跳轉指令定義129
16.2 Chisel的實作131
16.2.1 指令位模式的定義131
16.2.2 譯碼與作數資料的讀取(ID階段) 131
16.2.3 新增JALR運算(EX階段) 132
16.2.4 PC的控制(IF階段) 132
16.2.5 ra的回寫(WB階段) 133
第17章立即數加載指令的實現134
17.1 RISC-V的立即數加載指令定義134
17.2 Chisel的實現135
17.2.1 指令位模式的定義135
17.2 .2 譯碼與作數資料的讀取(ID階段) 136
第18章CSR指令的實現138
18.1 RISC-V的CSR指令定義138
18.2 Chisel的實現141
18.2.1 指令位模式的定義141
18.2.2 立即數與譯碼訊號的產生(ID階段) 141
18.2.3 op1_data的連接(EX階段) 142
18.2.4 CSR的讀寫(MEM階段) 142
18.2.5 CSR讀取資料的暫存器回寫(WB階段) 143
第19章ECALL的實現144
19.1 RISC-V的ECALL指令定義144
19.2 Chisel的實現145
19.2.1 指令位模式的定義145
CPU製作入門:基於RISC-V和Chisel
19.2.2 PC的控制(IF階段) 145
19.2.3 譯碼訊號的產生(ID階段) 146
19.2.4 CSR寫入(MEM階段) 146
第20章用riscv-tests進行測試147
20.1 riscv-tests的建置147
20.2 將ELF檔案轉換為BIN檔案148
20.3 BIN檔案的十六進位化149
20.4 riscv-tests的路徑條件150
20.5 riscv-tests的執行153
20.5.1 Chisel的實作
153
20.5 .批次測試腳本156
20.6.1 HEX檔的批次產生:tohex.sh 156
20.6.2 riscv-tests的批次運作:riscv-tests.sh 156
第21章試執行C程式159
21.1 建立C程式159 
21.2 編譯161C程式159 
21.1 建立C程式159
21.2 編譯161程式121 .連結163
21.4 機器語言的十六進位化和DUMP檔的創建164
21.5 運行測試165
第Ⅲ部分流水線的實現
第22章什麼是流水線168
22.1 流水線的意義168 22.2 創建CPU流水線 168
22.2創建CPU流水線的Chisel代碼170
第23章管線暫存器的設定179
23.1 暫存器的定義179
23.2 IF階段181
23.2.1 取指令與PC控制181
23.2.2 IF/ID暫存器的寫入181
23.3 ID階段暫存器編號的譯碼和暫存器資料的讀取182
23.3.2 立即數的譯碼182
23.3.3 csignals的譯碼182
23.3.4 作數資料的選擇183
23.3.5 產生csr_addr 183
23.3.6 ID/EX的暫存器的寫入183
23.4 EX階段184
23.4.1 至alu_out的訊號連接184
23.4.2 分支指令的處理185
23.4.3 EX/MEM暫存器的寫入185