RFSoC应用笔记 - RF数据转换器 -04- RFSoC关键配置之RF-ADC内部解析(2.2)

简介: RFSoC应用笔记 - RF数据转换器 -04- RFSoC关键配置之RF-ADC内部解析

带数控振荡器的 RF-ADC 混频器


混频器功能具有三种模式:旁路(不混频)、粗混或细混。 精细混频自动启用用于生成载波频率的 NCO。 混频器支持完全正交混频,同时支持实数到 I/Q 和 I/Q 到 I/Q 模式。

image.png

粗调混频器:

  • 粗调混合器允许将数据与 0、Fs/2、Fs/4 或 –Fs/4 的载波混合。选择 0 仅在使用 RFdc 驱动程序 API 时可用。
  • 使用 0 载波进行混音会绕过混音器组件。

精细混频器:

  • 精细混频器允许数据在频率上任意上移或下移。
  • 频移量是通过对NCO 中产生的混频器频率进行编程来获得的。 精细混频器还支持 18 位相位调整。
  • 可以对 NCO 进行编程以输出 NCO 频率 (Fc) 的 cos、-cos、sin 或 -sin。根据当前混频器模式选择 NCO 输出。
  • I/Q to I/Q

image.png

Real to I/Q

image.png

  • 当选择负正交时,Q输入是反向的。
  • NCO 阶段可以使用 XRFdc_UpdateEvent 在图块内同步。
  • NCO 相位可以使用外部事件信号(SYSREF 或 MARKER)跨图块同步。
  • 为管理潜在的溢出,精细混频器输出包括 3 dBV 衰减,如上图所示。 此衰减与 R2C 模式无关,因此 API 的自动模式选择会根据 RF-ADC 混频器缩放输出因子选择正确的衰减级别(见下表)。 手动选择也是可能的,允许 0 dBV 或 -3 dBV。
Tile Usage Coarse Mixer Auto Fine Mixer
IQ (C2C) 1 (0 dBV) 0.707 (-3 dBV)
Real (R2C) 1 (0 dBV) 0.997 (~0 dBV)

混频器设置可以在内核中配置,或者使用 RFdc 驱动 API。 内核用于设置初始混频器设置(例如,混频器类型和混频器模式),RFdc 驱动 API 用于在运行时调整设置。 RFdc 驱动程序 API 和内核都根据提供的采样率和所需频率计算所需的寄存器设置。 下图显示了一个示例配置界面。

image.png

RF-ADC 混频器 RFdc API 示例


相关的 RFdc 驱动 API 函数显示在以下代码中。 此代码说明了 NCO 相位复位功能的使用。 启动时必须使用此函数将精细混频器的相位初始化为有效状态。 请注意,以下代码会重置所有磁贴中的 NCO。

XRFdc_Mixer_Settings Mixer_Settings;
for(tile=0;tile<4; tile++) {
  // 确保混合器设置更新使用 Tile 事件
    for(block=0; block<2; block++) {
        XRFdc_GetMixerSettings (ptr, XRFDC_ADC_TILE, tile, block,&Mixer_Settings);
        Mixer_Settings.EventSource = XRFDC_EVNT_SRC_TILE; //使用XRFDC_EVNT_SRC_TILE事件更新混频器设置
        XRFdc_SetMixerSettings (ptr, XRFDC_ADC_TILE, tile, block,&Mixer_Settings);
    }
    //重置 Tile0 中两个 DDC 的 NCO 相位(假设两者都处于活动状态)
    XRFdc_ResetNCOPhase(ptr, XRFDC_ADC_TILE, tile, 0); // DDC Block0
    XRFdc_ResetNCOPhase(ptr, XRFDC_ADC_TILE, tile, 1); // DDC Block1
    XRFds_UpdateEvent(ptr, XRFDC_ADC_TILE, tile, 1, XRFDC_EVENT_MIXER); //生成tile事件
}  

NCO 频率转换


