USRP X410联合VIVADO抓取工程内部信号

发布于:2025-06-12 ⋅ 阅读:(20) ⋅ 点赞:(0)

一、背景

        由于最近做的项目涉及对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载入进去啦。

五,总结

        工作记录,用法可能比较少见,以防自己后续哪一步搞忘了,希望可以偶尔帮到一些遇到同样问题的朋友。