主要内容

FPGA的高通量信道器

本例展示了如何使用多相滤波器组实现高吞吐量、每秒千兆位采样(GSPS)的硬件信道器。

高速信号处理是雷达、宽带无线和回程通信等应用的要求。现代adc可以以高达几个GSPS的采样率对信号进行采样,但最快的FPGA的时钟速度达不到这个采样率。fpga通常以数百MHz的频率运行。要在FPGA上执行GSPS处理,您可以从标量处理转移到矢量处理,并以更低的时钟速率并行处理多个样本。许多现代fpga支持JESD204B金宝app标准接口,该接口以GHz时钟速率接受标量输入,并以较低的时钟速率生成样本向量。

本例展示如何设计支持GSPS吞吐量的信号处理应用程序。金宝app这些Simu金宝applink®模型假设输入数据通过使用JESD204B接口向量化,并在FPGA中以较低的时钟速率可用。该算法一次处理四个样本。这两种模型都有一个多相滤波器组,由滤波器和FFT组成。多相滤波器组技术最大限度地减少FFT的泄漏和扇形损失。有关多相滤波器组的更多信息,请参见MATLAB高分辨率光谱分析

示例的第一部分使用信道器块从DSP HDL工具箱™库,配置为12点滤波器。Channelizer块使用多相滤波器组技术,自动选择数据类型,应用流水线,并使用其他优化硬件性能和资源使用。有了这个块,你可以很容易地探索你的设计的变化。

该示例的第二部分实现了一个多相滤波器组,该滤波器组具有4个抽头滤波器。第二部分使用基本的Simulink块。金宝app它展示了多相滤波器组架构,以及滤波器设计对硬件的挑战,如选择数据类型和插入管道级。

实现12-Tap过滤器通道

该型号使用Channelizer块,配置了一个12抽头滤波器,结果在良好的频谱性能。使用来自DSP HDL工具箱库的Channelizer块可以很容易地改变设计参数,如系数,矢量大小和FFT长度。该块还自动共享乘数,计算定点数据类型,并对过滤器进行管道处理。

该模型使用这些工作区变量来配置FFT和过滤器。该模型的输入向量大小为4个样本。该模型使用512点FFT和每个波段的12点滤波器。信道器的系数数是512个频带乘以每个频带12个抽点。生成所有的系数特遣部队(h)函数。

FFTLength = 512;InVect = 4;hc = dsp.Channelizer;hc。NumTapsPerBand = 12;hc。NumFrequencyBands = FFTLength;hc。StopbandAttenuation = 60;coef12Tap = tf(hc);

输入数据由两个正弦波组成,200khz和206.5 kHz。频率彼此接近,以说明信道器的频谱分辨率。

信道器HDL优化子系统包含导信道块和同步国家控制(高密度脂蛋白编码器)块,该块为导通器中的启用逻辑生成硬件优化代码。

该模块在乘法器周围实现管道级,使逻辑适合FPGA DSP模块,并在信道器内部使用ROM模块实现系数库。这些硬件友好的选项是DSP HDL工具箱块的默认行为。

modelname =“PolyphaseFilterBankHDLExample_HDLChannelizer”;open_system (modelname);set_param (modelname“SimulationCommand”“更新”);

这个模型图显示了子系统内部的Channelizer块。

open_system ([modelname,'/ channelzer HDL优化'])

该块具有配置过滤器系数、FFT长度和其他设置的参数,使您能够探索算法的不同硬件实现。

查看仿真结果

要可视化频谱结果,请打开频谱查看器并运行模型。

open_system ([modelname,'/频谱查看器/功率频谱查看器(Channelizer_12tap)']);sim (modelname);

频谱查看器显示12点滤波器分离了两个信号的频谱。放大在100 kHz和300 kHz之间,看看导通器检测到两个峰值的位置。两个峰值是预期的结果,因为输入信号有两个频率分量。

生成HDL代码

您必须拥有HDL Coder™产品才能为这个示例模型生成HDL代码。使用此命令生成HDL代码。

makehdl ([modelname,'/ channelzer HDL优化']);

使用此命令生成一个测试平台,将HDL模拟的结果与Simulink模拟行为进行比较。金宝app

makehdltb ([modelname,'/ channelzer HDL优化']);

本设计为Xilinx Virtex 7 (xc7vx550t-ffg1158,速度等级2)综合设计,时钟频率达到361 MHz。在每个时钟4个样本时,该频率导致1.4 GSPS吞吐量。

最小化时钟使能在这个模型中,HDL代码生成选项是开启的。时钟使能信号是一个全局信号,不推荐用于高速设计。在模型Configuration Parameters中,选择HDL代码生成全局设置港口,然后选择最小化时钟使能.当模型为单速率时,支持此选项。金宝app

FFT块使用FPGA上的56个DSP块,滤波器使用48个DSP块。

T =表(...分类({附近地区的“附近地区RAM”“FF”“布莱姆。”“DSP”}),...(26641;14585;24816;2;104年),...“VariableNames”, {“资源”“使用”});disp (T);
资源使用________ _____ LUT 26641 LUT RAM 14585 FF 24816 BRAM 2 DSP 104

实现4-Tap多相滤波器组

为了展示多相滤波器组的内部实现,第二个示例模型通过使用DSP HDL工具箱FFT块实现了512点FFT,并使用基本的Simulink块实现了每个频带的4点滤波器。金宝app四抽头滤波器的频率分辨率比第一种型号的12抽头滤波器低,但更容易看到滤波器的结构。这些MATLAB变量配置模型中的块。使用dsp。信道器系统对象™来生成系数。的多相方法生成512 × 4矩阵。每一行代表一个波段的系数。将系数转换为与输入信号具有相同字长的定点类型。

