refactor: 重构实验目录结构
|
@ -1,18 +1,17 @@
|
|||
Chisel Project Template
|
||||
=======================
|
||||
# Chisel Project Template
|
||||
|
||||
Another version of the [Chisel template](https://github.com/ucb-bar/chisel-template) supporting mill.
|
||||
mill is another Scala/Java build tool without obscure DSL like SBT. It is much faster than SBT.
|
||||
|
||||
Contents at a glance:
|
||||
|
||||
* `.gitignore` - helps Git ignore junk like generated files, build products, and temporary files.
|
||||
* `build.sc` - instructs mill to build the Chisel project
|
||||
* `Makefile` - rules to call mill
|
||||
* `playground/src/GCD.scala` - GCD source file
|
||||
* `playground/src/DecoupledGCD.scala` - another GCD source file
|
||||
* `playground/src/Elaborate.scala` - wrapper file to call chisel command with the GCD module
|
||||
* `playground/test/src/GCDSpec.scala` - GCD tester
|
||||
- `.gitignore` - helps Git ignore junk like generated files, build products, and temporary files.
|
||||
- `build.sc` - instructs mill to build the Chisel project
|
||||
- `Makefile` - rules to call mill
|
||||
- `playground/src/GCD.scala` - GCD source file
|
||||
- `playground/src/DecoupledGCD.scala` - another GCD source file
|
||||
- `playground/src/Elaborate.scala` - wrapper file to call chisel command with the GCD module
|
||||
- `playground/test/src/GCDSpec.scala` - GCD tester
|
||||
|
||||
Feel free to rename or delete files under `playground/` or use them as a reference/template.
|
||||
|
||||
|
@ -21,11 +20,13 @@ Feel free to rename or delete files under `playground/` or use them as a referen
|
|||
First, install mill by referring to the documentation [here](https://com-lihaoyi.github.io/mill).
|
||||
|
||||
To run all tests in this design (recommended for test-driven development):
|
||||
|
||||
```bash
|
||||
make test
|
||||
```
|
||||
|
||||
To generate Verilog:
|
||||
|
||||
```bash
|
||||
make verilog
|
||||
```
|
||||
|
|
|
@ -1,64 +0,0 @@
|
|||
# 信号列表
|
||||
|
||||
## CSR 模块
|
||||
|
||||
### 信号
|
||||
|
||||
| 信号名 | 用处 |
|
||||
| -------------- | --------------------------------------------------------------------- |
|
||||
| wen | CSR 写使能(write && !illegal_access 为真时,信号有效) |
|
||||
| addr | CSR 地址 |
|
||||
| mode | 当前模式 |
|
||||
| rdata | 读到的 CSR 数据 |
|
||||
| wdata | 写往 CSR 的数据 |
|
||||
| write | 该指令为 CSR 写指令(即除 ECALL、ERET、EBREAK 这类 CSR 指令外的指令) |
|
||||
| only_read | 该 CSR 指令只进行读操作 |
|
||||
| illegal_mode | 当前模式低于要操作的 CSR 的最低模式 |
|
||||
| illegal_write | 当前写操作非法(指令为写指令且为非只读操作但访问的 CSR 权限为只读) |
|
||||
| illegal_access | 当前 CSR 访问非法(模式非法或写非法时,信号有效) |
|
||||
| illegal_addr | 要访问的 CSR 地址不存在 |
|
||||
|
||||
### 掩码
|
||||
|
||||
| 掩码名 | 数值 |
|
||||
| ------------- | ------------------------ |
|
||||
| sstatus_wmask | h00000000000c6122 |
|
||||
| sstatus_rmask | h80000003000de762 |
|
||||
| sie_rmask | "h222".U(64.W) & mideleg |
|
||||
| sie_wmask | "h222".U(64.W) & mideleg |
|
||||
| sip_rmask | "h222".U(64.W) & mideleg |
|
||||
| sip_wmask | "h222".U(64.W) & mideleg |
|
||||
|
||||
## Decoder Unit 模块
|
||||
|
||||
### InstInfo 结构体
|
||||
|
||||
| 信号名 | 用处 |
|
||||
| ---------- | -------------------------- |
|
||||
| valid | 指令有效 |
|
||||
| inst_legal | 指令合法,是已经实现的指令 |
|
||||
| reg1_ren | src1 读寄存器堆使能 |
|
||||
| reg1_raddr | src1 访问寄存器堆地址 |
|
||||
| reg2_ren | src2 读寄存器堆使能 |
|
||||
| reg2_raddr | src2 访问寄存器堆地址 |
|
||||
| fusel | FU 模块选择信号 |
|
||||
| op | FU 模块内部的操作码 |
|
||||
| reg_wen | 写回级是否写回寄存器堆 |
|
||||
| reg_waddr | 寄存器堆写回地址 |
|
||||
| imm | 立即数 |
|
||||
| inst | 原指令 |
|
||||
|
||||
### SrcInfo 结构体
|
||||
|
||||
| 信号名 | 用处 |
|
||||
| --------- | -------------------- |
|
||||
| src1_data | 当前指令的源操作数 1 |
|
||||
| src2_data | 当前指令的源操作数 2 |
|
||||
|
||||
### ExceptionInfo 结构体
|
||||
|
||||
| 信号名 | 用处 |
|
||||
| --------- | -------------------------- |
|
||||
| exception | 当前指令的异常信息 |
|
||||
| interrupt | 当前指令的中断信息 |
|
||||
| tval | 保留出现异常时的地址或指令 |
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
## 《数字逻辑与计算机结构实验指导书》目录
|
||||
|
||||
### 数字电路设计实验
|
||||
### 数字电路设计实验(上册)
|
||||
|
||||
#### 一、FPGA 设计与 Verilog HDL 硬件描述语言
|
||||
|
||||
|
@ -63,23 +63,45 @@
|
|||
|
||||
#### 实验 8 开关消抖实验
|
||||
|
||||
### 计算机结构设计实验
|
||||
---
|
||||
|
||||
### 计算机结构设计实验(下册)
|
||||
|
||||
#### 一、RISC-V 体系结构与指令系统
|
||||
|
||||
#### 二、Chisel 语法简介
|
||||
|
||||
#### 三、差分测试调试方法
|
||||
#### 三、开发环境
|
||||
|
||||
#### 实验 9 实现 R 型运算类指令的理想流水线设计实验
|
||||
#### 四、差分测试调试方法
|
||||
|
||||
##### 实验目的
|
||||
#### 五、RV64I 单周期处理器设计实验
|
||||
|
||||
##### 5.1 实现 R 型运算指令的处理器设计实验
|
||||
|
||||
##### 5.2 实现 I 型运算指令的处理器设计实验
|
||||
|
||||
##### 5.3 实现 U 型运算指令的处理器设计实验
|
||||
|
||||
##### 5.4 实现 I 型和 S 型访存指令的处理器设计实验
|
||||
|
||||
##### 5.5 实现 J 型无条件转移指令的处理器设计实验
|
||||
|
||||
##### 5.6 实现 B 型条件转移指令的处理器设计实验
|
||||
|
||||
---
|
||||
|
||||
#### 六、流水线处理器设计实验
|
||||
|
||||
##### 6.1 实验 7 实现 R 型运算类指令的理想流水线设计实验
|
||||
|
||||
###### 实验目的
|
||||
|
||||
1. 掌握 R 型运算类指令的数据通路
|
||||
2. 掌握经典单发射五级流水线的设计方法
|
||||
3. 掌握流水线 CPU 设计的编程基本框架
|
||||
|
||||
##### 实验原理和方法
|
||||
###### 实验原理和方法
|
||||
|
||||
1. 实现经典的单发射五级流水,这样比较简单
|
||||
|
||||
|
@ -87,24 +109,24 @@
|
|||
|
||||
3. 使用没有数据相关的测试集对其处理器进行测试,用于验证指令的正确性
|
||||
|
||||
##### 实验要求
|
||||
###### 实验要求
|
||||
|
||||
1. 根据本实验提供的五级流水线编程框架,在流水线 CPU 中添加以下指令:ADD、SLL、SLT 、SLTU、XOR 、SRL 、OR、AND 、SUB 、SRA
|
||||
2. 通过本实验提供的所有测试用例
|
||||
|
||||
##### 实验步骤
|
||||
###### 实验步骤
|
||||
|
||||
1. 如何打开工程文件进行编程
|
||||
2. 如何使用模拟器进行仿真
|
||||
3. 如何提交测评
|
||||
|
||||
##### 思考题
|
||||
###### 思考题
|
||||
|
||||
1.
|
||||
|
||||
#### 实验 10 实现 I 型和 U 型运算类指令的理想流水线设计实验
|
||||
##### 6.2 实验 8 实现 I 型和 U 型运算类指令的理想流水线设计实验
|
||||
|
||||
##### 实验目的
|
||||
###### 实验目的
|
||||
|
||||
1. 掌握 I 型和 U 型运算类指令的数据通路
|
||||
2. 掌握在五级流水线中添加 I 型和 U 型指令的方法
|
||||
|
@ -113,9 +135,9 @@
|
|||
|
||||
使用没有数据相关的测试集对其处理器进行测试,用于验证指令的正确性
|
||||
|
||||
#### 实验 11 实现乘除法指令的理想流水线设计实验
|
||||
##### 6.3 实验 9 实现乘除法指令的理想流水线设计实验
|
||||
|
||||
##### 实验目的
|
||||
###### 实验目的
|
||||
|
||||
1. 掌握乘法指令和除法指令的数据通路
|
||||
2. 掌握在执行级中添加乘除法运算部件 MDU 的方法
|
||||
|
@ -125,9 +147,9 @@
|
|||
|
||||
实现 M 拓展,在 exe 级增加 FU 选择
|
||||
|
||||
#### 实验 12 实现访存指令的理想流水线设计实验
|
||||
##### 6.4 实验 10 实现访存指令的理想流水线设计实验
|
||||
|
||||
##### 实验目的
|
||||
###### 实验目的
|
||||
|
||||
1. 掌握访存指令的数据通路
|
||||
2. 掌握在访存级中添加访存部件 LSU 的方法
|
||||
|
@ -137,9 +159,9 @@
|
|||
|
||||
在 mem 级增加 lsu
|
||||
|
||||
#### 实验 13 实现转移指令的理想流水线设计实验
|
||||
##### 6.5 实验 11 实现转移指令的理想流水线设计实验
|
||||
|
||||
##### 实验目的
|
||||
###### 实验目的
|
||||
|
||||
1. 掌握转移指令的数据通路
|
||||
2. 掌握在执行级中添加转移控制部件 BRU 的方法
|
||||
|
@ -149,15 +171,15 @@
|
|||
|
||||
转移指令可以设计在 id 级也可以实现在 exe 级
|
||||
|
||||
#### 实验 14 气泡流水线设计实验
|
||||
##### 6.6 实验 12 气泡流水线设计实验
|
||||
|
||||
##### 实验目的
|
||||
###### 实验目的
|
||||
|
||||
1. 掌握各种流水线冲突的概念
|
||||
2. 掌握插入气泡解决各种冲突的原理
|
||||
3. 学习判断流水线冲突的逻辑单元的设计方法
|
||||
|
||||
##### 实验原理与方法
|
||||
###### 实验原理与方法
|
||||
|
||||
1. 流水线冲突的基本概念与流水线的控制方法
|
||||
|
||||
|
@ -186,17 +208,17 @@
|
|||
|
||||
- 读后写
|
||||
|
||||
##### 实验要求
|
||||
###### 实验要求
|
||||
|
||||
##### 实验步骤
|
||||
###### 实验步骤
|
||||
|
||||
##### 思考题
|
||||
###### 思考题
|
||||
|
||||
当发现译码级的源操作数和执行级、访存级、写回级目的寄存器一致时,通过阻塞译码级来解决数据冲突
|
||||
|
||||
保证后一级无法运行时,前一级也无法运行,即可完成阻塞
|
||||
|
||||
#### 实验 15 使用数据前递解决冲突的流水线设计实验
|
||||
##### 6.7 实验 13 使用数据前递解决冲突的流水线设计实验
|
||||
|
||||
- 数据前递的方式
|
||||
|
||||
|
@ -208,38 +230,38 @@
|
|||
|
||||
完成数据相关处理后,使用有数据相关的数据集进行测试
|
||||
|
||||
#### 实验 16 实现 CSR 指令的流水线设计实验
|
||||
##### 6.8 实验 14 实现 CSR 指令的流水线设计实验
|
||||
|
||||
- 实现 M 模式
|
||||
|
||||
- 增加 CSR 指令
|
||||
- 在 exe 级增加 fu 选择
|
||||
|
||||
#### 实验 17 例外和中断的支持
|
||||
##### 6.9 实验 15 例外和中断的支持
|
||||
|
||||
- 可以先实现 ecall、eret、ebreak 指令,再实现别的例外
|
||||
|
||||
- 实现 M 和 U 模式
|
||||
- 截止这里应该已经完成了 RV64 的 I、M、Zicsr 指令集
|
||||
|
||||
#### 实验 18 支持 AXI 总线的流水线互连设计实验
|
||||
##### 6.10 实验 16 支持 AXI 总线的流水线互连设计实验
|
||||
|
||||
- 将现有的 sram 接口改为类 sram 接口
|
||||
- 再设计一个类 sram 转 AXI 协议转换桥
|
||||
- 通过 AXI 随机延迟验证
|
||||
|
||||
#### 实验 19 流水线 CPU 访存提速设计实验
|
||||
##### 6.11 实验 17 流水线 CPU 访存提速设计实验
|
||||
|
||||
- 先设计 cache 模块
|
||||
- 然后实现 icache,调整总线接口
|
||||
- 实现 fence.i 指令
|
||||
- 跑性能测试程序
|
||||
|
||||
#### 实验 20 流水线 CPU 分支预测设计实验
|
||||
##### 6.12 实验 18 流水线 CPU 分支预测设计实验
|
||||
|
||||
#### 实验 21 动态顺序双发射流水线设计实验
|
||||
##### 6.13 实验 19 动态顺序双发射流水线设计实验
|
||||
|
||||
#### 实验 22 支持虚实地址转换的超标量流水线设计实验
|
||||
##### 6.14 实验 20 支持虚实地址转换的超标量流水线设计实验
|
||||
|
||||
- 增加 MMU、TLB,实现虚实地址转换,使用 SV39 标准
|
||||
- 增加 S 相关的 CSR
|
||||
|
@ -248,4 +270,6 @@
|
|||
|
||||
- 运行操作系统
|
||||
|
||||
#### 实验 23 RISC-V 核修改为 LongArch 核的相关指导
|
||||
##### 6.15 实验 21 RISC-V 核修改为 LongArch 核的相关指导
|
||||
|
||||
#### 七、模拟器设计实验
|
||||
|
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 3.9 KiB |
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 5.8 KiB After Width: | Height: | Size: 5.8 KiB |
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 57 KiB After Width: | Height: | Size: 57 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 18 KiB |
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 38 KiB After Width: | Height: | Size: 38 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 7.6 KiB After Width: | Height: | Size: 7.6 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |