|
||
---|---|---|
fpga_project | ||
hardware | ||
pic | ||
scripts | ||
sim | ||
tb | ||
.gitignore | ||
LICENSE | ||
README.md |
README.md
22:05 2024/6/11
一、简介
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 平台运行:
- Windows 平台 (Win10)
- 支持 iverilog 仿真
- 支持 Gowin FPGA (TANG Nano 9K)
- 支持 XEMU 模拟器
- 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. 编译测试程序
-
打开 Terminal
-
进入
sim/simple
-
执行
make build
,编译测试程序
- 在 Windows 平台中,还会在工程的根目录下生成 .mi 文件,用于固化 Gowin FPGA 的 rom IP
2. 编译 RTL
注意,仅在 vcs 和 iverilog 仿真时使用
-
打开 Terminal
-
进入
sim/simple
-
执行
make compile
,编译 RTL -
执行
make build
,编译测试程序 -
执行
make sim
,进行仿真 -
执行
make wave
,查看波形
此外,可以使用 make run
,等价于 make compile && make build && make sim
3. 编译 XEMU 并运行
-
打开 Terminal
-
进入
sim/simple
-
执行
make xemu
,先编译 XEMU,然后编译测试程序并运行
模拟器退出条件:1. 通过 UART1 发送字节序列 0x1b 0x04
模拟器退出条件:2. 键盘输入 Ctrl+b/B
4. 使用 debugger
-
进入
scripts/debugger
-
运行
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