前言
RFSoC中最重要的部分是射频直采ADC和DAC的配置,因此了解内部相关原理结构可以帮助我们更好理解相关功能配置参数含义。本文参考官方手册,主要对RFSoC ADC的校准机制进行介绍。
RF-ADC 校准机制
Zynq UltraScale+ RFSoC 中的每个 RF-ADC 都建立在交错架构中的多个子 RF-ADC 之上。 交织过程的性质要求执行复杂的校准算法,以从 RF-ADC 获得最佳动态范围性能。 RFSoC 中的每个 RF-ADC(双通道或四通道变体)都有一个内置校准过程,包括一个前台校准 (FG CAL) 步骤和一个后台校准 (BG CAL) 步骤。 FG CAL 步骤仅在 RF-ADC 上电状态机(启动初始化)期间执行。 BG CAL 步骤是一个设计为在 RF-ADC 运行期间可选操作的过程。 每个 RF-ADC 的两个校准步骤都是并行且独立地执行的。 下图显示了其中一个 RF-ADC 的框图,其中 N 个子 RF-ADC 中的每一个都有内部校准块。
校准子系统由三个主要模块组成,旨在估计和纠正交错子 RF-ADC 的各种缺陷和失配。
时间交错偏移校准模块 (Time Interleaved Offset Calibration Block,OCB)
该模块校正每个子 RF-ADC 的 DC 偏移。 任何未校正的残余 DC 偏移在 k * Fs/N 处显示为杂散,其中 Fs 是 RF-ADC 的复合采样率,N 是交错在一起的子 RF-ADC 的数量,k = 0, 1, 2, … N。对于 Dual RFADC tile 变体,N 为 8,对于 Quad RF-ADC tile 变体,N 为 4。 该块进一步分为两个子块,称为 OCB1 和 OCB2。 OCB2 仅在 FG CAL 期间运行,而 OCB1 在 FG 和 BG CAL 期间运行。 OCB2 模块在启动时消除子 RF-ADC 的偏移。
OCB1 模块在 BG 校准过程中连续消除子 RF-ADC 偏移,而不会影响偏移位置处的输入信号内容。
增益校准模块 (Gain Calibration Block,GCB)
此模块校正交错子 RF-ADC 之间的增益差异。 任何残余差异都会导致 +/-fin + (k/N) * Fs 处的杂散信号,其中 Fs 是 RFADC 的采样率,N 是子 RF-ADC 的数量,fin 是输入的频率 信号。 GCB 需要存在输入信号。 此输入信号的最小功率为 -40 dBFS。
f = k * Fs/(2N) 处的信号仓被忽略,不计入信号功率。 只要输入信号功率下降到 -40 dBFS 以下超过 100 μs,该模块就应该处于冻结模式。
时间偏移校准模块 (Time Skew Calibration Block,TSCB)
该模块校正交错子 RF-ADC 之间的时间偏移。 任何残留差异都可能导致 +/-fin + (k/N)*Fs 处的杂散信号,其中 Fs 是 RFADC 的采样率,N 是子 RF-ADC 的数量,fin 是输入的频率 信号。 TSCB 要求存在输入信号。 此输入信号的最小功率为 -40 dBFS。
只要输入信号功率下降到 -40 dBFS 以下超过 100 μs,该模块就应该处于冻结模式。
Foreground校准过程
前台校准步骤是 RF-ADC 启动初始化状态机序列的一部分。 这是由启动 IP 管理和执行的。 前台校准的目的是通过 OCB1 和 OCB2 模块为子 RF-ADC 偏移和采样开关的偏斜提供校正。 然后 OCB2 块被冻结,并且在操作模式期间不再更新。 在此过程中,理想情况下,在任何交织偏移位置都应该没有信号能量,即频率 = k*Fs/N。 因此在这个过程中输入应该被静音。 这通常通过在 RF-ADC 启动过程完成后对接收器前端启用进行排序来实现。 在前台校准过程结束时,OCB2 模块被冻结,并且 OCB1、Time Skew 和 Gain Calibration 模块被设置为允许在后台运行。
Background校准过程
在 RF-ADC 成功启动初始化结束时,启用背景校准。 背景校准的目的是为子 RF-ADC 的环境变化(主要是温度变化)引入的各种偏差和失配提供实时调整。 在后台(实时)运行的块包括 OCB1、GCB 和 TSCB。 如前所述,OCB1 在后台运行以调整由温度变化引入的残余 sub-RFADC 偏移电平,而不会影响输入信号内容。
k*Fs/N 处的信号内容不受此块的影响。
增益校准模块 (GCB) 和时间偏移校准模块 (TSCB) 分别为子 RF-ADC 增益和时间偏移提供校正。 两个模块都使用并依赖输入信号来估计和校正偏斜。 当输入信号降至 -40 dBFs 以下时,使用该信号进行计算不再有效。 因此这两个块的最佳使用是动态控制这两个块的系数更新(冻结和恢复)。
冻结和恢复这两个模块的控制是使用 ADVANCE 控制面板中的 Vivado IP 端口 RF-ADC 校准冻结端口来实现的。 CAL 冻结端口可独立用于每个 RF-ADC,包括冻结控制信号 (int_cal_freeze) 和状态信号 (cal_frozen)。 冻结控制信号上的高电平有效冻结两个块以进行计算和系数更新。 在冻结事件之前计算的系数继续有效,直到下一个启用(解冻)事件,这对应于冻结控制端口上的低信号。 在控制信号电平发生变化时,模块改变状态所需的时间约为 7 μs。 请注意,这明显短于 GCB 和 TSCB 的时间常数。 必须小心确保冻结控制端口的变化速度不会超过 7 μs 间隔。 可以根据应用需要以多种不同方法之一提供冻结控制机制。
可以在 PL 中实现一个简单的信号电平检测器来监控 RF-ADC 的数字输出电平并控制背景校准的状态。 通常,RF-ADC 输出绝对值的泄漏积分器和迟滞计数器就足够了。
对于在接收器上具有预定占空比的应用,例如 TDD-LTE 无线电,TX/RX 切换信号可以与电平检测器结合使用,以提供对 GCB 和 TSCB 模块的更精确控制。
请注意,在 RF-ADC 初始启动时,GCB 和 TSCB 并未处于最佳性能,因为它们都需要存在一些信号来训练系数。在 AutoCal 模式(第 3 代)RF-ADC 采样时钟中,这两个模块的收敛时间常数约为 222 或 223。 对于需要快速收敛的应用,请考虑提供一个训练信号,该信号最终可以在启动状态机完成后立即关闭以训练 GCB 和 TSCB 模块。 这对于输入信号非常突发且在系统启动期间具有低占空比和低功耗的应用特别有用。
子 RF-ADC 输出
如框图所示,每个子 RF-ADC 都独立地位于单独的数据流中,直到它们被 QMC 模块、复数混频器混合,然后被 DDC 过滤。
OCB2、GCB 和 TSCB 系数独立应用于每个子 RF-ADC,如果您将冻结端口永久设置为高电平有效,则可以有效地禁用这些系数。 如果 QMC 模块和 DDC 模块(因此是混频器)被旁路,则子 RF-ADC 数据流将独立输出到逻辑。
关键 CAL 特性和指导摘要
Fs/N 的输入信号内容,其中 N = 8 和 4 分别用于双路和四路 RF-ADC 块,在 OCB2 的前台校准期间必须静音。 k*Fs/N bin 处的信号分量应小于 -95 dBFs。 当输入信号下降到 -40 dBFs 以下超过 100 μs 时,应将增益和时间偏移校准模块(GCB、TSCB)置于冻结模式。 一个简单的检测器模块可用于管理冷冻端口的动态控制。 当 RF-ADC 以最大采样率的 0.75 倍或更慢的速度运行 Dual 和 Quad 器件时,应禁用抖动模式。 对于适用的系统,在将系统切换到实时操作之前,还可以使用训练信号来校准 GCB 和 TSCB。 如果不使用 DDC 功能,则可在可编程逻辑接口处获得子 RF-ADC 数据输出流。
校准模式
要达到指定的 RF-ADC 性能,必须根据信号位置正确设置某些校准模式。 可用的校准模式如下:
- 模式 1,针对输入信号优化,位于 0.4 * Fs 到 Fs/2。
- 模式 2,针对输入信号优化,位于 0 到 0.4 * Fs 。
上述位置是指混叠后第一奈奎斯特频段的输入信号。
- AutoCal 模式:此模式在第 3 代中可用。AutoCal 模式无需手动选择模式 1 和模式 2 校准,并优化 RF-ADC 性能,无论信号位置如何。
建议在 AutoCal 模式和传统模式 1 和模式 2 之间进行测试,以评估哪种模式能够提供理想的 RF-ADC 性能。 设置为 AutoCal 模式会影响收敛时间。
获取/设置校准系数
除了自动校准外,所有四个校准模块(OCB1、OCB2、GCB、TSCB)都可用于获取和设置用户系数。 应用程序读回校准解冻时生成的系数,并在需要时恢复它们; 这有助于在输入信号不满足校准要求时保持 RF-ADC 性能。 此功能适用于 IP 向导中的每个 RF-ADC。 启用此功能会增加 IP 的大小。
使用 XRFdc_SetCalCoefficients API 恢复校准系数会自动禁用实时校准。 提供 XRFdc_DisableCoefficientsOverride API 以禁用此用户系数覆盖模式并重新启用实时校准。 禁用实时校准时,实时端口校准冻结无效。
注意:以下是适用于 Gen 1 和 Gen 2 设备的两个限制。
GCB 的用户系数获取/设置仅在 DDC 通道处于 1x(旁路)、NCO 关闭模式时有效,并且每个 AXI4-Stream 的样本对于 Quad RF-ADC 必须是 4 个样本,对于 Quad RF-ADC 必须是 8 个样本 双 RF-ADC
校准模块 OCB1 不支持校准系数获取/设置。
设置系数 RFdc API 示例
以下示例代码显示了 TSCB 的用户系数设置。
u32 Status = XRFDC_FAILURE; XRFdc_Calibration_Coefficients Coeffs; //使用下面的样本系数 Coeffs.Coeff0 = 146; Coeffs.Coeff1 = 255; Coeffs.Coeff2 = 255; Coeffs.Coeff3 = 255; Coeffs.Coeff4 = 113; Coeffs.Coeff5 = 255; Coeffs.Coeff6 = 255 Coeffs.Coeff7 = 255; Status = XRFdc_SetCalCoeffients( RFdcInstPtr, Tile, Block, XRFDC_CAL_BLOCK_TSCB, &Coeffs); If (Status != XRFDC_SUCCESS) { /*handle error*/ }
reference
- PG269