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-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

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章