NCO 处于数字域,其有效频率范围始终为 -Fs/2 至 Fs/2。

当 RF-ADC 或 RF-DAC 工作在子采样频率 (Fc>Fs/2) 时,应用程序必须首先计算第一奈奎斯特频带的信号位置,然后设置有效 NCO 值以移位信号。

为方便起见,Zynq UltraScale+ RFSoC IP GUI 和 API 支持在 -10 GHz 到 10 GHz 的范围内设置 NCO 频率(RFdc API 对 NCO 范围没有限制)。 Vivado Design Suite 或 RFdc API 自动将第一奈奎斯特区之外的高频转换为有效的 NCO 配置。 这适用于 RF-ADC 和 RF-DAC,并严格遵循采样理论。

为避免原始频谱倒置,当所需信号位于偶数奈奎斯特频带时,在下变频中设置正 NCO 频率,或当所需信号位于奇数奈奎斯特频带时,设置负 NCO 频率。 对于上变频,将信号移至偶数奈奎斯特频带时设置负 NCO 频率,将信号移至奇数奈奎斯特频带时设置正频率(此转换仅适用于将 NCO 设置为第一个奈奎斯特频带之外的频率 (±Fs/2) )。

NCO 设置示例


下图说明了为不同场景设置 NCO,从偶数或奇数 Nyquist 频带进行上变频和下变频。 NCO 可以设置在 ±Fs/2 之内或此范围之外。

image.png

RF-ADC 抽取滤波器(第 1 代/第 2 代)


需要抽取滤波器来实现数字下变频 (DDC) 过程的下采样和滤波部分。 整体滤波器响应由使用的抽取级数决定。 抽取链由三个 FIR 滤波器级组成,可以组合起来实现可变抽取率。 当 FIR 级未使用时,它会自动断电。 抽取过滤器允许创建以下内容(第 1 代/第 2 代):

  • 1x:绕过所有过滤器阶段。
  • 2x:使用单个阶段进行抽取过滤。
  • 4x:使用两级抽取滤波。
  • 8x:使用所有三个可用级进行抽取滤波。

每个抽取滤波器元件具有不同数量的抽头,阻带衰减和纹波显示在抽取滤波器详细信息中。 抽取滤波器链可以对 I/Q 数据或真实数据进行操作。 未使用的过滤器链断电。

考虑到 FIR 滤波器的阶跃响应,每个滤波器级都可能溢出,尤其是当满量程数据在输入上时。 为了检测和保护数据路径免于溢出,每个滤波器级和子相位在输出端都有一个带符号的溢出状态信号和饱和信号。 当不使用过滤级时,该标志被强制为零。 这些标志连接到中断处理中描述的数据路径中断机制。 下图中的多路复用器显示了在 IP 配置中选择的抽取级别以及相应的抽取滤波器块选择。

image.png

抽取滤波器操作模式(第 1 代/第 2 代)

Mode Description
Quad and Dual RF-ADC Tile
OFF 整个滤波器被禁用/断电(在禁用 RF-ADC 时适用)
1x 整个过滤器被绕过
2x 2x 抽取,80% 奈奎斯特通带
4x 4x 抽取,80% 奈奎斯特通带
8x 8x 抽取,80% 奈奎斯特通带

80% 奈奎斯特通带为 0.4*Fs。

抽取滤波器使用


IP 内核用于设置抽取率。 这是在 Vivado IDE 中设置的,因为随着 PL 带宽的变化,抽取率的改变会直接影响物理接口。 启用的过滤器如下图所示。 通过选中 Enable ADC 复选框来启用 RF-ADC。

image.png

相关 API 命令


RFdc 驱动程序 API 可用于使用以下代码获取 IP 内核中设置的抽取率。

//获取 Tile0、DDC Block1 的抽取因子
int Tile = 0;
u32 Block = 1;
u32 Decimation_Factor;
if( XRFdc_GetDecimationFactor (ptr, Tile, Block, &DecimationFactor) == XST_SUCCESS) {
  xil_printf("ADC Tile%1d,%1d Decimation Factor is: %d", Tile, Block,Decimation_Factor);
}

