Go to file
liangkangnan da19d3ebe5 fpga:cmod_a7:top: add bootrom module and use xip instead of flash_ctrl module
Signed-off-by: liangkangnan <liangkangnan@163.com>
2023-04-01 15:18:17 +08:00
doc doc: add obi spec 2021-05-21 17:06:39 +08:00
fpga fpga:cmod_a7:top: add bootrom module and use xip instead of flash_ctrl module 2023-04-01 15:18:17 +08:00
pic tools:openocd: update to support cmsis_dap-v2 driver 2022-08-17 10:22:17 +08:00
rtl rtl:perips: add bootrom and xip 2023-04-01 15:11:40 +08:00
sdk sdk🔗 change flash addr to 0x02000000 2023-04-01 15:04:35 +08:00
sim sim🔝 add bootrom module and use xip instead of flash_ctrl module 2023-04-01 15:16:07 +08:00
tests tests:isa: remove unused test case 2021-12-20 15:04:55 +08:00
tools tools: add bootrom 2023-04-01 15:06:00 +08:00
.gitignore first release 2020-10-23 21:26:18 +08:00
LICENSE first release 2019-12-04 08:47:19 +08:00
README.md tools:openocd: update to support cmsis_dap-v2 driver 2022-08-17 10:22:17 +08:00
rtl.flist rtl:perips: add bootrom and xip 2023-04-01 15:11:40 +08:00

README.md

1.概述

本分支是在bram分支的基础上进行改进的。

改进的地方主要有:

  1. 开发环境切换到Linux(Ubuntu18.04)系统下;
  2. 仿真器使用verilator
  3. 内部总线使用OBI总线(详细内容见doc/OBI-v1.0.pdf文档)
  4. 增加指令trace功能
  5. JTAG模块全面改进和优化支持3个硬件断点单步等功能支持gdb调试
  6. 增加静态分支预测功能;

2.使用方法

2.1安装gcc工具链

下载gcc工具链(百度云链接提取码yaib),使用下面的命令解压到/opt/riscv32目录下

sudo tar zxf tinyriscv-gcc-toolchain.tar.gz -C /

2.2下载代码

下载本项目verilator分支的代码

git clone -b verilator https://gitee.com/liangkangnan/tinyriscv.git

2.3运行仿真

打开终端进入到sim目录下执行以下的命令编译

make recompile

这个命令会重新编译整个rtl源码和sdk/examples/simple这个C语言例程。如果需要使用其他例程可以用PROG参数指定比如

make PROG=/path/sdk/examples/hello_world/hello_world.mem recompile

执行以下命令运行仿真:

make run

make_run

打开另一个终端进入到tools/openocd目录下运行openocd

./openocd_linux -f ../../sim/remote_bitbang.cfg

openocd

可以看到openocd已经连上了可以使用telnet或者gdb进行调试了。

2.3.1使用telnet进行调试

再打开另一个终端输入以下命令连接telnet

telnet localhost 4444

telnet

然后就可以使用各种命令进行调试了。下面介绍一些常用的命令:

halt停住MCU进入调试模式

resumeMCU从停住的地方继续执行退出调试模式

reset复位MCU复位之后就开始执行。通常在下载完程序后使用该命令来运行程序

reset halt复位MCU然后停住MCU即MCU停在复位地址处

bp 0x00000010 4 hw打断点其中0x00000010是断点的地址4表示地址长度为4个字节hw表示硬件断点。tinyriscv只支持硬件断点。

rbp 0x00000010删除0x00000010地址处的断点

bp:查看所有断点信息;

step:单步执行,每次执行一条指令;

mww 0x00000010 0x1234即memory write word往0x00000010地址处写入0x1234长度为4个字节

mdw 0x00000010 2即memory display word从0x00000010地址处读取2个word

reg sp读取sp寄存器的值

reg sp 0x10往sp寄存器写入0x10

load_image加载image文件比如load_image filename address bin min_address max_length其中filename表示要加载的文件address表示要加载到哪个地址bin表示文件的类型min_address表示最小地址该值与address相同即可max_length表示文件的最大长度。目前使用这个命令来下载C语言程序。

verify_image比如verify_image filename offset其中filename表示已经下载了的文件offset表示从哪个地址开始校验。使用这个命令来校验下载进去的程序是否正确。

load_bin如果觉得load_image命令的参数比较多可以使用load_bin命令比如load_bin bin_file 0x0 1表示将bin_file二进制文件下载到0x0地址处并且校验。

2.3.2使用gdb进行调试

除了使用telnet进行调试之外还可以使用gdb进行调试这也是大部分IDEeclipse等所使用的调试方式。

openocd连上之后打开另一个终端执行以下命令运行gdb

/opt/riscv32/bin/riscv32-unknown-elf-gdb ~/tinyriscv/sdk/examples/simple/simple

接着,设置一下超时时间:

set remotetimeout 2000

连接openocd服务

target remote localhost:3333

加载程序:

load

之后就可以用gdb命令来调试了比如打印mul变量的值

print mul

gdb

注意如果要用gdb进行调试则编译C程序时必须加上-g参数。