主要内容

Simulink中基于fpga的波束形成算法设计

本例展示了在Simulink®中开发波束形成器的工作流程的前半部分,该波束形成器适用于硬件上的实现,如现场可编程门阵列(FPGA)。它还展示了如何将实现模型的结果与行为模型的结果进行比较。

示例的第二部分Simulink中基于fpga的波束形成:代码生成演示了如何从实现模型生成HDL代码,并验证生成的HDL代码与行为模型相比产生了正确的结果。

本例展示了如何使用相控阵系统工具箱™、DSP系统工具箱™和定点设计器™库实现fpga就绪波束形成器,以匹配Simulink中相应的行为模型。为了验证实现模型,本示例将实现模型的仿真输出与行为模型的输出进行比较。

利用相控阵系统工具箱对浮点函数算法进行了设计和验证,提供了行为参考模型。然后使用行为模型验证用于生成HDL代码的定点实现模型的结果。

定点设计器提供数据类型和工具,用于开发定点和单精度算法,以优化嵌入式硬件的性能。您可以执行位真模拟来观察有限范围和精度的影响,而无需在硬件上实现设计。

FPGA的划分模型

在准备以fpga为目标的Simulink模型时,有三个关键的建模概念需要牢记:

  • 纸浆包处理:通常也称为串行处理,基于样本的处理是硬件设计中的一种有效的数据处理技术,它使您能够在资源和吞吐量之间进行权衡。

  • 针对HDL代码生成的子系统:为了从模型生成HDL代码,实现算法必须在Simulink子系统中。

  • 行为和实现模型的时间对齐输出:为了比较行为和FPGA实现模型的输出,必须通过向行为模型添加延迟来对它们的输出进行时间对齐。

波束形成算法

本例给出了一种相移波束形成器作为行为算法,并在该算法中重新实现高密度脂蛋白算法子系统,使用Simulink块支持HDL代码生成。波束形成器计算十个通道之间所需的相位,以使入射角度方向上的接收信号功率最大化。图中显示了一种FPGA的Simulink模型及其行为算法和相应的实现算法。

modelname =“SimulinkBeamformingHDLWorkflowExample”;open_system (modelname);集(allchild (0)“可见”“关闭”);

Simulink模型有两个分支。顶部分支是算法的行为浮点模型,底部分支是功能等效的定点版本,使用支持HDL代码生成的块。除了绘制两个分支的输出来比较两者之外,这个示例还计算和绘制两个输出之间的差异或误差。

该模型有一个延迟(美元Z ^ {-55} $)块在行为算法的输出。这个延迟是必要的,因为实现算法使用55个延迟来实现流水线,这会产生需要考虑的延迟。考虑这种延迟被称为延迟平衡,并且有必要使行为模型和实现模型之间的输出时间对齐,从而更容易比较结果。

多通道接收信号

为了合成相控阵天线接收到的信号,该模型包括一个产生多通道信号的子系统。的基带多通道信号子系统建模发射波形和接收目标回波的入射角通过10元天线阵列捕获。该子系统还包括一个接收机前置放大器模型,以考虑接收机噪声。这个子系统为我们的行为和实现模型生成输入刺激。

open_system ([modelname/基带多通道信号的]);

序列化和量化

该模型包括串行化和量化将浮点、基于帧的信号转换为硬件中建模流数据所必需的定点、基于样本的信号的子系统。该模型使用标量流处理,因为该算法运行速度低于400mhz。硬件实现可以针对资源而不是更高的吞吐量进行优化。

