ZU+RFSoC之RFDC API介绍和使用

来源:Fisher Yang,来源:FPGA FAE技术分享选集

RF Data Converters驱动API是AMD Xilinx为RFSoC提供的一套软件接口,用于控制Data Converters(RF-ADC和RF-DAC)的硬件功能。它作为用户应用程序与底层硬件寄存器之间的抽象层,封装了复杂的配置流程和时序控制,使开发者能够通过函数调用直接管理射频信号链的关键参数。

RF Data Converters驱动API在绝大多数实际应用场景中是必须的,尤其是在需要动态控制、多设备同步或复杂校准的场景。虽然理论上系统参数完全静态不变(例如仅需一次初始化且无需动态调整)或者通过直接寄存器操作可以不用API,但缺点是代码可维护性差、无法适应需求变更、且同步功能难以实现,显著增加开发难度、调试风险和后期维护成本。对于基于RFSoC的射频系统开发,掌握并合理使用驱动API是高效、可靠实现设计目标的必要前提。

一、RFDC API介绍

AMD Xilinx的RFDC驱动API提供了高度灵活的配置能力,涵盖混频器、QMC、时钟同步等关键功能,支持动态更新与多设备同步。RFDC驱动基于libmetal 构建,裸机和 Linux 使用相同的驱动程序。两个软件平台的驱动程序都在AMD提供的 libmetal 软件层上运行。这种设计选择带来了多方面的技术优势,尤其在异构计算平台(如RFSoC的ARM + FPGA 架构)中体现得尤为明显:可以统一硬件抽象层,适配多操作系统(Linux/RTOS/裸机)及Xilinx异构平台(如RFSoC、Versal),降低移植成本,简化中断处理,内存与缓存的一致性,与OpenAMP深度集成,支持复杂异构系统架构等等。

1.png

驱动程序由以下文件组成:

• API

xrfdc.c : 此文件中实现了用户接口API函数。

xrfdc.h : 此文件中提供了用户接口API原型。该文件提供了驱动程序实例结构的原型,以及 API中使用的所有其他结构的原型。该文件实现了实用的内联函数用于访问驱动程序和IP中的各种数据。

xrfdc_mts.c : 该文件实现了多Tile同步API函数。

xrfdc_mixer.c : 该文件实现了混频器API函数。

xrfdc_clock.c : 该文件实现了与时钟相关的API函数。

xrfdc_mb.c : 该文件实现了多频段API函数。

xrfdc_ap.c : 该文件实现了模拟路径API函数。

xrfdc_dp.c : 该文件实现了数字路径API函数。

xrfdc_sinit.c : 该文件实现了初始化API函数。

•硬件寄存器映射

xrfdc_hw.h : 该文件提供了硬件寄存器映射的定义。同时,该文件还

提供了Zynq UltraScale+ RFSoC寄存器接口中各相关字段的掩码。

• 中断处理

xrfdc_intr.c : 实现了处理 IP 核各类中断和错误的函数。

关于RFDC的API函数、数据结构等详细介绍可以参考Xilinx的PG269文档。

二、RFDC API使用

在大规模MIMO通信、相控阵雷达、多芯片级联扩展等应用中需要多Tile的ADC、DAC严格对齐同步。在RF Data Converters启动时,同一Tile内的转换器始终是对齐的,但不能保证确定的延时。在多Tile系统中,不能保证具有确定的延时,甚至不能保证跨Tile的延时对齐。这需要我们必须提供一种机制来对齐这些Tile。RFSoC多Tile同步通过硬件时钟信号SYSREF与驱动API共同实现,确保跨Tile/芯片的时钟与数据严格对齐。这里我们以实现多个Tile之间的同步为例来介绍RFDC API的使用。

1. 参照前面RFDC IP设计文章,在Vivado里配置好RFDC IP后生成bit文件,然后导出xsa文件;

2. 在Vitis里选择Vivado设计生成的xsa新建一个平台项目,选择standalone,处理器选cortexa53,然后单击完成;

2.png

3. 修改平台BSP的设置,勾选libmetal库,然后单击OK;

3.png

4. 选择刚刚创建的平台新建一个空的应用程序;

4.png

5. 将Vitis安装路径data/embeddedsw

/XilinxProcessorIPLib/drivers/rfdc_v11_1/examples文件夹下的xrfdc_mts_example.c导入到应用程序中;

5.png

6. 由于是裸机工程,在刚刚导入的xrfdc_mts_example.c中添加宏定义:#define __BAREMETAL_;

7. Build工程,连接板子加载程序调试看是否打印了Successfully ran MTS Example,打印了说明多tile同步成功。然后可以去观察硬件adc、dac的延时对齐效果了。

Petalinux操作系统中RFDC API使用跟裸机步骤差不多,但是要注意的是在进行debug时要是出现SDK hangs when it attempts to run metal_init时,网上有通过加驱动库的方式来解决,但是还会出现如下报错:

5-5.png

其实只要不勾选Auto-attach Process children就能解决该问题。

6.png

如果您在RFSoC方面有问题,欢迎联系:

simonyang@comtech.cn
charlesxu@comtech.cn

最新文章

最新文章