抽取滤波器详细信息(第 1 代/第 2 代)

抽取滤波器链由三个 FIR 滤波器组成:FIR2、FIR1 和 FIR0,可启用它们以每级两倍的因子连续抽取。 滤波器传递函数如下图所示。

image.png

image.png

image.png

抽取滤波器的滤波器系数如下表所示。

image.png

RF-ADC 抽取滤波器(第 3 代)


下图显示了第 3 代中的抽取级。

image.png

有四级抽取滤波器级联; 每个抽取级都可以独立绕过。 FIR1 级包含 3 个抽取滤波器——FIR1a (2x)、FIR1b (3x) 和 FIR1c (5x)——对于指定的配置,只能启用其中一个。 FIR2、FIR3 和 FIR4 模块的抽取因子均为 2。使用滤波器组合,以下显示了所有可能的抽取因子:1x(旁路)、2x、3x、4x、5x、6x、8x、10x、12x、 16x、20x、24x、40x 注:DDC的信号流向为:FIR4->FIR3->FIR2->FIR1。

IP 配置和驱动 API 自动选择高阶 FIR 组合。 例如,选择 FIR2 和 FIR1a 进行 4 倍抽取。

抽取滤波器详细信息(第 3 代)


下面列出了所有抽取滤波器的系数和频率响应图。 这些都是半带滤波器,所以只列出了中心抽头值和前半部分。 N(bit) 是系数的位宽,用于归一化系数。

FIR 1a (2x)

N(bit) = 17
Center Tap: 65536
First Half:
5,0,-17,0,44,0,-96,0,187,0,-335,0,565,0,-906,0,1401,0,-2112,0,3145,0,-4723,0,7415,0,-13331,0,41526

FIR 1b (3x)

N(bit) = 19
Center Tap: 174763
2,6,0,-17,-27,0,57,79,0,-143,-187,0,307,385,0,-590,-721,0,1050,1254,0,-1757,-2063,0,2807,3256,0,-4339,-4991,0,6579,7549,0,-9975,-11517,0,15633,18486,0,-27325,-34856,0,71618,144204  

image.png

FIR 1c (5x)

N(bit) = 19
Center Tap: 104858
First Half:
2,0,-4,-10,-13,-11,0,17,35,43,32,0,-47,-91,-107,-78,0,106,198,228,162,0,-210,-386,-437,-304,0,383,693,772,531,0,-652,-1166,-1286,-875,0,1056,1872,2049,1384,0,-1648,-2905,-3163,-2127,0,2514,4421,4804,3227,0,-3819,-6731,-7340,-4956,0,5956,10615,11742,8070,0,-10195,-18821,-21778,-15872,0,24203,52516,79099,98013  

image.png

FIR 2 (2x) Coefficients

N(bit) = 15
Center Tap: 16384
First Half: -12,0,84,0,-337,0,1008,0,-2693,0,10142

FIR 3/4 (2x) Coefficients

FIR 3 和 4 具有相同的系数。

N(bit) = 12
Center Tap: 2048
First Half: -6,0,54,0,-254,0,1230

image.png

抽取滤波器使用


IP 内核用于设置抽取率。 这是在 Vivado IDE 中设置的,因为随着 PL 带宽的变化,抽取率的改变会直接影响物理接口。 启用的过滤器如下图所示。 通过选中 Enable ADC 复选框来启用 RF-ADC。

image.png

相关 API 命令


RFdc 驱动程序 API 可用于使用以下代码获取 IP 内核中设置的抽取率。

//获取 Tile0、DDC Block1 的抽取因子
int Tile = 0;
u32 Block = 1;
u32 Decimation_Factor;
if( XRFdc_GetDecimationFactor (ptr, Tile, Block, &DecimationFactor) == XST_SUCCESS) {
  xil_printf("ADC Tile%1d,%1d Decimation Factor is: %d", Tile, Block,Decimation_Factor);
}  

