目录
配套资源第一篇RISCV基础
第1章引言3
1.1RISCV指令集架构3
1.2Chisel硬件设计语言4
1.3目标读者5
1.3.1读者的学习动机5
1.3.2读者所需的背景5
1.3.3读者将获得的成长5
1.4小结6
第2章RISCV指令与汇编7
2.1RISCV 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章RISCV虚拟机——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
第二篇riscvmini的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.4riscvmini的安装与使用61
4.4.1下载riscvmini62
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章riscvmini处理器核109
6.1riscvmini概述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.1riscvmini缓存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.4riscvmini系统的构建179
7.4.1Makefile179
7.4.2make构建目标181
7.4.3VTile仿真运行183
7.5小结191
练习191
第三篇RISCV(riscvmini)实验
第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极简化的RISCV——RRISCV215
9.1.1RRISCV顶层设计215
9.1.2Core(Datapath)219
9.1.3RRISCV测试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
