diff --git a/chisel/README.md b/chisel/README.md index 906c4e2..e703b3f 100644 --- a/chisel/README.md +++ b/chisel/README.md @@ -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 ``` diff --git a/chisel/playground/doc/Signal.md b/chisel/playground/doc/Signal.md deleted file mode 100644 index 5beb7c2..0000000 --- a/chisel/playground/doc/Signal.md +++ /dev/null @@ -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 | 保留出现异常时的地址或指令 | diff --git a/doc/《数字逻辑与计算机结构》目录.md b/doc/《数字逻辑与计算机结构》目录.md index 6ca0d99..ba7ed9d 100644 --- a/doc/《数字逻辑与计算机结构》目录.md +++ b/doc/《数字逻辑与计算机结构》目录.md @@ -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 核的相关指导 + +#### 七、模拟器设计实验 diff --git a/doc/实验指导手册模板.dotx b/doc/实验指导手册模板.dotx index 2da79ad..66cd533 100644 Binary files a/doc/实验指导手册模板.dotx and b/doc/实验指导手册模板.dotx differ diff --git a/doc/计算机结构设计实验/lab09/image/image-20240107145304393.png b/doc/计算机结构设计实验/lab07/image/image-20240107145304393.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240107145304393.png rename to doc/计算机结构设计实验/lab07/image/image-20240107145304393.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240107150508299.png b/doc/计算机结构设计实验/lab07/image/image-20240107150508299.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240107150508299.png rename to doc/计算机结构设计实验/lab07/image/image-20240107150508299.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240107161239749.png b/doc/计算机结构设计实验/lab07/image/image-20240107161239749.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240107161239749.png rename to doc/计算机结构设计实验/lab07/image/image-20240107161239749.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240107193813519.png b/doc/计算机结构设计实验/lab07/image/image-20240107193813519.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240107193813519.png rename to doc/计算机结构设计实验/lab07/image/image-20240107193813519.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240107201217987.png b/doc/计算机结构设计实验/lab07/image/image-20240107201217987.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240107201217987.png rename to doc/计算机结构设计实验/lab07/image/image-20240107201217987.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240107213744736.png b/doc/计算机结构设计实验/lab07/image/image-20240107213744736.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240107213744736.png rename to doc/计算机结构设计实验/lab07/image/image-20240107213744736.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240108174346298.png b/doc/计算机结构设计实验/lab07/image/image-20240108174346298.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240108174346298.png rename to doc/计算机结构设计实验/lab07/image/image-20240108174346298.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240109155256358.png b/doc/计算机结构设计实验/lab07/image/image-20240109155256358.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240109155256358.png rename to doc/计算机结构设计实验/lab07/image/image-20240109155256358.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240109161753616.png b/doc/计算机结构设计实验/lab07/image/image-20240109161753616.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240109161753616.png rename to doc/计算机结构设计实验/lab07/image/image-20240109161753616.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111132343570.png b/doc/计算机结构设计实验/lab07/image/image-20240111132343570.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111132343570.png rename to doc/计算机结构设计实验/lab07/image/image-20240111132343570.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111135906222.png b/doc/计算机结构设计实验/lab07/image/image-20240111135906222.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111135906222.png rename to doc/计算机结构设计实验/lab07/image/image-20240111135906222.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111140744667.png b/doc/计算机结构设计实验/lab07/image/image-20240111140744667.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111140744667.png rename to doc/计算机结构设计实验/lab07/image/image-20240111140744667.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111143829812.png b/doc/计算机结构设计实验/lab07/image/image-20240111143829812.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111143829812.png rename to doc/计算机结构设计实验/lab07/image/image-20240111143829812.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111150330436.png b/doc/计算机结构设计实验/lab07/image/image-20240111150330436.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111150330436.png rename to doc/计算机结构设计实验/lab07/image/image-20240111150330436.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111151739011.png b/doc/计算机结构设计实验/lab07/image/image-20240111151739011.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111151739011.png rename to doc/计算机结构设计实验/lab07/image/image-20240111151739011.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111160016125.png b/doc/计算机结构设计实验/lab07/image/image-20240111160016125.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111160016125.png rename to doc/计算机结构设计实验/lab07/image/image-20240111160016125.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240111165434087.png b/doc/计算机结构设计实验/lab07/image/image-20240111165434087.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240111165434087.png rename to doc/计算机结构设计实验/lab07/image/image-20240111165434087.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240124134556170.png b/doc/计算机结构设计实验/lab07/image/image-20240124134556170.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240124134556170.png rename to doc/计算机结构设计实验/lab07/image/image-20240124134556170.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240124141127010.png b/doc/计算机结构设计实验/lab07/image/image-20240124141127010.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240124141127010.png rename to doc/计算机结构设计实验/lab07/image/image-20240124141127010.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240125134200367.png b/doc/计算机结构设计实验/lab07/image/image-20240125134200367.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240125134200367.png rename to doc/计算机结构设计实验/lab07/image/image-20240125134200367.png diff --git a/doc/计算机结构设计实验/lab09/image/image-20240125134816118.png b/doc/计算机结构设计实验/lab07/image/image-20240125134816118.png similarity index 100% rename from doc/计算机结构设计实验/lab09/image/image-20240125134816118.png rename to doc/计算机结构设计实验/lab07/image/image-20240125134816118.png diff --git a/doc/计算机结构设计实验/lab09/main.typ b/doc/计算机结构设计实验/lab07/main.typ similarity index 100% rename from doc/计算机结构设计实验/lab09/main.typ rename to doc/计算机结构设计实验/lab07/main.typ diff --git a/doc/计算机结构设计实验/lab09/实现 R 型运算类指令的理想流水线设计实验.md b/doc/计算机结构设计实验/lab07/实现 R 型运算类指令的理想流水线设计实验.md similarity index 100% rename from doc/计算机结构设计实验/lab09/实现 R 型运算类指令的理想流水线设计实验.md rename to doc/计算机结构设计实验/lab07/实现 R 型运算类指令的理想流水线设计实验.md diff --git a/doc/计算机结构设计实验/lab07/实验七.docx b/doc/计算机结构设计实验/lab07/实验七.docx new file mode 100644 index 0000000..16af406 Binary files /dev/null and b/doc/计算机结构设计实验/lab07/实验七.docx differ diff --git a/doc/计算机结构设计实验/lab10/image/image-20240123134117946.png b/doc/计算机结构设计实验/lab08/image/image-20240123134117946.png similarity index 100% rename from doc/计算机结构设计实验/lab10/image/image-20240123134117946.png rename to doc/计算机结构设计实验/lab08/image/image-20240123134117946.png diff --git a/doc/计算机结构设计实验/lab10/image/image-20240123134317947.png b/doc/计算机结构设计实验/lab08/image/image-20240123134317947.png similarity index 100% rename from doc/计算机结构设计实验/lab10/image/image-20240123134317947.png rename to doc/计算机结构设计实验/lab08/image/image-20240123134317947.png diff --git a/doc/计算机结构设计实验/lab10/image/image-20240123134347792.png b/doc/计算机结构设计实验/lab08/image/image-20240123134347792.png similarity index 100% rename from doc/计算机结构设计实验/lab10/image/image-20240123134347792.png rename to doc/计算机结构设计实验/lab08/image/image-20240123134347792.png diff --git a/doc/计算机结构设计实验/lab10/image/image-20240123172626822.png b/doc/计算机结构设计实验/lab08/image/image-20240123172626822.png similarity index 100% rename from doc/计算机结构设计实验/lab10/image/image-20240123172626822.png rename to doc/计算机结构设计实验/lab08/image/image-20240123172626822.png diff --git a/doc/计算机结构设计实验/lab10/image/image-20240123172829004.png b/doc/计算机结构设计实验/lab08/image/image-20240123172829004.png similarity index 100% rename from doc/计算机结构设计实验/lab10/image/image-20240123172829004.png rename to doc/计算机结构设计实验/lab08/image/image-20240123172829004.png diff --git a/doc/计算机结构设计实验/lab10/image/image-20240125155402479.png b/doc/计算机结构设计实验/lab08/image/image-20240125155402479.png similarity index 100% rename from doc/计算机结构设计实验/lab10/image/image-20240125155402479.png rename to doc/计算机结构设计实验/lab08/image/image-20240125155402479.png diff --git a/doc/计算机结构设计实验/lab10/main.typ b/doc/计算机结构设计实验/lab08/main.typ similarity index 100% rename from doc/计算机结构设计实验/lab10/main.typ rename to doc/计算机结构设计实验/lab08/main.typ diff --git a/doc/计算机结构设计实验/lab10/实现 I 型和 U 型运算类指令的理想流水线设计实验.md b/doc/计算机结构设计实验/lab08/实现 I 型和 U 型运算类指令的理想流水线设计实验.md similarity index 100% rename from doc/计算机结构设计实验/lab10/实现 I 型和 U 型运算类指令的理想流水线设计实验.md rename to doc/计算机结构设计实验/lab08/实现 I 型和 U 型运算类指令的理想流水线设计实验.md diff --git a/doc/计算机结构设计实验/lab08/实验八.docx b/doc/计算机结构设计实验/lab08/实验八.docx new file mode 100644 index 0000000..b9a574d Binary files /dev/null and b/doc/计算机结构设计实验/lab08/实验八.docx differ diff --git a/doc/计算机结构设计实验/lab09/实验九.docx b/doc/计算机结构设计实验/lab09/实验九.docx index 7a68c16..4f9033b 100644 Binary files a/doc/计算机结构设计实验/lab09/实验九.docx and b/doc/计算机结构设计实验/lab09/实验九.docx differ diff --git a/doc/计算机结构设计实验/lab10/实验十.docx b/doc/计算机结构设计实验/lab10/实验十.docx index 357de07..79b9401 100644 Binary files a/doc/计算机结构设计实验/lab10/实验十.docx and b/doc/计算机结构设计实验/lab10/实验十.docx differ diff --git a/doc/计算机结构设计实验/lab11/实验十一.docx b/doc/计算机结构设计实验/lab11/实验十一.docx deleted file mode 100644 index 07ea292..0000000 Binary files a/doc/计算机结构设计实验/lab11/实验十一.docx and /dev/null differ diff --git a/doc/计算机结构设计实验/lab12/实验十二.docx b/doc/计算机结构设计实验/lab12/实验十二.docx deleted file mode 100644 index 79b9401..0000000 Binary files a/doc/计算机结构设计实验/lab12/实验十二.docx and /dev/null differ diff --git a/doc/计算机结构设计实验/实验步骤/实验步骤.docx b/doc/计算机结构设计实验/实验步骤/实验步骤.docx new file mode 100644 index 0000000..c92902f Binary files /dev/null and b/doc/计算机结构设计实验/实验步骤/实验步骤.docx differ