一、背景
由于最近做的项目涉及对uhd官方工程FPGA部分的代码修改,因此上板debug必不可少;常规FPGA开发流程中,都是在vivado跑出bit和ltx文件,但是在开发X410过程中,FPGA镜像的获取要么是从官方直接下载,要么就是通过rfnoc_image_builder指令去构建,前者显然没有可操作的空间,那么在执行rfnoc_image_builder指令的过程中,如何插入debug代码就是我们需要解决的问题。
二、rfnoc_image_builder
先介绍一下该指令的用法
其中常用的有以下参数:
-y YAML_CONFIG, --yaml-config YAML_CONFIG
Path to yml configuration file
指定本次生成FPGA镜像的配置文件,这个yml文件很重要,可以通过修改yml来改变fpga部分的功能、接口等,后续还得在这块深入摸索一下,本次只需要指定官方写好的yml文件即可。
-F FPGA_DIR, --fpga-dir FPGA_DIR
Path to directory for the FPGA source tree. Defaults
to the FPGA source tree of the current repo.
指定FPGA的source路径,必选项;
-s, --save-project Save Vivado project to disk
(重要)在生成FPGA镜像过程中将自动生成xpr文件,如果不勾选这个选项,则全程都会通过脚本执行完生成bit文件的所有步骤;因此-s建议勾上;
-g, --GUI Open Vivado GUI during the FPGA building process
通过GUI模式生成bit文件,但需要注意的是,如果没有勾选-s,虽然可以在过程中看到vivado和代码,但是并没有xpr工程文件,无法像传统FPGA开发流程一样手动对代码进行综合、布线等操作。
-p VIVADO_PATH, --vivado-path VIVADO_PATH
Path to the base install for Xilinx Vivado if not in
default location (e.g., /tools/Xilinx/Vivado).
指定VIVADO工具的路径,必选项;
-n IMAGE_CORE_NAME, --image-core-name IMAGE_CORE_NAME, --image_core_name IMAGE_CORE_NAME
Name to use for the RFNoC image core. Defaults to name
of the image core YML file, without the extension.
指定本次FPGA镜像工程的名字,会在x400/目录下单独形成一个文件夹,里面包含这次镜像生成的所有相关文件,方便迭代开发和管理;
综合上述,我在生成FPGA镜像用到的完整指令如下:
rfnoc_image_builder -y x410_CG_400_rfnoc_image_core.yml -n x410_ila_test -s --fpga-dir /home/fpga/uhd/uhd-master/fpga/ --vivado-path=/tools/vivado/2021/Vivado
三、在代码中插入ILA(ip core)
正常执行完上一章节的rfnoc_image_builder后,生成的bit文件其实与官方的某个版本一样,取决于你用的哪个配置文件yml,这个时候就可以用vivado打开xpr文件,在想要插入ILA的模块里进行修改。
需要注意的是,有的模块是根据配置文件实时生成的,如上图所示,这种模块插入自己的代码后,在下一次build过程中又会被覆盖掉,解决办法有待摸索;
但是大部分功能代码都是在lib库里调用的,这部分的代码修改之后会一直生效,不会因为你的迭代开发而被覆盖,本次主要就从这种类型的模块入手,插入ILA ip core。
1)插入相关代码后,进入下述路径,新建文件夹ila_0(以添加ILA为例,ila_0是我生成ILA时的名字,必须保持一样)
2)将xci文件复制到该路径下,并新建Makefile.inc文件,图中划线部分需要自己修改,参照格式即可;
3)在ip路径下有一个makefile总文件,在里面新增调用;
(上图并未截全,记得照葫芦画瓢,参照格式添加上自己的IP信息)
4)至此就将IP新增进编译库中了,再次敲rfnoc_image_builder指令就可以看到会编译这个新增IP,并在下图目录build-ip文件夹中新增对应文件;
5)rfnoc_image_builder跑完之后,可以看到在文件夹中生成了ltx文件
如果想插入其他的IP应该也是同理。
四、烧录FPGA镜像+上板调试
给x410烧录镜像的方式之前有提过,用以下指令即可(先别急着执行):
uhd_image_loader --args type=x4xx,addr=<x410 static ip>, --fpga-path <path to bit>
这一步又存在一个坑点,如果直接执行,会报错,然后x410设备就变砖了,此时可以跳转我上一篇文章进行修复~
https://blog.csdn.net/yanzuwu233/article/details/146951770?spm=1001.2014.3001.5502https://blog.csdn.net/yanzuwu233/article/details/146951770?spm=1001.2014.3001.5502 (关键一步)报错的点是说找不到DTS文件,关于这个DTS文件我也不太清楚包含什么信息,但是工程文件夹里其实有DTS文件,只不过它原本叫X410.dts,而生成的bit叫x4xx.bit,因此就会报错,我尝试将DTS文件重命名为x4xx.dtx(参考第三节第5)步中的插图)后,就可以成功烧录了。
接着打开VIVADO的hardware manager,(需要将X410设备的jtag口连接电脑)此时bit不需要再烧录了,点击右下角红色框框处,导入ltx后就可以把ILA载入进去啦。
五,总结
工作记录,用法可能比较少见,以防自己后续哪一步搞忘了,希望可以偶尔帮到一些遇到同样问题的朋友。