RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗

羅秋明、劉剛

  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-1
  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-2
  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-3
  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-4
  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-5
  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-6
  • RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-7
RISC-V處理器設計——riscv-mini的Chisel源碼分析與實驗-preview-1

相關主題

商品描述

首先簡單介紹Chisel數字系統設計的入門基礎知識;然後介紹RISC-V處理器ISA架構;接著對riscv-mini這一款RISC-V處理器的架構進行簡單分析,詳細分析其Chisel設計源碼和細節;最後給出相應的RISC-V 5級流水線設計的由淺入深的系列實驗,同時給出實驗的參考答案代碼。 與傳統的計算機組成原理或計算機系統結構實驗不同,這裏以Chisel而不是傳統老舊的Verilog或VHDL為設計語言,能夠在更高抽象層次和更靈活的方式進行處理器設計。與使用VHDL或者Chisel語言設計後僅作仿真的實驗亦不相同,我們更進一步將處理器核用FPGA實現,因此還包括了外設和存儲接口等技術,涉及到了簡單的SoC設計,並且能以可以運行程序的硬件芯片呈現出來。可以說是把國科大“一生一芯”的內容簡化後,落到普通高校本科生的可接受的程度。 讀者對象為計算機相關專業的教師、學生和科研人員,需要具備基本的計算機基礎知識、簡單的編程能力,並希望學習處理器設計入門知識。

作者簡介

羅秋明,深圳大學計算機與軟件學院副教授、碩士生導師。主講課程:計算機體系結構、操作系統。研究方向:高性能計算。近年參與基於龍芯多核處理器的普及型高性能計算機KD-60、KD-90、SD-1、SD-2和SD-30的研制,獲教育部科技進步二等獎。著《操作系統原型-xv6分析與實驗》、《OpenMP編譯原理及實現技術》、《Linux技術內幕》、《操作系統之編程觀察》《和Linux GNU C程序觀察》《操作系統原型——xv6分析與實驗》,譯《Intel Parallel studio 環境下的並行程序設計》。 近期研究數據流計算系統,涉及數據流處理器架構、操作系統和DFC數據流語言及其運行環境。

目錄大綱

目錄

配套資源第一篇RISCV基礎

第1章引言3

1.1RISCV指令集架構3

1.2Chisel硬件設計語言4

1.3目標讀者5

1.3.1讀者的學習動機5

1.3.2讀者所需的背景5

1.3.3讀者將獲得的成長5

1.4小結6

第2章RISCV指令與匯編7

2.1RISCV ISA7

2.1.1內存與寄存器7

2.1.2指令集9

2.1.3陷阱(中斷和異常)機制11

2.1.4處理器運行級/特權級12

2.2用戶態指令13

2.2.1RV32I基礎整數指令13

2.2.2標準擴展指令19

2.2.3指令格式22

2.3特權指令24

2.3.1控制狀態寄存器(CSR)25

2.3.2特權指令概述26

2.4匯編程序27

2.4.1匯編程序框架27

2.4.2基礎示例代碼28

2.5小結32

練習32第3章RISCV虛擬機——Ripes33

3.1Ripes簡介33

3.1.1Ripes的下載33

3.1.2功能簡介33

3.2Ripes的使用36

3.2.1示例代碼36

3.2.2模擬運行38

3.2.3IO外設40

3.2.4數據通路觀察40

3.3小結45

練習45

第二篇riscvmini的Chisel源碼分析

第4章實驗環境的構建49

4.1Chisel概述49

4.2Chisel開發環境的構建50

4.2.1安裝JDK50

4.2.2安裝SBT50

4.2.3安裝Mill(可選)51

4.2.4安裝Verilator52

4.2.5安裝GTKWave53

4.3Chisel簡單實踐53

4.3.1克隆樣例項目53

4.3.2LED閃爍項目介紹53

4.3.3硬件描述+Verilog生成55

4.3.4模塊單元測試58

4.4riscvmini的安裝與使用61

4.4.1下載riscvmini62

4.4.2構建及使用62

4.4.3編譯程序與仿真運行63

4.5小結67

練習68

第5章Chisel數字系統設計69

5.1Chisel的基本語法69

5.1.1基本概念69

5.1.2數據類型及其運算72

5.1.3組合類型75

5.1.4模塊75

5.2組合邏輯電路78

5.2.1線網及其連接78

5.2.2多路選擇與條件選擇79

5.2.3組合邏輯示例80

5.3時序邏輯電路82

5.3.1寄存器82

5.3.2寄存器組83

5.3.3時序邏輯示例84

5.4Chisel層次性設計86

5.4.1設計理念86

5.4.2整體/總線連接86

5.4.3層次性設計示例87

5.5Chisel內置組件90

5.5.1譯碼器91

5.5.2通信協議93

5.5.3仲裁器95

5.5.4內存96

5.6輸出Verilog與功能測試98

5.6.1硬件描述的生成98

5.6.2代碼生成原理103

5.6.3Chisel仿真測試104

5.7小結107

練習108

第6章riscvmini處理器核109

6.1riscvmini概述109

6.1.1項目概述109

6.1.2源代碼目錄結構109

6.2處理器核結構112

6.2.1基本部件模塊114

6.2.2數據通路(Datapath.scala)125

6.2.3數據通路高級特性134

6.2.4處理器核Core模塊142

6.3小結143

練習144

第7章系統構建與仿真運行145

7.1riscvmini緩存145

7.1.1緩存結構145

7.1.2緩存的實現147

7.2nasti總線159

7.2.1AXI總線的概念160

7.2.2nasti信號的組成160

7.2.3工作原理161

7.2.4Cache通過nasti訪存169

7.3Tile整合171

7.3.1頂層結構Tile171

7.3.2處理器規格配置(Config.scala)176

7.3.3生成處理器Tile.sv177

7.4riscvmini系統的構建179

7.4.1Makefile179

7.4.2make構建目標181

7.4.3VTile仿真運行183

7.5小結191

練習191

第三篇RISCV(riscvmini)實驗

第8章基礎觀測實驗195

8.1功能模塊測試195

8.1.1模塊測試方法195

8.1.2ImmGenTester測試197

8.2指令執行過程觀察201

8.2.1測試代碼201

8.2.2R型指令的執行203

8.2.3LW/SW指令的執行208

8.2.4BNE指令的執行209

8.3Cache內部行為觀察211

8.3.1icache內部信號211

8.3.2dcache內部信號212

8.4小結214

練習214

第9章初級設計實驗215

9.1極簡化的RISCV——RRISCV215

9.1.1RRISCV頂層設計215

9.1.2Core(Datapath)219

9.1.3RRISCV測試223

9.1.4Core.scala225

9.2雙發射改造228

9.2.1原理框圖228

9.2.2內存的升級改造228

9.2.3數據通路的改造230

9.2.4測試232

9.3小結234

練習235

第10章中級設計實驗236

10.1新增POPCNT指令實驗236

10.1.1流程步驟236

10.1.2POPCNT實現237

10.1.3功能測試239

10.2組相聯Cache設計240

10.2.1Cache存儲結構修改240

10.2.2訪問邏輯修改240

10.2.3Cache的測試244

10.3小結247

練習248

第11章高級增強實驗249

11.1流水級細分249

11.1.1基本思路249

11.1.2新增流水線寄存器251

11.1.3數據通路改造254

11.2冒險與阻塞257

11.2.1數據冒險257

11.2.2控制冒險261

11.3功能測試262

11.4小結265

練習265

附錄A五級流水Datapath.scala266

附錄B教學安排示例276