主要参考:

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

3.再打开另一个CMD窗口连接到openocd server,即运行:

telnet localhost 4444

4.通过load_image命令将bin程序下载到FPGA,比如:

load_image example.bin 0x0 bin 0 100000

5.通过verify_image命令校验下载是否成功,比如:

verify_image example.bin 0x0

6.最后输入reset命令即可让下载的程序跑起来。

reset

        运行结果:

        处理器中的初始代码:

        烧录比特流后:

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

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

> load_image kernel.bin 0x0 bin

> reset

        成功更新程序。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