# XSPdb
**Repository Path**: mingyuncode/XSPdb
## Basic Information
- **Project Name**: XSPdb
- **Description**: https://github.com/OpenXiangShan/XSPdb.git
- **Primary Language**: Unknown
- **License**: MulanPSL-2.0
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-01-15
- **Last Updated**: 2026-01-15
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
## XSPdb 介绍
[英文介绍](/README.en.md)
XSPdb 是基于Python pdb调试器构建的专用RSIC-V IP调试工具,针对香山difftest接口核进行了定制,提供类GDB的交互式调试能力。该工具集成终端命令行界面、RTL级波形调试开关、自动化脚本回放、系统快照保存/恢复等基础功能模块,同时实现寄存器初始化配置、指令集反汇编解析等核心调试能力,并扩展支持断点条件触发、观察点实时追踪、寄存器/内存可视化监控等高级调试场景,通过硬件信号级调试接口与软件执行状态联动机制,为RISC-V IP的软硬件协同验证提供解决方案。
XSPdb 截图
### 安装依赖
下载仓库,安装依赖:
```
git clone https://github.com/OpenXiangShan/XSPdb.git # 下载仓库
pip install -r XSPdb/requirements.txt # 安装依赖
pip install . # 根据需要确定是否需要安装
```
如果不需要源码集成,也可通过 pip 直接安装:
```bash
pip3 install XSPdb@git+https://github.com/OpenXiangShan/XSPd@master
```
### 快速开始
下载仓库安装依赖后,在仓库中执行`make test`
```bash
cd XSPdb
make test
```
上述命令依次执行以下内容:
- 下载XiangShan的二进制Python版本
- 下载测试bin文件
- 运行`example/test.py`进入XSPdb交互模式
示例输出与交互如下:
```bash
LD_PRELOAD=XSPython/xspcomm/libxspcomm.so.0.0.1 PYTHONPATH=. python3 example/test.py
Using simulated 32768B flash
[Info] reset complete
> XSPdb/example/test.py(13)test_sim_top()
-> while True:
(XiangShan) # 进入交互模式,可通过tab查询所有可用命令
(XiangShan)xui # 进入ui模式
(XiangShan)xload ready-to-run/microbench.bin # 加载需要运行的bin文件,命令可通过tab补全
(XiangShan)xistep # 执行到下一次指令提交
(XiangShan)xstep 10000 # 执行10000个cycles
```
默认情况下,XSPdb会寻找系统中的`spike-dasm`进行反汇编,如果没找到,则采用`capstone`进行反汇编(部分指令`capstone`无法识别)。
### 手动测试
XSPdb 交互的对象是 XiangShan的Python版本,因此需要提前构建,具体构建方法可参考:[TBD](TBD)。
为了方便测试,也可以在[Release中](https://github.com/OpenXiangShan/XSPdb/releases)下载编译好的版本:
```bash
cd XSPdb
wget https://github.com/OpenXiangShan/XSPdb/releases/download/v0.1.0-test/XSPython.tar.gz
wget https://github.com/OpenXiangShan/XSPdb/releases/download/v0.1.0-test/ready-to-run.tar.gz
tar xf XSPython.tar.gz
tar xf ready-to-run.tar.gz
```
然后,通过以下代码进行测试:
```bash
LD_PRELOAD=XSPython/xspcomm/libxspcomm.so.0.0.1 PYTHONPATH=. python3 example/test.py
```
使用LD_PRELOAD提前加载xspcomm的原因是防止本地系统xspcomm库与XSPython中的,有版本冲突.
### 命令行模式(非交互):
除了提供交互模式外,XSPdb也提供了批处理模式,可以把它当成一个全系统仿真器使用,其入口为 `emu.py`,例如
```bash
./emu.py -i ready-to-run/microbench.bin
```
`emu.py`在执行过程中,可以通过 ctrl+c 中断进入XSPdb交互模式。具体命令行参数如下:
```bash
usage: emu.py [-h] [-v] [-C MAX_CYCLES] [-i IMAGE] [-b WAVE_BEGIN] [-e WAVE_END] [-t INTERACT_AT] [-l] [--log-file LOG_FILE]
[-bi BATCH_INTERVAL] [-s SCRIPT] [-r REPLAY] [--debug-level {debug,info,warn,erro}]
[--log-level {debug,info,warn,erro}] [-pc PC_COMMITS] [--sim-args SIM_ARGS] [-F FLASH] [--no-interact]
[--wave-path WAVE_PATH] [--ram-size RAM_SIZE] [--diff DIFF] [--cmds CMDS] [--cmds-post CMDS_POST]
[--mem-base-address MEM_BASE_ADDRESS] [--flash-base-address FLASH_BASE_ADDRESS]
[--diff-first-inst_address DIFF_FIRST_INST_ADDRESS] [--trace-pc-symbol-block-change] [--max-run-time MAX_RUN_TIME]
XSPdb Emulation Tool
options:
-h, --help show this help message and exit
-v, --version show program's version number and exit
-C MAX_CYCLES, --max-cycles MAX_CYCLES
maximum simulation cycles to execute
-i IMAGE, --image IMAGE
image file to load and run
-b WAVE_BEGIN, --wave-begin WAVE_BEGIN
start waveform dump at the specified cycle
-e WAVE_END, --wave-end WAVE_END
stop waveform dump at the specified cycle
-t INTERACT_AT, --interact-at INTERACT_AT
enter interactive mode at the specified cycle
-l, --log enable logging output
--log-file LOG_FILE log file name (default: ./XSPdb.log)
-bi BATCH_INTERVAL, --batch-interval BATCH_INTERVAL
interval time (seconds) between batch commands
-s SCRIPT, --script SCRIPT
script file to execute
-r REPLAY, --replay REPLAY
replay log file
--debug-level {debug,info,warn,erro}
set debug level
--log-level {debug,info,warn,erro}
set log level
-pc PC_COMMITS, --pc-commits PC_COMMITS
run until the specified number of commits; -1 means no limit
--sim-args SIM_ARGS additional simulator arguments (comma-separated)
-F FLASH, --flash FLASH
flash binary file for simulation
--no-interact disable interactive mode (do not handle the ctrl-c signal)
--wave-path WAVE_PATH
output path for waveform file
--ram-size RAM_SIZE simulation RAM size (e.g., 8GB or 128MB)
--diff DIFF path to REF shared object for difftest testing
--cmds CMDS XSPdb commands to execute before run (\n for newline)
--cmds-post CMDS_POST
XSPdb commands to execute after script/replay (\n for newline)
--mem-base-address MEM_BASE_ADDRESS
base address of memory
--flash-base-address FLASH_BASE_ADDRESS
base address of flash
--diff-first-inst_address DIFF_FIRST_INST_ADDRESS
first instruction address for difftest
--trace-pc-symbol-block-change
enable tracing of PC symbol block changes
--max-run-time MAX_RUN_TIME
maximum run time (eg 10s, 1m, 1h)
```
### 常用命令:
- `xload` Load a binary file into memory (加载指定bin文件到内存)
- `xflash` Load a binary file into Flash (加载指定bin文件到Flash)
- `xreset_flash` Reset Flash (重置Flash)
- `xexport_bin` Export Flash + memory data to a file (导出Flash和内存数据到文件)
- `xexport_flash` Export Flash data to a file (导出Flash数据到文件)
- `xexport_ram` Export memory data to a file (导出内存数据到文件)
- `xload_script` Load an XSPdb script (加载XSPdb脚本)
- `xmem_write` Write memory data (写入内存数据)
- `xbytes_to_bin` Convert bytes data to a binary file (将字节数据转换为bin文件)
- `xnop_insert` Insert NOP instructions in a specified address range (在指定地址范围插入NOP指令)
- `xclear_dasm_cache` Clear disassembly cache (清除反汇编缓存)
- `xprint` Print the value and width of an internal signal (打印内部信号的值和宽度)
- `xset` Set the value of an internal signal (设置内部信号的值)
- `xstep` Step through the circuit (逐步执行电路)
- `xistep` Step through instructions (逐步执行指令)
- `xwatch_commit_pc` Watch commit PC (监视提交的PC)
- `xunwatch_commit_pc` Unwatch commit PC (取消监视提交的PC)
- `xwatch` Add a watch variable (添加监视变量)
- `xunwatch` Remove a watch variable (移除监视变量)
- `xpc` Print the current Commit PCs (打印当前提交的PC)
- `xexpdiffstate` Set a variable to difftest_stat (将变量设置为difftest_stat)
- `xexportself` Set a variable to XSPdb self (将变量设置为XSPdb自身)
- `xreset` Reset DUT (重置DUT)
- `xlist_xclock_cb` List all xclock callbacks (列出所有xclock回调)
- `xui` Enter the Text UI interface (进入文本用户界面)
- `xdasm` Disassemble memory data (反汇编内存数据)
- `xdasmflash` Disassemble Flash data (反汇编Flash数据)
- `xdasmbytes` Disassemble binary data (反汇编二进制数据)
- `xdasmnumber` Disassemble a number (反汇编一个数字)
- `xbytes2number` Convert bytes to an integer (将字节转换为整数)
- `xnumber2bytes` Convert an integer to bytes (将整数转换为字节)
- `xparse_instr_file` Parse uint64 strings (解析uint64字符串)
- `xload_instr_file` Load uint64 strings into memory (加载uint64字符串到内存)
- `xparse_reg_file` Parse a register file (解析寄存器文件)
- `xload_reg_file` Load a register file (加载寄存器文件)
- `xset_iregs` Set Flash internal registers (Integer) (设置Flash内部寄存器(整数))
- `xset_mpc` Set the jump address (by mpc) after Flash initialization, default is 0x80000000 (设置Flash初始化后的跳转地址(通过mpc),默认值为0x80000000)
- `xget_mpc` Get the jump address after Flash initialization, default is 0x80000000 (获取Flash初始化后的跳转地址,默认值为0x80000000)
- `xset_fregs` Set Flash floating-point registers (general) (设置Flash浮点寄存器(通用))
- `xset_ireg` Set a single Flash internal register (Integer) (设置单个Flash内部寄存器(整数))
- `xset_freg` Set a Flash floating-point register (设置Flash浮点寄存器)
- `xlist_flash_iregs` List Flash internal registers (列出Flash内部寄存器)
- `xlist_flash_fregs` List Flash floating-point registers (列出Flash浮点寄存器)
- `xlist_freg_map` List floating-point register mappings (列出浮点寄存器映射)
可通过`xcmds`列出所有命令,说明和所在module(通过`xapis`列出所有API,说明和所在module)。