open_system ([modelname/串行化和量化的]);set_param (modelname“SimulationCommand”“更新”

串行子系统的输入信号有10个通道,每个通道有300个样本或一个300x10大小的信号。子系统对信号进行序列化或去缓冲,产生一个1x10的基于样本的信号,即每个通道一个样本,然后将其量化以满足系统的要求。

量化信号块的输出数据类型为fixdt(1、12、9),它是一个带符号的值,具有12位字长和9位分数长度精度。字长为12位,因为设计针对Xilinx®Virtex®-7 FPGA,该FPGA连接到12位ADC。分数长度容纳输入信号的最大范围。

设计实现子系统

高密度脂蛋白算法以HDL代码生成为目标的子系统实现了波束形成器,该波束形成器使用支持HDL代码生成的Simulink模块设计。

Angle2SteeringVec子系统计算均匀线性阵列(ULA)各天线单元的信号延迟。延迟然后被馈送到一个乘法和累积(MAC)子系统执行波束形成。

open_system ([modelname“/ HDL算法”]);

的算法高密度脂蛋白算法子系统在功能上等同于相移波束形成行为算法,但可以生成HDL代码。有三个主要的区别使这个子系统能够生成高效的HDL代码。

  1. 设计对输入进行串行处理,即使用基于样本的处理。

  2. 子系统使用定点数据类型进行任何计算。

  3. 该实现包括通过HDL合成工具实现流水线的延迟。

为了确保正确的时钟计时,任何添加到实现模型的一个分支的延迟都必须匹配到所有其他并行分支,如上所示。的Angle2SteeringVec例如,子系统有36个延迟;因此,顶端的分支高密度脂蛋白算法子系统包含36个样本的延迟MAC子系统。同样,MAC子系统使用19个延迟,必须通过在的输出中添加19个延迟来平衡Angle2SteeringVec子系统。这张图显示了内部MAC子系统来说明19个延迟。

open_system ([modelname' / HDL算法/ MAC ']);set_param (modelname“SimulationCommand”“更新”

底部的分支MAC子系统有一个美元Z ^ {2} $块,然后是复合乘法块,其中包含美元Z ^ {1} $,那么美元Z ^ {4} $块,后面是4个延迟块美元Z ^ {3} $总共延误了19次。延迟值在模型属性中的PreLoadFcn回调中定义。

转向矢量的计算

Angle2SteeringVec子系统从信号的到达角度计算转向矢量。它首先计算信号到达每个传感器的延迟,通过矩阵乘以天线单元在阵列中的位置乘以信号的入射方向。然后将延迟传递给要求利用简单高效的CORDIC算法计算正弦和余弦三角函数。

open_system ([modelname“/ HDL算法/ Angle2SteeringVec”]);

由于该设计包含一个间隔为半波长的10单元ULA,天线单元位置基于从天线阵列中心向外测量的每个天线单元之间的间距。定义元素之间的间距为10个数字的向量,范围从-6.7453到6.7453,即间距为1/2波长,即2.99/2。在定点算法中,用于元素间距向量的数据类型为fixdt(1、8、4),即具有8位字长和4位分数长度的带符号值。

反序列化

要比较基于样本的定点实现与基于浮点框架的行为设计,需要对实现子系统的输出进行反序列化,并将其转换为浮点数据类型。或者,您可以直接将结果与基于样本的信号进行比较,但随后必须取消缓冲行为模型的输出,以匹配来自实现算法的基于样本的信号输出,如图所示。

在本例中,您只需要转换高密度脂蛋白算法通过将数据类型转换块的输出设置为

HDL模型与行为模型的输出比较

运行模型以显示结果。您可以通过单击Play按钮或从MATLAB®命令行调用sim命令来运行Simulink模型。使用作用域以可视方式比较输出。

sim (modelname);

波束形成信号和波束形成信号(HDL)的时间范围表明,这两个信号几乎相同。错误范围是10^-3的数量级。这一结果表明高密度脂蛋白算法子系统在量化误差范围内产生与行为模型相同的输出。这种验证是生成HDL代码之前的重要第一步。

因为HDL模型使用了55个延迟,所以与行为波束形成信号作用域中显示的原始传输或波束形成信号相比,名为HDL波束形成信号的作用域延迟了55ms。

总结

本示例是关于如何设计一个FPGA-ready算法、自动生成HDL代码以及在Simulink中验证HDL代码的两部分系列教程的第一部分。这个例子展示了如何使用相控阵系统工具箱中的块来创建行为模型作为黄金参考,以及如何使用支持HDL代码生成的Simulink块为硬件实现创建子系统。并将实现模型的输出与相应行为模型的输出进行比较,验证两种算法在功能上是等价的。

一旦您验证了您的实现算法在功能上等价于您的黄金参考,您就可以使用HDL Coder™从Simulink中生成HDL代码(高密度脂蛋白编码器)和HDL验证器™生成一个协同仿真模型(高密度脂蛋白编码器)试验台。

这是这个由两部分组成的系列教程的第二部分Simulink中基于fpga的波束形成:代码生成演示了如何从实现模型生成HDL代码,并验证生成的HDL代码产生的结果与浮点行为模型和定点实现模型相同。

Baidu
map