RV-LINK:用RISC-V开发板做RISC-V仿真器

RV-LINK:用RISC-V开发板做RISC-V仿真器

RV-LINK v0.1 已经发布:https://gitee.com/zoomdy/RV-LINK/releases

用基于RISC-V的MCU开发板来实现RISC-V的仿真器,取名RV-LINK。(2019-09-27)用 GD32VF103C-START 和 Longan Nano 实现了调试功能,可以调试 GD32VF103。

https://blog.csdn.net/zoomdy/article/details/100057361
zoomdy at 163 dot com

项目主页

https://gitee.com/zoomdy/RV-LINK

特性

  • 使用市面上现有的 RISC-V 开发板实现 RV-LINK 仿真器,作为 RV-LINK 的开发板要能够支持 USB Device。
    • Longan Nano 开发板,淘宝有售
    • GD32VF103C-START 开发板,淘宝有售
  • RV-LINK 通过 USB 导出虚拟串口,串口实现 GDB Remote Serial Protocol 协议,使 RV-LINK 作为 GDB Server 直接与 GDB 连接;
  • 目标端支持 JTAG 接口。
  • 目标端支持兼容 RISC-V Debug spec 的 RISC-V 处理器。
  • 不需要 OpenOCD 之类的软件,RV-LINK 直接与GDB对接,这是RV-LINK的显著特征,没有为什么,就是想完全用 RISC-V 来实现一个完整的仿真器。
  • 支持任务感知(task-aware、OS-aware),陆续添加主流RTOS的任务感知。

设计

  • host,主机接口:USB,实现虚拟串口。
  • link,仿真器本身,使用任意一款支持USB Device 的 RISC-V开发板,已经在 GD32VF103C-START 和 Longan Nano 这两款板子上实现基本功能。
  • target,目标处理器,兼容 RISC-V Debug spec 的 RISC-V 处理器,已经支持的 RISC-V:
    • GD32VF103V。
  • jtag,JTAG 接口:标准 JTAG 接口实现,使用 I/O 模拟,或其它专用外设实现(例如SPI?)
  • 系统组件
    • 使用 Protothreads。
    • link 组件,与仿真器硬件密切相关,包括 USB Device 驱动,JTAG 接口驱动。link 组件要提供抽象接口,允许支持多种 link 硬件。源代码中包含多个 link 的支持,编译时通过配置选择一个。
    • usb serial 组件,与硬件无关的虚拟串口。
    • gdb-server 组件,实现GDB Remote Serial Protocol。
    • target 组件,与目标处理器密切相关,包括 Flash 烧录算法。target 组件要提供抽象接口,允许支持多种target 组件。源代码中包含多个 target 的支持,编译时通过配置选择一个系列。
    • task-aware 组件,任务感知组件。task-aware 组件要提供抽象接口,允许支持多种 RTOS。源代码中包含多个 task-aware 的支持,编译时通过配置选择一个或多个。低优先级。
    • usb-storage 组件,优盘拖文件形式下载目标固件。低优先级。可以升级RV-LINK固件,也可以升级目标板固件。默认情况下升级目标板固件,优盘名称包含目标板处理器型号,通过设置RV-LINK后,可以升级RV-LINK自身的固件,此时优盘名称为RV-LINK。
      • GD32VF103 支持 USB DFU 升级固件。
    • gprof-catch 组件,定时获取 target 的 pc 寄存器,生成 gprof 文件,作为性能分析。低优先级。
    • var-view 组件,不停机察看 target 变量。低优先级。
    • trace 组件,软 trace 输出,target 通过该接口输出 trace 信息。低优先级。
  • 工作模式
    • emulator 模式:与GDB连接,调试时使用。
    • profiler 模式:串口输出 gprof 输出文件,代码覆盖分析、性能分析时使用。
  • 开发环境
    • 构建工具:Makefile 做构建,独立于IDE。
    • 主机:优先支持 Linux,支持 Windows
    • 编译器:gcc
    • 集成开发环境:Eclipse,任意版本
  • 辅助程序
    • 提供图形用户界面
    • 自动查找连接到电脑上的 RV-LINK
    • 根据用户选择的 link、target、os自动生成 RV-LINK 固件,并下载到 RV-LINK,也包括其它的可选项
    • 察看 RV-LINK 状态,修改 RV-LINK 配置
    • 辅助程序是可选的,在没有辅助程序的情况下,使用虚拟串口完全可以实现所有功能

实施

  • GD32VF103C-START已经到货,GD32VF103V_EVAL刚下单(2019-09-02)。
  • 在Xubuntu 16.04环境下配置了GD32VF103C-START开发环境:Eclipse CDT 在Marketplace 搜索安装 GNU MCU Eclipse 插件,OpenOCD和GNU工具链使用芯来网站下载的版本。OpenOCD 的配置脚本从 Windows 版的NucleiStudio_IDE提取,文件名是openocd_gdlink.cfg。或者从下文的资料中拷贝。
  • GD32VF103C-START USB转串口 Demo 运行成功(2019-09-01)。
  • GD32VF103C-START JTAG 接口,读取K210的idcode和dtmcs成功(2019-09-02)。
  • 用 GD32VF103C-START 和 Longan Nano 实现了调试功能,可以调试 GD32VF103(2019年9月25日)。

资料

openocd_gdlink.cfg

adapter_khz     1000
reset_config srst_only
adapter_nsrst_assert_width 100

interface cmsis-dap

transport select jtag

autoexit true

set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1000563d

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size 20480 -work-area-backup 0

# Work-area is a space in RAM used for flash programming
if { [info exists WORKAREASIZE] } {
   set _WORKAREASIZE $WORKAREASIZE
} else {
   set _WORKAREASIZE 0x5000
}

# Allow overriding the Flash bank size
if { [info exists FLASH_SIZE] } {
    set _FLASH_SIZE $FLASH_SIZE
} else {
    # autodetect size
    set _FLASH_SIZE 0
}

# flash size will be probed
set _FLASHNAME $_CHIPNAME.flash

flash bank $_FLASHNAME gd32vf103 0x08000000 0 0 0 $_TARGETNAME
riscv set_reset_timeout_sec 1
init

halt

你可能感兴趣的:(RV-LINK)