首页 > 58必威网

如何使用 FPGA 测试 PLL 频带校准算法

来源:新能源汽车网
时间:2023-03-28 16:06:20
热度:

如何使用 FPGA 测试 PLL 频带校准算法将受控振荡器所需的频率调谐范围分成离散频带是一种常用技术。拥有多个频段的优势在于可以覆盖较宽的调谐范围,同时在每个频段内保持相对较低的

将受控振荡器所需的频率调谐范围分成离散频带是一种常用技术。拥有多个频段的优势在于可以覆盖较宽的调谐范围,同时在每个频段内保持相对较低的压控振荡器 (VCO) 增益。低 VCO 增益有利于实现低 VCO 相位噪声。要求频段重叠。调谐波段随数字波段控制信号而改变。

当在锁相环 (PLL) 中使用具有离散调谐频带的振荡器时,必须在 PLL 进入锁相之前选择所需的频带。这个必要的步骤有很多名称(频段校准、自动频段选择、频段选择等),但思路是一样的:在允许 PLL 锁定之前选择正确的频段。

校准频带的一种直接方法是让两个计数器同步,一个用参考时钟计时,另一个用反馈时钟计时,反馈时钟是 VCO 输出的分频版本。分频发生在称为多模分频器 (MMD) 的模块中。

计数器被强制同时启动并允许计数到预定值。达到该值的计数器被标记为获胜者;因此,该时钟的频率更高。

使用有关哪个计数器获胜的信息,可以增加或减少 VCO 的频带控制以使频率更接近。该算法在带校准块 (BCAL) 中实现。无需等待包括整个 PLL 和其他电路的昂贵的 ASIC 制造运行,您可以实施频段校准算法并在 FPGA 上对其进行测试。这篇文章告诉你如何。

VCO 频带校准 (BCAL) 
在通信芯片中,频率合成器是无处不在的功能块。频率合成器被宽泛地定义为产生与参考频率成正比的输出频率的 PLL。比例常数是整数或实数的特定子集,具体取决于合成器的实现。

合成器在接收机前端的一种用途是创建本地振荡器输入到混频器,混频器将接收到的射频 (RF) 信号下变频为中频。通道选择是通过设置合成器的比例常数来实现的。一般来说,RF = Ndiv * REF,其中RF为输出频率,Ndiv为比例常数,REF为参考频率。