h = dsp.Channelizer;h.NumTapsPerBand = 4;h.NumFrequencyBands = FFTLength;h.StopbandAttenuation = 60;coef4Tap = fi(多相(h),1,15,14,“RoundingMethod”“收敛”);

该算法需要512个滤波器(每个频带一个滤波器)。对于4个样本的矢量输入,该模型实现了4个并行的4-tap滤波器。每个过滤器应用128组系数。

ReuseFactor = FFTLength/InVect;

这些变量将模型配置为管道的乘法器和系数库,以适应FPGA上的DSP块的逻辑。使用DSP块可以使合成达到更高的时钟速率。

Multiplication_PipeLine = 2;CoefBank_PipeLine = 1;

输入数据由两个正弦波组成,200khz和250khz。这两个频率之间的距离比以前的模型更远,因为较小的滤波器具有较低的频谱性能。的输入和输出PolyPhaseFilterBank子系统是4乘1向量。

modelname =“PolyphaseFilterBankHDLExample_4tap”;open_system (modelname);set_param (modelname“SimulationCommand”“更新”);

PolyphaseFilterBank子系统包含系数银行在系数集上旋转的子系统。的滤波器组子系统接受系数和数据向量,并返回过滤后的数据向量。FFT块还接受并返回一个4个样本的向量,并实现了硬件优化的架构。

open_system ([modelname,' / PolyPhaseFilterBank '])

这个模型图显示了流水线的4-tap过滤器实现。

open_system ([modelname,“PolyPhaseFilterBank /过滤器银行”])

查看仿真结果

要可视化模拟结果,请打开频谱查看器并运行模型。

open_system ([modelname,/FFT频谱查看器/功率谱查看器(FFT)]);open_system ([modelname,“/PFB频谱查看器/功率谱查看器(PFB)”]);sim (modelname);

与仅使用FFT相比,多相滤波器组频谱查看器显示了功率谱的改善和频率泄漏和扇形的最小化。通过比较两个频谱,并在100 kHz和300 kHz之间放大,您可以看到多相滤波器组比经典FFT具有更少的超过-40 dB的峰值。

优化硬件的注意事项

数据类型

数据字长影响结果的准确性和硬件中使用的资源。这4抽头滤波器使用全精度。的输入数据类型fixdt(1, 15日,13),输出为fixdt(1, 18岁,17).滤波器系数的绝对值都小于1,所以每次乘法运算后数据都不会增长。每次添加都向数据类型添加一位。为了保持FFT的准确性,数据类型在每个阶段增长一位。这种增长使得旋转因子在每个阶段的乘法更大。对于许多fpga,乘法尺寸小于18x18是可取的。因为512点的FFT有9个阶段,所以FFT的输入不能超过11位。在这种情况下,最大系数的前8位二进制数字为零。因此,本例将系数强制转换为fixdt(1、7、14)而不是fixdt(1, 15日14).此外,多相滤波器组内Datatype块输出的最大值在二进制点之后有7个前导零,因此模型将滤波器输出转换为fixdt(1、11、17).这些调整使FFT内部乘法器尺寸小于18x18并节省硬件资源。

速度设计

该模型使用这些设置使生成的HDL代码能够合成到更快的时钟速率。

  1. 同步状态控制块——为延迟块实现硬件友好的启用逻辑。

  2. 最小化时钟使能——避免实现可能降低合成时钟速率的全局时钟使能信号。

  3. 在FPGA中使用DSP块-通过在每个乘法器之前包含2个延迟和在每个乘法器之后包含2个延迟,将乘法器映射到FPGA中的DSP块。这些管道寄存器不能有复位信号。通过右键单击Delay块并选择,将每个管道的重置类型设置为noneHDL代码>HDL块属性,然后设置重置类型没有一个

  4. 在FPGA中使用ROM -映射组合逻辑内的系数MATLAB函数块(内系数银行子系统)通过在块之后添加一个寄存器到ROM中。延迟长度由CoefBank_PipeLine.将这些延迟的重置类型设置为none。

生成HDL代码

您必须拥有HDL Coder™产品才能为这个示例模型生成HDL代码。使用此命令生成HDL代码。

makehdl ([modelname,“PolyPhaseFilterBank”]);

使用此命令生成一个测试平台,将HDL模拟的结果与Simulink模拟行为进行比较。金宝app

makehdltb ([modelname,“PolyPhaseFilterBank”]);

在对Xilinx®Virtex 7 (xc7vx550t-ffg1158,速度等级2)进行综合设计时,该设计实现了324 MHz的时钟频率(在地点和路由之前)。在每个时钟4个样本时,该频率导致1.3 GSPS吞吐量。

FFT块使用FPGA中的56个DSP块,滤波器使用16个DSP块。

T =表(...分类({附近地区的“附近地区RAM”“FF”“布莱姆。”“DSP”}),...(14713;3570;21514;2;72年),...“VariableNames”, {“资源”“使用”});disp (T);
资源使用________ _____ LUT 14713 LUT RAM 3570 FF 21514 BRAM 2 DSP 72

结论

本例的第一部分展示了来自DSP HDL工具箱库的Channelizer块如何轻松实现硬件算法,并提供了快速探索设计选项的方法。

该示例的第二部分展示了在不使用硬件优化库块的情况下为硬件实现过滤器时的设计注意事项,例如选择数据类型和插入管道阶段。当您使用来自DSP HDL工具箱的库块时,您不必自己考虑这些因素。这些模块实现了硬件优化算法,可用于HDL代码生成和部署到fpga或asic。

另请参阅

|||

相关的例子

更多关于