查看: 826|回复: 0
收起左侧

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

[复制链接]

  离线 

  • TA的每日心情
    奋斗
    2021-1-15 13:53
  • 签到天数: 26 天

    [LV.4]

    发表于 2020-8-11 15:00:09 | 显示全部楼层 |阅读模式

    有人预言,RISC-V或将是继Intel和Arm之后的第三大主流处理器体系。欢迎访问全球首家只专注于RISC-V单片机行业应用的中文网站

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    本帖最后由 新ちゃん 于 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-STARTLongan 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
    1. adapter_khz     1000
    2. reset_config srst_only
    3. adapter_nsrst_assert_width 100

    4. interface cmsis-dap

    5. transport select jtag

    6. autoexit true

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

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

    12. # Work-area is a space in RAM used for flash programming
    13. if { [info exists WORKAREASIZE] } {
    14.    set _WORKAREASIZE $WORKAREASIZE
    15. } else {
    16.    set _WORKAREASIZE 0x5000
    17. }

    18. # Allow overriding the Flash bank size
    19. if { [info exists FLASH_SIZE] } {
    20.     set _FLASH_SIZE $FLASH_SIZE
    21. } else {
    22.     # autodetect size
    23.     set _FLASH_SIZE 0
    24. }

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

    27. flash bank $_FLASHNAME gd32vf103 0x08000000 0 0 0 $_TARGETNAME
    28. riscv set_reset_timeout_sec 1
    29. init

    30. halt
    复制代码
    本篇完,感谢关注:RISC-V单片机中文网




    下一篇:RV-LINK:GDB 使用 RV-LINK 仿真器调试 RISC-V 程序
    RISCV作者优文
    全球首家只专注于RISC-V单片机行业应用的中文网站
    回复

    使用道具 举报

    高级模式
    B Color Image Link Quote Code Smilies

    本版积分规则

    关闭

    RISC-V单片机中文网上一条 /2 下一条


    版权及免责声明|RISC-V单片机中文网 |网站地图

    GMT+8, 2024-4-19 20:41 , Processed in 0.909777 second(s), 45 queries .

    快速回复 返回顶部 返回列表