在RISC-V 的学习中, 我们提供一种方法,通过uart 口,将软件人员编写的代码下载到fpga 开发板上, 这样用户就可以快速编写软件程序并且验证软件,而不需要每次都去综合fpga, 配置fpga 才能进行验证。 大大方便了软件人员的开发。这个功能有些类似jtag 的程序下载。
相关参考文章:
RISC-V 教学教案
软件工程包:
asm_compile软件包下载:
[content_control]asm_compile_2021_0716_cmpress.zip[/content_control]
在我们学习RISC-V 的教程中, 会给大家一个软件工程包。 (asm_compile 目录,具体目录按照当前下载的版本为准):

创建自建工程:
在这个工程中包含一些已经存在demo 工程, 和gcc 的编译软件。在asm_compile 目录下有很多目录, 每个目录可以认为是一个单独的工程。 如果用户想建立自己的一个工程, 只要在asm_compile 目录下,建立一个自己的目录即可,同时自建的目录也是自建工程名称。

在my_project 目录下建立src 目录, 将用户所写的 .s .c 文件放到src 目录下,(注: src 目录下仍然可以还有其他源文件子目录),如果有头文件 ,将在 my_project 下 创建inc 目录; 如果没有头文件需要,则不需要建立这个目录。注:src,inc这两个目录名字必须是固定的,不要更改为其他名称。

添加自建文件到相应的目录中去,如果需要头文件,需要建立inc 目录


到此,工程文件建立成功,如果用户还需要添加其他的.s .c 文件, 直接放到src 目录下即可; 如果需要再次添加 头文件 ,只要添加到inc 目录下即可。
最好组织可以执行文件时,所需要的连接文件在asm_compile 目录下的sys.lds 文件, 这个文件对当前目前下的所有工程都是适用的(这个文件和fpga 的相关硬件资源相关,比如itcm的大小(rom), dtcm 的大小(ram))
工程编译:
win + R 键组合,输入cmd 打开命令行窗口, 进入asm_compile 所在的目录下

运行 run my_project (run + 工程名字)

如果出现 fii_asm.exe convert OK. 则整个工程编译成功, 如果不成功, 可以查看命令行内的错误信息。run命令 + 工程名字 会自动检查工程目录下的.s .c .h 文件,将工程下的文件进行编译,连接,最终输出相关的可执行文件,提供给fpga 开发者使用。包括coe,sim,mif ,bin 文件等。 同时也可以查看相关的反汇编文件,检查软件的相关错误。
查看生成文件:

在my_project目录下,会生成obj 目录, 这个目录下包括所有工程需要编译的文件所生成的obj 文件。
在my_project 目录下,会生成fii.bin , fii.coe, fii.map, fii.mif, fii.sim, fii.txt 文件. 其中:
fii.bin :工程可执行文件(二进制)。 这个文件 可以使用uart 工具软件下载到fpga 开发板上,并且自动运行。
fii.coe: 这个文件可以在vivado 工程中使用, 放入ITCM memory 中, 在综合后的fpga 工程中, 只要上电,就可以直接运行。相当于将软件烧录到fpga 中一样。
fii.mif: 这个文件可以在quartus 工程中使用, 放入ITCM memory 中, 在综合后的fpga 工程中, 只要上电,就可以直接运行。相当于将软件烧录到fpga 中一样。
fii.map: 查看软件中各种函数,变量所在的位置。
fii.sim: 用于vivado 仿真使用, vivado 可以直接调用这个文件,在vivado 工程中,直接仿真软件刚刚编写的工程,详情请参考:Vivado 仿真工程中coe 文件的装载
fii.txt: 用于查看反汇编文件。 如果使用run my_project ,反汇编文件中32个通用寄存器为 x0 – x31;

如果使用的命令为 run my_project abi , 则反汇编形成的是abi 格式的文件:

my_project.* 和fii.* 的内容都是一样的, 同时将fii.* 复制了一份 ,放入到 asm_compile 目录下, 方便下载使用。
FPGA 载入软件工程:
- 首先, fpga 下载risc-v fpga 工程。 (让risc-v cpu 跑起来)。
- 按“OK” 键, 暂停risc-v cpu 工作,(准备下载,这里以prx100t 开发板为例 参考:FII-PRX100-D(ARTIX 100T,XC7A100T)硬件参考指南 )

3.通过uart 软件,选择my_project.bin文件,hex文件发送,这时,软件就可以在fpga 开发板上跑起来了。

最后 点击发送文件, 这样软件所编写的工程(my_projcet) 就被成功的下载到fpga 中去了