新ちゃん 发表于 2020-8-11 15:00:09

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

本帖最后由 新ちゃん 于 2020-8-21 03:06 编辑

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://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 { } {
   set _WORKAREASIZE $WORKAREASIZE
} else {
   set _WORKAREASIZE 0x5000
}

# Allow overriding the Flash bank size
if { } {
    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本篇完,感谢关注:RISC-V单片机中文网
页: [1]
查看完整版本: RV-LINK:用RISC-V开发板做RISC-V仿真器