Zynq UltraScale+ RFSoC 是业界首款单芯片自适应无线电平台,在一款芯片内集成射频直采数据转换器、单芯片软决策前向纠错核(SD-FEC)、FPGA逻辑、完整的ARM处理器子系统和高速收发器等。
第三代RFSoC器件与前几代产品相比,射频输入输出频率响应已扩展至全面支持6GHz以下频段,可帮助用户开发尖端RF设计,例如大规模MIMO无线电、5G基带、固定无线接入、测试测量与相控阵雷达等等。第三代器件14bit分辨率ADC最大采样速率增加到5.0GSPS,14bit分辨率DAC最大采样速率增加到10.0GSPS。用户可以参考XMP105详细了解Zynq RFSoC系列产品具体参数及选型指南。
本次将分上下篇介绍基于Xilinx Zynq UltraScale+ RFSoC ZCU216评估套件的详细内容:
1. 第三代RFSoC 器件时钟转发特性。
2. ZCU216时钟结构及可行的时钟设计方案。
3. 在Vivado中创建基于IP集成器(IP Integrator)的设计。
4. 在Vitis中创建基于ARM的BareMetal程序设计。
5. 代码简要分析。
6. 硬件环境及测试结果。
本文用于示例的软件工具、驱动版本、硬件版本及文档版本如下:
1. ZCU216 Rev-A02(Engineer Sample)
2. CLK104
3. Vivado 2021.2 + Vitis 2021.2
4. PG269 V2.6 October 27, 2021
5. Software Driver: rfdc v11.0
1. 第三代RFSoC 器件时钟转发特性:
RFSoC在芯片内集成了数据转换器,第三代RFSoC系列器件均包含4个ADC Tile和4个DAC Tile,每个ADC和DAC Tile内可能包含1个(ZU43DR)或2个(ZU47DR/48DR)或者4个(ZU49DR)Channel,这取决于芯片型号。以ZCU216开发板上的芯片为例,ZU49DR的每个ADC Tile内包含4路ADC,每个DAC Tile内包含4路DAC。
每个Tile都可以独立配置,工作在不同的采样时钟频率上,采样时钟可以来自于外部高频时钟输入,可以来自于每个Tile内部PLL倍频后的时钟,也可以来自于其他Tile分发的参考时钟。
第三代RFSoC器件相比之前几代产品引入了时钟转发特性,不再需要为每个Tile都提供独立的采样时钟,节省了引脚数量,降低了外围威廉希尔官方网站 的复杂度。
时钟转发的方式共分为两种,一种是参考时钟转发,一种是采样时钟转发。
所谓参考时钟转发,是指外部时钟芯片提供低噪声低频时钟到一个ADC/DAC Tile的专用时钟管脚,该时钟将在Tile间转发,通过每个Tile内的PLL倍频出所需的采样时钟;
而采样时钟转发有两种途径,一是从外部时钟芯片直接提供低噪声高频的采样时钟到一个ADC/DAC Tile的专用时钟管脚,采样时钟将在Tile间分发,无需通过内部PLL倍频,直接提供给ADC/DAC Channel作为采样时钟;
时钟芯片提供低噪声低频时钟到一个ADC/DAC Tile的专用时钟管脚,该时钟在此Tile内通过PLL倍频到采样频率,随后将此采样时钟在Tile间分发。
以上仅为时钟分发方式的简化解释,会有一些使用的限制和建议,建议用户参考PG269 Chapter 4 Clocking-On-chip Clock Distribution章节阅读。
用户也可以打开Vivado,选择器件型号后在RF Data Converter IP内根据原理图和目标设计进行配置,如果时钟设计存在问题,工具会给予一定的报警和提示。
值得注意的是,RF Data Converter IP内的选项和上述的两种分发方式不是完全匹配的。当使用采样时钟分发方式时,在IP内需要勾选的是Input Refclk。ADC Tile 1(Tile 225)和DAC Tile 1(Tile 229)作为采样时钟输入源,其他的ADC和DAC Tile选择Tile 1作为时钟源。
2. ZCU216时钟结构及可行的时钟设计方案:
本节仅覆盖ZCU216开发板与RF数据转换器相关的时钟部分,这部分时钟均由扩展子卡CLK104提供。
如下所示为CLK104板上的功能示意图:
通过一个时钟芯片为DAC提供接近10GSPS的低噪声采样时钟是很难实现的,CLK104板采用两级PLL方案。
第一级LMK04828B是一个双环路抖动清除器和时钟发生器,一级回路的参考输入可为板上的10MHz TCXO、外部参考时钟(比如从SMA100B输出低噪声时钟),或SFP恢复时钟。二级回路的参考输入为板上的160MHz VCXO,可输出低相噪的时钟、同步信号。其中DAC_REFCLK和ADC_REFCLK可作为ADC/DAC低频参考时钟输入;PL_CLK,AMS_SYSREF和PL_SYSREF均用作MTS(Multi-Tile Synchronization)应用,我们将在未来博客中详细描述MTS相关应用;
第二级LMX2594接收第一级输出时钟,将其倍频到采样频率,直接输出到ADC/DAC Tile。
这三颗时钟芯片均由SPI接口控制,板上有一颗IIC to SPI桥接芯片,FPGA通过IIC接口对此转换芯片进行控制,进而控制三颗时钟芯片。除此以外还有一种更为简单的方式,ZCU216板上带有一颗TI的MSP430 MCU,其IIC接口通过IIC Switch也可以连接到这几颗时钟IC上,用户可以参考XTP580,使用BoardUI实现对时钟的配置。
ZCU216上的芯片型号为ZU49DR,其4个ADC Tile和4个DAC Tile都有专用的模拟时钟输入管脚,但只有两个ADC Tile(Bank 225/226)和两个DAC Tile(Bank 229/230)的时钟管脚被引出。如下表所示为详细连接关系:
本文后续将会展示以下的时钟方案配置:
使用LMX2594输出高频采样时钟分发方式,从ADC Tile1和DAC Tile1输入。设定ADC 采样频率为2000MHz,DAC采样频率为6400MHz。
3. 在Vivado中创建基于IP集成器
(IP Integrator)的设计
本节需要读者对基于Vivado的IPI设计比较熟悉,将不会对较简单的操作步骤进行详述。如何使用此Blog提供的TCL文件重建Vivado工程请参考附录。
Ø 打开Vivado 2021.2,新建工程,名为rfsoc_zcu216_clocking。
Ø 选择板卡ZCU216 EVB或ZCU216 ES EVB,根据板卡型号决定,二者bitstream不兼容。
Ø 在工程界面内创建Block Design,默认名为design_1。
Ø添加Zynq UltraScale+ MPSoC IP,Run Block automation,使用板卡默认配置。
Ø 修改Zynq配置,PS-PL Configuration界面下将AXI HPM0/1 FPD接口关闭,勾选AXI HPM0 LPD,其他保持默认。
Ø 添加Zynq UltraScale+ RF Data Converter IP。
Ø 修改RF Data Converter配置。
1. 切换Converter Setup为Advanced模式。
2. 使能全部ADC和DAC的每个Channel,其他所有配置大多数都是可以通过API修改的,保持默认即可,后续将会介绍如何通过API修改。
3. 修改全部ADC的Samples per AXI4-Stream Cycle为8,DAC为16,这是为了避免AXI-Stream接口时钟频率超出器件频率上限。
4.在System Clocking界面按下图配置,如上一节所示,我们将先按ADC 2GSPS,DAC 6.4GSPS进行配置,使用采样时钟分发方式。IP的输出时钟可以用于倍频产生AXI4-Stream数据接口的时钟,因此我们先保持和Fabric clock 频率8分频的关系进行配置。
5. Advanced界面保持默认,无需勾选。
Ø Run Block Automation,将RFDC IP AXI-Lite接口通过Interconnect连接到Zynq LPD接口实现地址映射。
Ø 为AXI4-Stream接口提供合适的时钟和复位。
1. 点击BD界面上方Run Block Automation。
2. 由于所有ADC/DAC采样率是一致的,可以使用一个MMCM产生ADC/DAC所需的数字时钟。在弹出界面中勾选ADC 0-3的时钟源为ADC0,DAC0-3的时钟源为DAC0。
3. 工具将会自动例化两个Clocking Wizard IP,adc0_clk_wiz使用IP输出的31.25MHz的时钟作为输入,倍频输出200MHz时钟供给Master接口。Dac0_clk_wiz使用IP输出的50MHz时钟作为输入,倍频输出400MHz时钟供给给Slave接口。
4. 修改clocking wizard复位极性为低电平有效。
5.例化两个Processor System Reset IP,并连接peripheral_aresetn到RFDC IP的s/m_axis_aresetn管脚上。其中Slave AXI-Stream接口是DAC的数字接口,Master AXI-Stream是ADC的数字接口。
6. 例化一个AXI GPIO IP,用于控制时钟板CLK104上的SPI SDO选通。设定为输出,位宽为2,初始值设定为0x0。
7. 引出AXI GPIO IP,命名为spi_mux。
Ø 完整的Block Design大致如下:
Ø 在BD中右键Validate design,确保没有报错。
Ø 创建顶层文件,右键BD,Create HDL Wrapper,选择Let Vivado manage wrapper and auto-update。
Ø 添加管脚约束,RFDC相关管脚为专有管脚,IP内包含管脚约束,用户无需为此添加。
Ø 生成bitstream,检查工程是否有时序违例。
Ø 导出工程XSA文件,File-Export-Export Hardware,勾选Include Bitstream,选择导出目录。
在Vitis中创建基于ARM的BareMetal程序设计:
详细流程:
Ø 打开Vitis,选择一个Vitis工作目录。
Ø Create Application,选择一个新的XSA文件,导入从Vivado获得的XSA文件。
Ø为工程取一个名,以Empty Application(C)为模板新建工程。
Ø勾选BSP中的库,双击platform.spr,选中standalone_psu_cortexa53_0下的Board Support Package,选择Modify BSP Settings,勾选libmetal库,保存。
Ø 导入源码,从附件中找到main.c,可以直接拷贝到工程src目录下,或者右键src目录选择Import sources。
Ø 添加工程Symbol。右键工程选择C/C++ build settings,在Symbols中添加__BAREMETAL__。
Ø 编译工程,如果有宏定义相关报错,应该是底层IP命名问题,可以在xparameters.h中找到实际的宏定义。
如何添加metal log:
Libmetal库提供了metal_log API以便于用户调试,用户可以参考AR#71068使能打印功能:
https://support.xilinx.com/s/article/71068
Metal_log提供了8个等级的打印信息,用户可以根据项目所处的不同阶段决定开启哪一个等级的调试信息。
代码简要分析:
整体流程大致如下:
1. Libmetal初始化。
2. RFDC IP初始化。
3. IIC/GPIO/SPI Mux初始化。
4. CLK104时钟IC复位。
5. CLK104时钟配置。
6. 设置RFDC Clock Distribution。
7. 查看RFDC IP状态。
这里主要强调一下三个部分,一是时钟配置,二是Clock Distribution,三是状态检查。
如前面章节所说,FPGA通过IIC接口与IIC to SPI桥接芯片进行交互,桥接芯片通过SPI接口控制时钟IC。配置数据在本案例中是记录在数组中的,数据来源于TI的TICS Pro软件。用户需要根据实际的需求,在软件中选择时钟IC的输入输出频率和管脚复用,由软件导出一组针对此时钟IC的寄存器数值。
Clock Dsitribution部分,IP驱动提供了相关的结构体和API,具体组成部分可以参考PG269文档相关部分。以下是DAC Tile的时钟分发网络配置代码:
在我们目前的设计中,使用LMX2594产生的高频参考时钟输入到DAC Tile1,因此结构体中指定source tile为XRFDC_TILE_ID1;此时钟分发组内最北的是DAC Tile3,最南的是DAC Tile0;分发类型是参考钟分发,因此选择XRFDC_DIST_OUT_RX;参考钟频率为6400,采样率为6400;将此结构体传入到XRFdc_SetClkDistribution函数中,函数内部会检查当前配置是否有效,并在配置结束以后启动tile。
检查IP状态是最后一步,IP启动过程共有15个阶段,只有当Tile状态达到0xf的时候说明此Tile正常启动,接下来可以正常工作,如果发现Tile状态停在某一步,可以对照PG269 Power-on Sequence Steps章节查找原因。
硬件环境及测试结果:
建议按照XTP587完成板子硬件环境setup:
1. 连接电源、USB-JTAG。
2. 安装CLK104时钟板。
3. 使用出厂自带的CARLISLE连接线,将CLK104 ADC/DAC参考钟接到板上。
4. 设置启动模式为JTAG。
测试结果:
由打印的IP status对比可见,时钟成功配置,所有DAC和ADC Tile均进入到状态0xf。
附录:
此文章提供重建工程TCL脚本,用户可以下载附件,按照如下步骤重建Vivado工程:
1. 打开Vivado 2021.2。
-对Windows系统,双击桌面Vivado图标或到此目录寻找执行文件C:XilinxVivado2021.2invivado.bat。
- 对Linux系统,source/settings64.sh。
2. 在Vivado console中,将当前目录更换到下载的附件目录。Cd。
3. Source 。/vivado_project.tcl。
Vitis工程需要用户自行创建,本文会提供测试源代码。
原文标题:开发者分享|第三代Zynq RFSoC器件射频数据转换器应用: 时钟设计
文章出处:【微信公众号:FPGA技术江湖】欢迎添加关注!文章转载请注明出处。
全部0条评论
快来发表一下你的评论吧 !