297 lines
8.6 KiB
Markdown
297 lines
8.6 KiB
Markdown
22:05 2024/6/11
|
||
|
||

|
||
|
||
[](https://gitee.com/dengchow/XhngGPU) [](https://gitee.com/dengchow/XhngGPU)
|
||
 [](https://gitee.com/dengchow/XhngGPU) [](https://gitee.com/dengchow/XhngGPU)
|
||
|
||
## 一、简介
|
||
|
||
> TraSH,一个基于 RISC-V 指令集的计算机系统
|
||
|
||
## 二、功能介绍
|
||
|
||
### 1. 特性
|
||
|
||
**TraSH 具有如下特性:**
|
||
|
||
- 完全采用 Verilog 进行编写
|
||
- 具有 5 级流水线,顺序执行,不支持分支预测(取指 IF、译指 ID、执行 EX、访存 MEM、写回 WB)
|
||
- 支持 RV32IMZicsr 指令集(ecall、ebreak、fence、fence.i、wfi 指令除外)
|
||
- 仅支持 M 模式
|
||
- 仅支持非向量中断
|
||
- 非 AMBA 总线,哈佛结构,支持 bootloader
|
||
- 支持 UART、TIMER、GPIO 等外设
|
||
- 支持 RT-Thread Nano 3.1.5
|
||
- 支持在多平台运行
|
||
|
||
**TraSH 可以在 Windows 和 Linux 平台运行:**
|
||
|
||
1. Windows 平台 (Win10)
|
||
- 支持 iverilog 仿真
|
||
- 支持 Gowin FPGA (TANG Nano 9K)
|
||
- 支持 XEMU 模拟器
|
||
|
||
2. Linux 平台 (CentOS)
|
||
- 支持 VCS 仿真
|
||
- 支持 XEMU 模拟器
|
||
|
||
### 2. 地址分配
|
||
|
||
编译的 .bin 可以在多个平台运行,但是由于平台的限制,需要对 rom 和 ram 的大小进行设置
|
||
|
||
原则上,除了 XEMU 外,其他平台请遵循 `rom=28K, ram=12K`
|
||
- vcs、iverilog、Gowin FPGA 均使用了相同的 IP,如需修改,需要重新生成 IP 进行替换
|
||
|
||
|起始地址 |结束地址 |大小 |外设 |支持|
|
||
|:-: |:-: |:-: |:-: |:-: |
|
||
|0x0000_0000|0x0fff_ffff|512K(Max 28K on non XEMU platform)|ROM |√ |
|
||
|0x1000_0000|0x1fff_ffff|512K(Max 28K on non XEMU platform)|RAM |√ |
|
||
|0x2000_0000|0x2fff_ffff|4K |TIMER1|√ |
|
||
|0x3000_0000|0x3fff_ffff|4K |UART1 |√ |
|
||
|0x4000_0000|0x4fff_ffff|4K |GPIO |√ |
|
||
|
||
*实际使用的空间大小详见 link.lds 文件*
|
||
|
||
## 三、环境搭建
|
||
|
||
### 1. Windows + iverilog
|
||
|
||
#### 1. 说明
|
||
|
||
- 内核及外设:`YuHeng 5-state RISC-V Core`
|
||
- 软件编译器:`gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.5.1 B20210306)`
|
||
- 仿真环境:`iverilog + gtkwave`
|
||
|
||
*注意,当宏 `PRINT_STDIO_SIM` 被定义时,使用 `mscratchcswl` 寄存器来重定向 xprintf,需要编译器支持*
|
||
|
||
#### 2. 操作
|
||
|
||
修改仿真环境 iverilog 和 gtkwave 的路径(文件路径:`sim/config.mk`)
|
||
|
||
```
|
||
VCS = D:/iverilog/bin/iverilog.exe
|
||
SIM = D:/iverilog/bin/vvp.exe
|
||
WAV = D:/iverilog/gtkwave/bin/gtkwave.exe
|
||
```
|
||
|
||
修改测试程序编译工具的路径(文件路径:`sim/config.mk`)
|
||
|
||
```
|
||
EMBTOOLPATH = D:/EmbedCompiler/riscv64-elf-mingw-20210306
|
||
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv64-unknown-elf
|
||
CC = ${EMBTOOLPREFIX}-gcc.exe
|
||
OBJDUMP = ${EMBTOOLPREFIX}-objdump.exe
|
||
OBJCOPY = ${EMBTOOLPREFIX}-objcopy.exe
|
||
```
|
||
|
||
### 2. Windows + XEMU
|
||
|
||
#### 1. 说明
|
||
|
||
- 内核及外设:`YuHeng 5-state RISC-V Core`
|
||
- 软件编译器:`gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.5.1 B20210306)`
|
||
- 仿真环境:`XEMU`
|
||
|
||
*注意,不能定义 `PRINT_STDIO_SIM`,即只支持使用 UART 来重定向 xprintf *
|
||
|
||
#### 2. 操作
|
||
|
||
下载并安装 `MinGW`,打开网页 `https://sourceforge.net/projects/mingw/files/`,下载 `mingw-get-setup.exe`
|
||
|
||
安装 gcc、g++、gdb 和 pthread
|
||
|
||
```
|
||
mingw-get install gcc
|
||
mingw-get install g++
|
||
mingw-get install gdb
|
||
mingw-get install pthreads
|
||
```
|
||
|
||
修改 Windows gcc 编译工具的路径(文件路径:`sim/xemu/Makefile`)
|
||
|
||
```
|
||
TARGET = .\xemu.exe
|
||
CC = D:\MinGW\bin\gcc.exe
|
||
PARAM =
|
||
LIB = -lpthread -lm
|
||
```
|
||
|
||
修改测试程序编译工具的路径(文件路径:`sim/config.mk`)
|
||
|
||
```
|
||
EMBTOOLPATH = D:/EmbedCompiler/riscv64-elf-mingw-20210306
|
||
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv64-unknown-elf
|
||
CC = ${EMBTOOLPREFIX}-gcc.exe
|
||
OBJDUMP = ${EMBTOOLPREFIX}-objdump.exe
|
||
OBJCOPY = ${EMBTOOLPREFIX}-objcopy.exe
|
||
```
|
||
|
||
### 3. Windows + Gowin FPGA
|
||
|
||
#### 1. 说明
|
||
|
||
- 内核及外设:`YuHeng 5-state RISC-V Core`
|
||
- 软件编译器:`gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.5.1 B20210306)`
|
||
- 仿真环境:`GOWIN FPGA Designer Version 1.9.8.11 Education`
|
||
|
||
*注意,不能定义 `PRINT_STDIO_SIM`,即只支持使用 UART 来重定向 xprintf *
|
||
|
||
#### 2. 操作
|
||
|
||
安装 Gowin IDE
|
||
|
||
修改测试程序编译工具的路径(文件路径:`sim/config.mk`)
|
||
|
||
```
|
||
EMBTOOLPATH = D:/EmbedCompiler/riscv64-elf-mingw-20210306
|
||
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv64-unknown-elf
|
||
CC = ${EMBTOOLPREFIX}-gcc.exe
|
||
OBJDUMP = ${EMBTOOLPREFIX}-objdump.exe
|
||
OBJCOPY = ${EMBTOOLPREFIX}-objcopy.exe
|
||
```
|
||
|
||
*注意,重新编译测试程序后,需要重新生成 IP*
|
||
|
||
### 4. Linux + VCS
|
||
|
||
#### 1. 说明
|
||
|
||
- 内核及外设:`YuHeng 5-state RISC-V Core`
|
||
- 软件编译器:`gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.5.1 B20210307)`
|
||
- 仿真环境:`VCS + DVE/Veridi`
|
||
|
||
*注意,当宏 `PRINT_STDIO_SIM` 被定义时,使用 `mscratchcswl` 寄存器来重定向 xprintf,需要编译器支持*
|
||
|
||
#### 2. 操作
|
||
|
||
修改测试程序编译工具的路径(文件路径:`sim/config.mk`)
|
||
|
||
```
|
||
EMBTOOLPATH = /home/crazy/Tools/compiler/xuantie/v8.4.0/riscv64-elf-x86_64-20210307
|
||
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv64-unknown-elf
|
||
CC = ${EMBTOOLPREFIX}-gcc
|
||
OBJDUMP = ${EMBTOOLPREFIX}-objdump
|
||
OBJCOPY = ${EMBTOOLPREFIX}-objcopy
|
||
```
|
||
|
||
### 5. Linux + XEMU
|
||
|
||
#### 1. 说明
|
||
|
||
- 内核及外设:`YuHeng 5-state RISC-V Core`
|
||
- 软件编译器:`gcc version 8.4.0 (T-HEAD RISCV Tools V1.10.5.1 B20210307)`
|
||
- 仿真环境:`XEMU`
|
||
|
||
*注意,不能定义 `PRINT_STDIO_SIM`,即只支持使用 UART 来重定向 xprintf *
|
||
|
||
#### 2. 操作
|
||
|
||
安装 curses 库
|
||
|
||
```
|
||
sudo apt-get update
|
||
sudo apt-get install -y libncurses-dev
|
||
```
|
||
|
||
修改测试程序编译工具的路径(文件路径:`sim/config.mk`)
|
||
|
||
```
|
||
EMBTOOLPATH = /home/crazy/Tools/compiler/xuantie/v8.4.0/riscv64-elf-x86_64-20210307
|
||
EMBTOOLPREFIX = ${EMBTOOLPATH}/bin/riscv64-unknown-elf
|
||
CC = ${EMBTOOLPREFIX}-gcc
|
||
OBJDUMP = ${EMBTOOLPREFIX}-objdump
|
||
OBJCOPY = ${EMBTOOLPREFIX}-objcopy
|
||
```
|
||
|
||
## 四、使用说明
|
||
|
||
*注意,以下操作不区分 Windows 和 Linux 平台*
|
||
|
||
### 1. 编译测试程序
|
||
|
||
1. 打开 Terminal
|
||
|
||
2. 进入 `sim/simple`
|
||
|
||
3. 执行 `make build`,编译测试程序
|
||
- 在 Windows 平台中,还会在工程的根目录下生成 .mi 文件,用于固化 Gowin FPGA 的 rom IP
|
||
|
||
### 2. 编译 RTL
|
||
|
||
*注意,仅在 vcs 和 iverilog 仿真时使用*
|
||
|
||
1. 打开 Terminal
|
||
|
||
2. 进入 `sim/simple`
|
||
|
||
3. 执行 `make compile`,编译 RTL
|
||
|
||
4. 执行 `make build`,编译测试程序
|
||
|
||
5. 执行 `make sim`,进行仿真
|
||
|
||
6. 执行 `make wave`,查看波形
|
||
|
||
此外,可以使用 `make run`,等价于 `make compile && make build && make sim`
|
||
|
||
### 3. 编译 XEMU 并运行
|
||
|
||
1. 打开 Terminal
|
||
|
||
2. 进入 `sim/simple`
|
||
|
||
3. 执行 `make xemu`,先编译 XEMU,然后编译测试程序并运行
|
||
|
||
*模拟器退出条件:1. 通过 UART1 发送字节序列 0x1b 0x04*
|
||
*模拟器退出条件:2. 键盘输入 Ctrl+b/B*
|
||
|
||
### 4. 使用 debugger
|
||
|
||
1. 进入 `scripts/debugger`
|
||
|
||
2. 运行 `debugger.py` 或 `debugger.exe`
|
||
- `debugger.exe` 通过 `pkgtool.bat` 脚本对 `debugger.py` 打包得到
|
||
|
||
debugger 支持的命令:
|
||
|
||
- `com`,扫描串口
|
||
- `com4`,打开串口(格式:115200 N 8 1)
|
||
|
||
```
|
||
This is a PuSH Terminal.
|
||
|
||
Help Menu:
|
||
----------------------------------------
|
||
~ - Switch mode.
|
||
q - Exit terminal.
|
||
r - Repeat last command.
|
||
help - (h) Show help menu.
|
||
cd - Switch to work path.
|
||
load - (ld) Load file.
|
||
download - (d) Download to target device.
|
||
go - (g) Control target device jump and run.
|
||
com - Scan valid serial port.
|
||
com* - Open target serial port.
|
||
|
||
```
|
||
|
||
*注意,debugger 需要配合 Gowin FPGA 使用*
|
||
|
||
## 五、项目引用
|
||
|
||
> RISC-V 内核: git clone https://gitee.com/dengchow/yuheng-riscv-soc.git
|
||
> XEMU 模拟器: git clone https://gitee.com/dengchow/xemu.git
|
||
|
||
## 六、修改日志
|
||
|
||
- v1.0
|
||
- 创建项目并集成测试(0:29 2024/3/10)
|
||
|
||
## 七、维护
|
||
|
||
如果有任何疑问或者建议,欢迎在下方评论
|
||
|
||
ATONEMAN
|
||
2024/6/11
|