在移植VexRiscv到FPGA的时候,需要使用到openocd,但是Vex的JTAG并非标准的JTAG,需要使用到openocd-riscv,属于是定制版openocd。作者并未提供Windows,所以要么找别人编译好的,要么自行编译。我在whycan上找到了别人编译的版本,这个版本比较旧,测试用CMSIS-DAP可以正常使用。如果想自己编译的话。可以按照以下步骤进行。
安装环境
这里使用msys来搭建,使用msys中的mingw64,msys地址https://www.msys2.org/,安装之后打开MSYS MINGW64。
pacman -S mingw-w64-x86_64-toolchain mingw-w64-x86_64-libyaml mingw-w64-x86_64-libusb mingw-w64-x86_64-hidapi mingw-w64-x86_64-libftdi
如果在编译过程中缺少什么依赖就到MSYS2 Packages上去查找相关的包安装即可。在github上获取openocd-riscv的源码并编译。
编译工程
git clone --recursive https://github.com/SpinalHDL/openocd_riscv.git
还要对源码进行一点小修改才能使用,在openocd_riscv\jimtcl\auto.def中的427行左右,将 if {[cc-check-inline] && [is-defined inline]} {
修改为 if {[is-defined inline]} {
。
./bootstrap
./configure --enable-ftdi --enable-static --enable-dummy --enable-stlink --enable-cmsis_dap_v2 --enable-ft232r --enable-jlink --enable-cmsis_dap --disable-werror
make -j16
make install DESTDIR=/c/ #/c/是C盘根目录
执行完上述命令后就会在C盘根目录生成一个名为mingw64的文件夹,里面就是openocd-riscv编译出来的文件,可以复制到任意位置使用。
使用示例
在Linux下生成Vex的Soc的时候还会生成一个CPU0.yaml,在openocd-riscv中的share\openocd\scripts\target目录里面有一个briey.cfg,该文件是VexRiscv的briey实例的openocd配置,默认是用作虚拟调试的,需要在里面添加调试器才能使用DAP来调试,修改好的文件如下。
set _ENDIAN little
set _CPUTAPID 0x10001fff
adapter driver cmsis-dap
transport select jtag
adapter speed 4000
adapter srst delay 260
jtag_ntrst_delay 250
set _CHIPNAME fpga_spinal
jtag newtap $_CHIPNAME bridge -expected-id $_CPUTAPID -irlen 4 -ircapture 0xe -irmask 0xF
target create $_CHIPNAME.cpu0 vexriscv -endian $_ENDIAN -chain-position $_CHIPNAME.bridge -coreid 0 -dbgbase 0xF00F0000
vexriscv readWaitCycles 12
vexriscv cpuConfigFile $BRIEY_CPU0_YAML
poll_period 50
init
echo "Halting processor"
soft_reset_halt sleep 1000
可以修改成以下参数,使用ftdi来调试。
#adapter driver cmsis-dap
adapter driver ftdi
ftdi vid_pid 0x0403 0x6010 #0x0403和0x6010是ftdi调试器的vid和pid,可在设备管理器查看
需要注意的是,Windows下默认的ftdi驱动是不被openocd支持的,需要使用zadig转换成winusb才行,不过我在使用ftdi进行测试的时候似乎不能正常检测到CPU。
编译好的openocd-riscv。
参与讨论
(Participate in the discussion)
参与讨论
没有发现评论
暂无评论