前言
RFSoC中最重要的部分是射频直采ADC和DAC的配置,因此了解内部相关原理结构可以帮助我们更好理解相关功能配置参数含义。本文参考官方手册,主要对RFSoC ADC的数字数据路径相关功能进行介绍。
RF-ADC 数字数据路径
Tile 中的 RF-ADC 组件具有集成的 DSP 功能,您可以启用这些功能在将来自 RF-ADC 设备的采样数据传递到 PL 之前对其进行预处理。 不同的 DSP 功能块如下:
- 检测功能:包含一个双级可编程阈值,为内部互连逻辑提供两个标志,并在 RFADC 的绝对输出值大于或小于编程阈值时置位。
- 补偿功能:包含一个正交调制器校正 (QMC) 模块和一个粗延迟调整模块。
- 数字下变频器 (DDC):
- 混频器——粗调(四分之一和半速率)和精细(具有 48 位频率分辨率的 NCO)。
- Gen 1/Gen 2:信号抽取功能—支持1(旁路)、2、4 或8 抽取。
- Gen 3:信号抽取功能—支持1(旁路)、2、3、4、5、6、8、12、16、20、24、40 抽取。
可以使用或绕过单个、多个或所有 DSP 功能。 某些功能,例如 QMC,需要在 I 和 Q RF-ADC 中激活相同的功能。 偶数 RF-ADC 始终用于 I 数据路径,奇数 RF-ADC 用于 Q 数据路径。 您可以使用 IP 内核实现、配置或修改一个或多个功能的功能。
下图显示了 RF-ADC 中的可用功能。
RF-ADC 阈值和超范围设置
与任何 ADC 一样,输入模拟信号必须保持在 ADC 的满量程范围内,并且处于正确的输入电平。 任何不符合这些条件的信号都会导致数据丢失。 为了帮助防止这种情况,阈值检测器功能可用于调整信号链增益,以将信号保持在理想的满量程范围内。 但是,如果信号确实超出了满量程范围,每个 RF-ADC 通道都具有内置的检测和保护功能,具有过量程和过压功能。
过电压和超范围信号提供给 IP 内核上的中断功能,以及 IP 内核上的 RF-ADC 实时信号总线,以便直接访问 PL 设计。
Over Range(超出范围)
当信号超出 RF-ADC 的满量程输入时,会出现超出范围的情况。 当检测到这种情况时,转换后的数据会饱和(限幅)以限制数据损坏,并且信号由中断机制和通过断言 Over Range 实时输出信号进行标记。 由于 Over Range 事件可以短至一个 RF-ADC 样本,因此输出信号具有粘性。 要清除 Over Range 输出和相关中断,使用 API 中断处理机制。
Over Voltage 过压(第 1 代/第 2 代)
当信号远远超出正常工作输入范围时,就会出现过压情况。由于输入端电压过高会损坏器件,因此提供了自动保护机制。过压事件会导致输入缓冲器自动关闭以保护它。 过压电路独立监控差分输入的每个信号,并在任何单个输入信号超过最大输入电压或低于 RF-ADC 输入缓冲器的最小输入电压时标记状态。过压功能为 Zynq UltraScale+ RFSoC 数据表中定义的范围内的信号提供保护(DS926)。 超过此最大值的信号是不允许的,必须注意外部,以确保不会将此类电压提供给 RF-ADC 输入。
当检测到过压情况时,中断机制和置位过压实时输出信号都会对信号进行标记。 过电压实时输出被异步断言和取消断言,并提供事件的即时通知。 因此,当过压条件不再存在时,过压输出会自行清零。 相关的中断是粘性的,因此需要通过 API 中断处理例程清除。
在发生过压事件后,输入缓冲器会自动重新启用,并且 RF-ADC 会像以前一样恢复运行。 但是,应将过压条件视为停止通信并重新启动接收器链的理由。 如果出现过压情况,缓冲器将关闭,由此产生的 RF-ADC 输出数字代码大多只是噪声。 结果,阈值信息变得无关紧要,这会影响 AGC 的实施。 因此,AGC 实施应考虑过电压信号并相应地设置两个阈值检测器,这一点很重要。
下图显示了阈值、过量程和过压电平以及随着输入模拟信号的增加这些电平的响应。
阈值设置
阈值功能无需等待信号通过信号处理模块传播,而是提供传入信号电平的早期指示。 PL 中实现的自动增益控制 (AGC) 可以使用这种信号电平的早期指示。 用于指示输入信号电平的阈值电平是使用 RFdc 驱动程序 API 设置的。
当 RF-ADC 采样数据进入数据路径时,会进行阈值监控。 将此数据与用户定义的阈值进行比较。 阈值状态信号被发送到 IP 内核的输出,以指示已超过用户定义的阈值。 每个 RF-ADC 有两个实时超阈值输出信号。 阈值监控电路的模式如下表所示。
阈值级别设置为 14 位无符号值,允许 0 到 16383 之间的任何值。 最大值 16383 表示 RF-ADC 满量程输入的绝对值。 32 位可编程延迟对 RF-ADC 样本进行计数。 要将此计数与特定时间相关联,可以使用以下等式:
其中对于 Quad RF-ADC tile,Interleaving Factor 为 4,并且为 8 用于双 RF-ADC 模块。
延迟也可以用样本而不是 ms 表示,如下所示:
清除阈值标志
在 Sticky Over 和 Sticky Under 模式下,阈值置位后,可以通过两种方式清除标志; 通过直接发出 clear 命令或使用 AutoClear 功能。
每当与该 RF-ADC 关联的 QMC 增益值更新时,AutoClear 模式都会清除阈值。
阈值操作示例
下图说明了阈值单元操作。 该图显示了三个阈值 a、b 和 c,每个阈值配置为不同的阈值模式。 在硬件中,所有阈值单元都有独立的阈值电平和延迟值。 在此示例中,阈值水平由水平虚线表示,并且所有单元都使用相同的水平进行说明。
延迟值设置为 5(延迟值对 Sticky Over 模式没有影响),并且设置了粘性阈值以通过不同的清除模式清除。 以下部分描述了该行为。
注意:在下图中,样本由一个 sub-ADC 计数,而不是 RF-ADC。
Threshold-A, Sticky Over Mode
当第一个样本超过阈值上限时,该标志置位。 在此示例中,使用对 XRFdc_ThresholdStickyClear API 函数的调用来清除标志。
Threshold-B, Sticky Under Mode
当样本持续低于样本延迟数(示例中为 6)的下限阈值时,该标志置位。 在此示例中,通过更新 QMC 增益值来清除标志,该值是通过调用 XRFdc_SetQMCSettings API 函数发出的,然后是更新事件,该事件应用 QMC 增益更新。
Threshold-C, Hysteresis Mode
当第一个样本超过上限阈值时,该标志置位。 当样本持续低于样本延迟数的下限阈值时,该标志被清除。
阈值 RFdc 驱动程序 API 操作
使用 RFdc 驱动程序 API 配置阈值电平和延迟值。
// Initial Setup XRFdc_Threshold_Settings Threshold_Settings; Threshold_Settings.UpdateThreshold = XRFDC_UPDATE_THRESHOLD_BOTH; // Setup values for threshold 0 and 1 Threshold_Settings.ThresholdMode[0] = XRFDC_TRSHD_STICKY_UNDER; // Set threshold0 mode to Sticky Under Threshold_Settings.ThresholdUnderVal[0] = 1000; // Measured in 14-bit unsigned LSBs Threshold_Settings.ThresholdAvgVal[0] = 10; // Data must be below lower threshold for 10*8 4 GSPS RF-ADC samples // Write threshold values to the selected Tile / RF-ADC XRFdc_SetThresholdSettings(ptr, Tile, Block, &Threshold_Settings);
阈值应用
阈值检测器的常见用途是自动增益控制 (AGC) 应用。
超量程设置
有两种类型的超量程信号可用作可编程逻辑的状态输出,即超电压和超量程。IP 内核使用中断机制公开这些信号,因此任何违规都会立即标记给用户应用程序。 当超出正常或预期的操作水平时触发这些。
过压信号
只要输入信号超过来自 RF-ADC 输入缓冲器的安全输入范围,就会检测到过压信号。
超量程信号
- 当输入信号超过RF-ADC 的± 数字满量程范围时,检测到超量程信号。
- 在RF-ADC 的原始数字输出处测量超量程信号。
信号幅度检测器(第 3 代)
时间交错式 RF-ADC 依赖于多个背景校准,以最大限度地提高其在工艺变化范围内的性能,并在电压和温度变化范围内保持其性能。 背景校准算法需要输入信号存在一段时间才能收敛并达到最佳性能。 当输入信号不存在时,校准会发散,因此当输入信号恢复时,校准需要一段时间才能重新收敛。
如果处理不当,一些实际应用(例如电缆应用和 TDD 无线通信中使用的突发模式信号,或来自雷达应用之类的不可预测信号)会降低校准的准确性。
每个 RF-ADC 通道都内置了幅度检测器,用于监控 RF-ADC 数据并检测信号幅度何时低于某个阈值。 信号的开/关状态呈现给可编程逻辑,并可通过实时端口用于冻结或启用背景校准模块。
概述
幅度检测器模块用于监控 RF-ADC 数据并检测信号幅度何时低于某个阈值。 该模块监视 4 个或 8 个并行输入字。 每个通道监控的输入字数基于 RF-ADC 配置(四通道或双通道块)。下图显示了幅度检测器在 RF-ADC 数据路径上的位置。每个 RF-ADC 通道都有自己的幅度检测器模块。
该块的目的是检测信号幅度何时低于或高于某个可编程阈值,并将信号的状态作为实时异步状态输出到可编程逻辑。 结构的输出状态是信号状态。 信号状态被认为是开或关。
信号幅度检测器详解
幅度检测器由一个输入级、一个泄漏积分器滤波器、一个阈值比较器和两个基于滞后计数器的滤波器实例组成。下图显示了检测器的架构。
Input Stage
输入级以 T4/T8 时钟速率将 N=4 或 N=8 个输入字作为输入,并在每个 T4/T8 周期输出一个样本。 该模块以以下两种模式之一运行:
- 平均模式:所有子ADC 输入的平均幅度用于检测信号幅度。
- 随机采样:一个随机选择的数据字(子ADC)用于检测信号幅度。
泄漏积分器(Leaky Integrator )
泄漏积分器用于测量一段时间内的平均信号幅度。 泄漏积分器时间常数可编程从单个 T4/T8 时钟周期到 2 ^16 个时钟周期。
泄漏积分器的变换函数如下:
其中:
y[n] 是泄漏积分器的输出。
y[n-1] 是泄漏积分器的最后一个输出。
x[n] 是当前输入值; 输入级的输出。
2^λ 的输出是时间常数。
下表给出了可编程时间常数值:
Lambda Index | Lambda Value | Time Constant (T4/T8 Cycle) |
0 | 0 | 2^0 |
1 | 2 | 2^2 |
2 | 4 | 2^4 |
3 | 8 | 2^8 |
4 | 12 | 2^12 |
5 | 14 | 2^14 |
6 | 16 | 2^16 |
7 | N/A | N/A |
上图中使用了一个高斯分布信号进行说明。 一组基于不同时间常数的曲线显示了泄漏积分器的 20*log10 输出。
用户可编程刷新位可用于刷新将值重置为 0 的泄漏积分器。
上升和下降时间
在输入信号是突发信号或幅度变化剧烈的某些应用中,需要评估泄漏积分器的上升/下降时间。 上升时间可以从它的阶跃响应推导出来; 下降时间可以从它对初始条件的响应中得出。 以下公式分别显示了如何计算上升和下降时间:
其中: α = 1 - 1/2^λ
考虑到何时泄漏积分器的输出达到上升时间计算最终值的 90%,比最终值低约 1 dB。
对于下降时间,使用 1% (-40 dB) 来说明满量程信号下降到 -40 dBFS,这使得下降时间大约是上升时间的两倍。
下表显示了基于不同时间常数的参考上升/下降时间:
迟滞计数器(Hysteresis Counter)
漏滤波器之后的滞后计数器块,由一个阈值比较器和两个计数器组成,它们都是用户可编程的。 迟滞计数器用于进一步过滤来自泄漏积分器的信号幅度,以避免在信号幅度接近阈值电平时发生振荡,并输出稳定状态,ON或OFF。
如果信号大于或等于 2 *“高计数器”连续周期数的阈值,则认为该信号为 ON。 以类似的方式,如果信号在 2 *“低计数器”连续周期数内小于“阈值”,则认为该信号为 OFF。如果前一个条件不满足,低计数器和高计数器立即同步复位。 “ON”或“OFF”输出将保持其状态,直到被另一个计数器更改。
阈值电平为 15 位无符号值,以下公式将阈值电平转换为满量程对数值:
高位计数器和低位计数器均为 17 位 无符号值,虽然高 16 位是用户可编程的,但最低有效位始终为 0。
信号检测器示例
将阈值设置为 -40 dBFS,以下示例说明了此信号检测器模块在不同时间常数和计数器值下的响应。
假设采样率为 4 GHz,插值因子为 8,则每个 T8 为 2 ns。
假设 lambda = 8 时的 on 和 off 计数器值为 1000,lambda = 12 时为 300,则上升时间为 (587 或 9429 + 21000 或 2300) * T8,大约为 5.2 µs 或 20 µs; 在本例中,下降时间应考虑从 -39 dBFS 下降到 -41 dBFS,约为 (58 或 942 + 21000 或 2300) * T8,结果为 4.1 µs 或 3.1 µs。
下图显示了两个示例,均基于高 PAR(约 12 dB)突发信号,信号幅度约为 -40 dBFS,有一点偏移(1-2 dB)。
上图说明了 lambda = 12 和 counter = 300 的响应。
上图说明了 lambda = 8 和 counter = 1000 的响应。
这些示例显示了此模块根据输入信号幅度给出的正确响应。 您应该为特定应用选择计数器值和适当的时间常数。