主要内容

用于FPGA的高吞吐量通道器

此示例显示如何通过使用多相滤波器库来实现高吞吐量(每秒GIGASAMPLE,GSP)信道,用于硬件。

高速信号处理是雷达、宽带无线和回程等应用的要求。

现代adc能够以高达每秒几千兆采样的采样率对信号进行采样。但是最快的FPGA的时钟速度达不到这个采样率。fpga通常运行在数百兆赫兹。在FPGA上执行GSPS处理的一种方法是将标量处理转移到矢量处理,并以更低的时钟速率同时处理多个样本。许多现代fpga支持JESD204B金宝app标准接口,该接口接受GHz时钟率的标量输入,并在较低的时钟率下生成样本向量。

在这个例子中,我们展示了如何在Simulink中设计一个GSPS吞吐量的信号处理应用程序。金宝app输入数据通过JESD204B接口向量化,在FPGA中以较低的时钟速率可用。该模型是一个多相滤波器组,由一个滤波器和一次处理16个样本的FFT组成。采用多相滤波器组技术来减小由于泄漏和扇形损失造成的FFT误差。看到高分辨率光谱分析(DSP系统工具箱)有关多相滤波器组的更多信息。

示例的第一部分实现了一个带有4抽头滤波器的多相滤波器组。

示例的第二部分使用配置为12-tap过滤器的Channelizer HDL Optimized块。Channelizer HDL优化块采用多相滤波器组技术。

多相过滤银行

modelname =.“PolyphaseFilterBankHDLExample_4tap”;Open_System(ModelName);

InitFcn回调(模型属性>回调> initfcn)设置模型。该模型使用512点FFT,每个频带都有四个抽头滤波器。使用dsp。信道器(DSP系统工具箱)系统对象™生成系数。通道器对象的多相方法产生512×4矩阵。每行代表每个频带的系数。将系数铸造成具有与输入信号相同的字长的固定点。

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

该算法需要512个过滤器(每个频带的一个过滤器)。对于16个样本的向量输入,我们可以重用16个过滤器,32次。

InVect = 16;重新使用= fftlength / eng;

为了使滤波器具有更高的时钟速率,我们将乘法器和系数组串联起来。这些值在“优化的硬件注意事项”一节中进行了解释。

Multiplication_PipeLine = 2;CoefBank_PipeLine = 1;

数据源

输入数据包括两个正弦波,200 kHz和250 kHz。

仿真结果

要可视化频谱结果,请打开频谱观众并运行模型。

open_system (PolyphaseFilterBankHDLExample_4tap/FFT频谱查看器/功率频谱查看器(FFT));open_system ('PolyphaseFilterBankhdlexample_4TAP / PFB频谱查看器/功率谱查看器(PFB)');sim(modelname);

多相滤波器组功率谱观察器显示了与仅使用FFT相比的功率谱和频率泄漏和扇形最小化的改善。通过比较两个频谱,并在100 kHz和300 kHz之间进行变焦,观察到多相滤波器组比经典FFT超过-40 dB的峰值较少。

优化硬件方面的考虑

  • 数据类型:数据字长度影响结果的准确性和硬件中使用的资源。对于此示例,我们以完整的精度设计过滤器。输入数据类型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).此外,我们观察到,多相滤波器库内的数据类型块输出的最大值在二进制点之后具有7个前导零,因此我们将滤波器输出施放到fixdt(1、11、17)代替。这使得FFT内的乘法器尺寸小于18 × 18,并节省了硬件资源。

  • 设计速度

  1. 国家控制块: 这国家控制块以同步模式使用,为带有启用端口的延迟块生成硬件友好代码。

  2. 最小化时钟使能:该模型设置为生成HDL代码,最小化时钟启用选项打开(在配置参数中,选择> HDL代码生成>全局设置>端口>最小化时钟启用)。当模型是单速率时,支持此选项。金宝app时钟启用是一个全局信号,不推荐用于高速设计。

  3. DSP模块在FPGA中的使用为了将乘法器映射到FPGA中的DSP块中,乘法器应该是流水线的。在这个例子中,我们通过设置Multiplication_PipeLine = 2来管道化乘数(之前2个延迟,之后2个延迟);这些管道寄存器不应该进行重置。将每个管道的重置类型设置为none(右键单击Delay块并选择HDL Code > HDL块属性> reset type = none)。

  4. 在FPGA中使用ROM:系数库内部的系数块是一个组合块。为了将这个块映射到ROM中,在块之后添加一个寄存器。延迟长度为CoefBank_PipeLine.将这些延迟的重置类型设置为none(右键单击Delay块并选择HDL Code > HDL块属性> reset type = none)。

生成HDL代码和测试台

您必须拥有一个HDL Coder™许可证才能为这个示例模型生成HDL代码。使用此命令生成HDL代码。systemname = ' PolyphaseFilterBankHDLExample_4tap / PolyPhaseFilterBank ';makehdl (systemname);

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

合成的结果

使用ISE为Xilinx Virtex 7(XC7VX550T-FFG1158,速度等级3)合成设计。该设计实现了499.525 MHz(在地方和路线之前)的时钟频率。在每个时钟的16个样本中,这转化为8 GSP吞吐量。请注意,此子系统具有大量I / O端口,并且它不适合作为针对FPGA的独立设计。

高密度脂蛋白优化信道器

为了提高频率响应,使用具有更多抽头的过滤器。以下模型使用通道器HDL优化块,配置有12个抽头滤波器来改善频谱。使用内置的通道器HDL优化块使得更容易更改设计参数。

modelname =.“PolyphaseFilterBankHDLExample_HDLChannelizer”;Open_System(ModelName);

该模型使用工作空间变量来配置FFT和过滤器。在这种情况下,模型使用512点FFT和每个频带的12抽头滤波器。信道分配器的系数数为512个频带乘以每个频带12分频。这特遣部队(h)方法生成所有系数。

InVect = 16;FFTLength = 512;h = dsp.Channelizer;h.NumTapsPerBand = 12;h.NumFrequencyBands = FFTLength;h.StopbandAttenuation = 60;coef12Tap =特遣部队(h);

数据源

输入数据包括两个正弦波,200 kHz和206.5 kHz。频率比第一示例更靠近彼此,以说明在频谱分辨率中的信道器和4抽头滤波器之间的差异。

仿真结果

要可视化频谱结果,请打开频谱观众并运行模型。

open_system (PolyphaseFilterBankHDLExample_HDLChannelizer/PFB_4tap频谱查看器/功率频谱查看器(PFB_4tap));open_system (多相滤波器bankhdlexample_hdlchannelizer /Channelizer频谱查看器/功率频谱查看器(Channelizer_12tap));sim(modelname);

Channelizer_12tap模型的功率谱查看器显示,与之前模型中的4抽头滤波器相比,带有12抽头滤波器的多相滤波器组的功率谱有所改善。比较了信道化器和四抽头多相滤波器组的频谱结果。放大到100 KHz和300 KHz之间,观察到信道器只检测两个峰值,而4抽头多相滤波器组检测超过2个峰值。两个峰值是预期的结果,因为输入信号只有两个频率分量。