TraSH/README.md

297 lines
8.6 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

22:05 2024/6/11
![](./pic/logo.jpg)
[![star](https://gitee.com/dengchow/XhngGPU/badge/star.svg?theme=dark)](https://gitee.com/dengchow/XhngGPU) [![fork](https://gitee.com/dengchow/XhngGPU.git/badge/fork.svg?theme=dark)](https://gitee.com/dengchow/XhngGPU)
![GitHub License](https://img.shields.io/github/license/dengchow/RepoLicense) [![](https://img.shields.io/badge/version-v1.0-brightgreen.svg)](https://gitee.com/dengchow/XhngGPU) [![](https://img.shields.io/badge/Author-ATONEMAN-orange.svg)](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