Ndiv 可以是整数比,N/R,其中 N 是 VCO 输出的整数分频值,R 是用于对参考振荡器进行分频的另一个整数分频比。如果需要更精细的频率分辨率,可以将 N 值添加到 sigma-delta 调制代码,该代码抖动分频器函数并提供 REF/2^(# sigma-delta 累加器位) 的小数分辨率。

频率合成器将固定频率的晶体振荡器乘以所需的频率。PLL 充当闭环负反馈系统来实现这种乘法。MMD 的工作是将 VCO 输出的频率除以整数值 N。

将该信号的相位与参考信号的相位进行比较,对相位差进行滤波以去除高频分量。过滤后的信号用作 VCO 的电压控制。如果 MMD 的输出与参考之间存在任何相位差,VCO 上的控制电压将进行调整以校正该相位差。

对于手头的应用,合成器需要产生 3,000 至 4,000 MHz 的频率。VCO 的连续调谐是通过改变作为并联电感-电容 (LC) 谐振电路一部分的变容二极管两端的偏置电压来实现的。制造技术将控制电压限制在大约 1.5 V 的变化范围内。很难制造一个变容二极管,其电抗变化足以引起 1,000 MHz 的频率变化,而控制电压变化仅为 1.5 V。

此外,1,000 MHz/1.5 V 的大 VCO 增益会使 PLL 容易受到高相位噪声的影响。由于这些原因,调谐范围被分成离散的频段。离散频带是通过将二进制加权电容器添加到并联 LC 储能电路来实现的。它们根据数字频段设置打开或关闭。必须先设置频带,然后才能允许 PLL 以连续方式锁定和跟踪。

BCAL 电路作为第二个反馈环路运行,通过其频带输入控制 VCO。在波段校准期间,VCO 控制电压固定在一个方便的电压,通常是其允许控制电压范围的中点。相位检测器在波段校准期间也被禁用。

我的目标是设计和测试频段校准算法,然后再将其与 RF 接收器 ASIC 上的 PLL 集成。为此,一个类似于 PLL 的系统在进行频带校准时完全由可以在 FPGA 上实现的电路构建。由于 VCO 和 MMD 集总在一起充当可编程振荡器,输出频率在参考频率附近,因此它们的功能可以通过数控振荡器 (NCO) 建模,如图 1所示。

 
点击图片可放大。

为了使合成器具有低相位噪声,晶体生成频率参考。参考频率通常为数十 MHz,远低于当今 FPGA 上可实现的逻辑速度。BCAL算法本身可以用数字技术来描述和设计。

在简单的情况下,它的输入是两个时钟,即 NCO 的参考和输出;它的输出是 NCO 的频带信号。频带校准、NCO 和外部应用的参考信号的组合形成了一个带负反馈的闭环系统,类似于在其频带校准模式下运行的 PLL,所有这些都可以在 RTL 中编码,然后在 FPGA 上进行测试花钱制造 ASIC。

你需要什么 
1. FPGA 及其编程软件

2. Matlab/Simulink进行算法开发和验证

3、产生参考时钟的信号源,如10~15MHz

4.调试用示波器一台

我使用Matlab/Simulink 进入初始设计和testbench。Fixed-Point Toolbox 和 Simulink Fixed Point 对定点数的支持有助于使模型准确反映 RTL 中的实现。RTL 代码用 verilog 编写,并在 Altera 的 Stratix II DSP 开发套件上运行。

在 Altera 的 Quartus II 软件中,FPGA 的所有功能都可以完成:设计输入、功能仿真、时序仿真、综合、适配、使用设计配置 FPGA 和调试。当我实时测试波段校准时,我使用了信号源和示波器。

设计和原型制作过程 设计 
和原型制作过程是以下熟悉步骤的迭代: 1. 设计输入;2.测试;3、调试;4. 转至 2。此循环根据需要重复多次,直到达到所需的功能。

首先,我将 NCO 构建为 Simulink 子系统。NCO Simulink 模型是从我在www.mindspring.com/~tcoonan/nco.v网站上找到的 NCO 的 verilog 逆向工程得到的。NCO 基于可编程模计数器。其输出频率等于Fs*(BAND+STEP)/MOD 其中STEP和MOD为固定值,BAND为8位频带信号。

NCO 的功能通过使用 Fs=11MHz 运行瞬态仿真并扫描 0 至 255 的 BAND 值并计算终输出频率来验证。由此产生的输出频率与 BAND 或频带调谐曲线是单调的,但不是完全线性的。由于它是单调的,因此被认为可以在 BCAL 的闭环测试设置中使用。

在确定 NCO 具有单调调谐曲线并且可以产生 10 到 14 MHz 范围内的频率(大约是 PLL 的参考频率)之后,我构建了 BCAL 模型。BCAL 算法通过竞争两个相同的 10 位计数器来工作。一个计数器由参考计时;NCO 为对方计时。

由于它们都从 0 开始,个达到常量 HIT_VALUE 的计数器由较高的频率计时。为了确定哪个计数器先到达 HIT_VALUE,每个计数值不断与 HIT_VALUE 进行比较,并且两个比较结果的异或用于将“1”输入 D 触发器。

当两个计数值都小于 HIT_VALUE 时,比较器都输出 0,XOR 结果为 0。在其中一个值超过 HIT_VALUE 的瞬间,XOR 输出转换为 1 并在 DFF 输出上捕获 1。此后的某个时间,另一个计数值将达到 HIT_VALUE,并且 XOR 结果返回 0。

另一个比较器用于将参考计数器与常量 RESET_VALUE 进行比较,当计数超过此值时,两个计数器都将重置为 0,比赛重新开始。如果 HIT_VALUE 为 230,则合理的 RESET_VALUE 为 240。同时,有关哪个时钟更快的信息位用作二进制搜索块的输入。

二进制搜索块保存当前波段输出值,并根据赢得比赛的时钟确定下一个波段值。二进制搜索块从其当前输出中添加或减去适当的二进制加权值。对于 8 位频段,初始频段值为 128 的中间值,连续进行七次比赛以填充从 MSB 到 LSB 的 8 位。图 2显示了 BCAL 算法的示例运行。

 
点击图片可放大。

在 Simulink 中根据逻辑门、比较器、寄存器、延迟和查找表构建频带校准算法后,将设计输入到 Quartus II 软件中。为了使调试更容易,Simulink 模型中的每条线都被命名。

在翻译过程中,我在 Verilog 代码中对信号使用了相同的名称。如果信号源自 Simulink 模型中的寄存器(或触发子系统中的延迟),我将其设为 Verilog 中的寄存器;否则信号是电线。因此,从 Simulink 原始子系统到 Verilog 的设计入口非常简单。

以类似于在 Simulink 中完成的测试的方式,所有子模块都在 Quartus II 中进行了仿真和验证。在确认子模块的功能后,制作了整个 BCAL 的测试原理图。测试原理图包括由 BCAL 频带输出控制的 NCO。

为了完成循环,NCO 输出用作 BCAL 的时钟输入之一。BCAL 参考输入通过其中一个 FPGA 引脚连接到电路板上的 SMA 连接器,因此它可以使用外部信号源计时。

BCAL测试平台综合拟合,时序网表仿真。很明显,设计中存在错误,因为某些频带位进入未定义状态,在 Quartus II 中显示为“U”。

该错误来自计数器值与 HIT_VALUE 的异步比较。在注册这些比较结果并将异步数据路径重新定时到参考时钟之后,设计功能在仿真中是正常的。下一步是将设计加载到 FPGA 上并通过测量进行验证。

通过以大约 100 kHz 的增量将信号源生成的参考频率从 10 MHz 更改为 14 MHz 来进行测试。测试设置如图 3所示。在每个参考频率,频段校准由与按钮相关的重置启动。开关去抖动本来可以使测试台更干净,但不是必需的。

 
点击图片可放大。

开关弹跳引起的多次复位导致算法反复重新开始;当开关停止弹动时,BCAL 正常工作。8 位波段值映射到 FPGA 板上的两个 7 段显示器,以十六进制显示终波段值。

BCAL 算法在 146 μs (= 7*230/11 MHz) 内完成,因此人类观察者只会看到终值。读数便于与 Simulink 模型的理论值进行比较。通过这种方式,BCAL 算法针对从其到频带值的 50 个可能频率进行了通过/失败测试。

潜在的陷阱和技巧 
这种特殊设计的挑战之一是它的异步特性。NCO 时钟的频率在频带校准期间发生变化,BCAL 中的一些逻辑元件取决于该时钟边沿的时序。同样,其他逻辑元件与参考时钟边沿同步变化。

FPGA设计软件不利于异步设计。进行异步设计并非不可能,但如果您必须查看有关警告集合的文档以确定您的代码是否按预期进行,请不要感到惊讶。由于参考频率永远不会改变,因此修改了设计以使所有数据路径与参考时钟同步。

当数据路径需要跳转时钟域时,它会使用级联寄存器重新定时,以限度地减少亚稳态。同样,另一个陷阱是没有注册组合比较器输出。这些都是实际硬件中出现的问题示例,但可能不会出现在 Simulink 的理想模型中,除非您将它们显式添加到您的模型中。

为了简化 Simulink 模型到 RTL 的迁移,请尝试使用在您选择的 RTL 语言中作为原语的 Simulink 功能块。例如,XOR、AND 和大于等逻辑函数直接从 Simulink 映射到 Verilog。Simulink 中的延迟或显式 DFF 在 Verilog 中建模为寄存器。

我还建议为 Simulink 模型中的所有信号命名,并在 Verilog 代码中使用相同的名称。在 Simulink 中首先使用浮点数据类型构建模型是可以的,但如果您将浮点设计迁移到定点,它将简化编码过程并使设计更易于调试。

终结果 
在 FPGA 上运行 RTL 代码并根据测量数据判断设计功能正常并满足规范后,就可以在 ASIC 上实现代码了。逻辑综合和布局是用 Cadence 的 Encounter 软件完成的。作为的检查,我模拟了生成的逻辑网表以及提取的带有寄生电阻器和电容器的布局网表,以确保在 Encounter 的综合和布局布线后功能仍然正常。

在这些模拟中,功能检查正常。从那时起,包括频率合成器的 RF 接收器 ASIC 被制造出来,芯片的测量显示频率合成器在其可能的输出频率范围内锁相。这意味着波段校准功能正常。因此,设计团队可以专注于从 ASIC 的模拟部分中获得更好的性能。

在将设计提交到 ASIC 之前,在 FPGA 上对设计进行原型设计的过程不仅有助于验证目的,而且对于它为算法实验提供的可能性也很有用。如果算法的上下文可以在 FPGA 上复制,就像它出现在 ASIC 上一样,则可以尝试任意数量的算法实现,并在面积效率、电流消耗或速度方面进行比较。快乐的原型制作!

Russell Mohn 是 Epoch Microelectronics 的设计工程师,Epoch Microelectronics 是一家 IC 设计服务公司,专门从事混合信号、模拟和 RF 设计。在 Epoch,他专注于为通信应用设计小数 N 频率合成器。2001 年,他获得了 Cooper Union 的电子工程学士学位。他的兴趣包括 FPGA 原型设计、系统建模和信号处理。

Baidu
map