Go to file
Lyons 6deb620bb4 add logo 2024-06-11 22:28:34 +08:00
fpga_project create project 2024-06-11 22:06:12 +08:00
hardware create project 2024-06-11 22:06:12 +08:00
pic add logo 2024-06-11 22:28:34 +08:00
scripts create project 2024-06-11 22:06:12 +08:00
sim add logo 2024-06-11 22:28:34 +08:00
tb create project 2024-06-11 22:06:12 +08:00
.gitignore create project 2024-06-11 22:06:12 +08:00
LICENSE create project 2024-06-11 22:06:12 +08:00
README.md add logo 2024-06-11 22:28:34 +08:00

README.md

22:05 2024/6/11

star fork GitHub License

一、简介

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 模拟器
  1. 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.pydebugger.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