reference


1.PG269


目录
相关文章
|
2天前
|
Java
并发编程之线程池的应用以及一些小细节的详细解析
并发编程之线程池的应用以及一些小细节的详细解析
16 0
|
13天前
|
数据采集 消息中间件 监控
Flume数据采集系统设计与配置实战:面试经验与必备知识点解析
【4月更文挑战第9天】本文深入探讨Apache Flume的数据采集系统设计,涵盖Flume Agent、Source、Channel、Sink的核心概念及其配置实战。通过实例展示了文件日志收集、网络数据接收、命令行实时数据捕获等场景。此外,还讨论了Flume与同类工具的对比、实际项目挑战及解决方案,以及未来发展趋势。提供配置示例帮助理解Flume在数据集成、日志收集中的应用,为面试准备提供扎实的理论与实践支持。
25 1
|
2天前
|
JavaScript IDE 编译器
TypeScript中模块路径解析与配置:深入剖析与最佳实践
【4月更文挑战第23天】本文深入探讨了TypeScript中模块路径解析的原理与配置优化,包括相对路径、Node.js模块解析和路径别名。通过配置`baseUrl`、`paths`、`rootDirs`以及避免裸模块名,可以提升开发效率和代码质量。建议使用路径别名增强代码可读性,保持路径结构一致性,并利用IDE插件辅助开发。正确配置能有效降低维护成本,构建高效可维护的代码库。
|
2天前
|
JSON Java Maven
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
7 0
Javaweb之SpringBootWeb案例之自动配置以及常见方案的详细解析
|
7天前
|
域名解析 网络协议 Linux
TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍
TCP/IP协议及配置、IP地址、子网掩码、网关地址、DNS与DHCP介绍
|
8天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
11天前
|
SQL API 数据库
Python中的SQLAlchemy框架:深度解析与实战应用
【4月更文挑战第13天】在Python的众多ORM(对象关系映射)框架中,SQLAlchemy以其功能强大、灵活性和易扩展性脱颖而出,成为许多开发者首选的数据库操作工具。本文将深入探讨SQLAlchemy的核心概念、功能特点以及实战应用,帮助读者更好地理解和使用这一框架。
|
12天前
|
存储 JSON JavaScript
「Python系列」Python JSON数据解析
在Python中解析JSON数据通常使用`json`模块。`json`模块提供了将JSON格式的数据转换为Python对象(如列表、字典等)以及将Python对象转换为JSON格式的数据的方法。
28 0
|
13天前
|
机器学习/深度学习 分布式计算 BI
Flink实时流处理框架原理与应用:面试经验与必备知识点解析
【4月更文挑战第9天】本文详尽探讨了Flink实时流处理框架的原理,包括运行时架构、数据流模型、状态管理和容错机制、资源调度与优化以及与外部系统的集成。此外,还介绍了Flink在实时数据管道、分析、数仓与BI、机器学习等领域的应用实践。同时,文章提供了面试经验与常见问题解析,如Flink与其他系统的对比、实际项目挑战及解决方案,并展望了Flink的未来发展趋势。附带Java DataStream API代码样例,为学习和面试准备提供了实用素材。
34 0
|
21天前
|
测试技术 API 智能硬件
语言模型在提升智能助手引用解析能力中的创新应用
【4月更文挑战第4天】苹果研究团队推出了ReALM,一种利用大型语言模型解决引用解析的新方法,提升智能助手理解用户意图和上下文的能力。ReALM将引用解析转化为语言建模问题,尤其擅长处理屏幕上的实体,比现有系统提升超5%,性能接近GPT-4但参数更少。其模块化设计易于集成,可在不同场景下扩展。然而,复杂查询处理和依赖上游数据检测器可能影响其准确性和稳定性。
63 6
语言模型在提升智能助手引用解析能力中的创新应用

推荐镜像

更多