为处理器在线更新程序——基于jtag与openocd
RISCV嵌入式开发
主要参考:
README.md · liangkangnan/tinyriscv_vivado - Gitee.com
手把手教你移植 tinyriscv 到FPGA上_shoubashoutinyriscv-CSDN博客
- FPGA开发板:Genesys2
- 调试器:CMSIS-DAP
进入tinyriscv/tools/openocd目录,可以修改tinyriscv.cfg文件的参数,这里只修改了TCK的频率为1MHz:
adapter driver cmsis-dap
adapter speed 1000
reset_config srst_only
adapter srst pulse_width 100
transport select jtag
set _CHIPNAME riscv
jtag newtap $_CHIPNAME cpu -irlen 5 -expected-id 0x1e200a6f
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME riscv -chain-position $_TARGETNAME
riscv set_reset_timeout_sec 1
init
halt
进行jtag接口的移植与管脚约束:
set_property -dict { PACKAGE_PIN AK29 IOSTANDARD LVCMOS33 } [get_ports { jtag_TCK }];
create_clock -name jtag_clk_pin -period 1000 [get_ports {jtag_TCK}]; #1MHz
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets jtag_TCK]
set_property -dict { PACKAGE_PIN AH30 IOSTANDARD LVCMOS33 } [get_ports { jtag_TMS }];
set_property -dict { PACKAGE_PIN AJ27 IOSTANDARD LVCMOS33 } [get_ports { jtag_TDI }];
set_property -dict { PACKAGE_PIN AC26 IOSTANDARD LVCMOS33 } [get_ports { jtag_TDO }];
其中jtag_TCK的管脚约束需要额外注意,四个管脚选择开发板上任意空闲管脚即可,这里选择了pmod JC1~4四个管脚。
之后根据步骤运行:
3.步骤(通过JTAG在线更新程序)
1.将综合、实现后生成的bit文件下载到FPGA里。
2.将CMSIS-DAP调试器连接到FPGA,然后打开一个CMD窗口运行openocd服务:
openocd.exe -f tinyriscv.cfg3.再打开另一个CMD窗口连接到openocd server,即运行:
telnet localhost 44444.通过load_image命令将bin程序下载到FPGA,比如:
load_image example.bin 0x0 bin 0 1000005.通过verify_image命令校验下载是否成功,比如:
verify_image example.bin 0x06.最后输入reset命令即可让下载的程序跑起来。
reset
运行结果:

处理器中的初始代码:

烧录比特流后:

通过jtag更新到指令ram的代码:

使用riscv-gnu-toolchain编译链生成kernel.bin文件,由于我的指令存储器初始地址是0,因此运行:
> load_image kernel.bin 0x0 bin
> reset

成功更新程序。
更多推荐



所有评论(0)