主要内容

Simulink中基于FPGA的波束形成:第1部分-金宝app算法设计

本教程是由两部分组成的系列教程的第一部分,该系列教程将指导您如何在Simulink®中开发适合于在硬件上实现的波束形成器,如现场可编程门阵列(FPGA)。金宝app它还将展示如何将实现模型的结果与行为模型的结果进行比较。本教程的第二部分基于FPGA的Simulink波束形成:第2部分-代金宝app码生成演示如何从实现模型生成HDL代码,并验证生成的HDL代码与行为模型相比产生正确的结果。

本教程介绍了如何使用相控阵系统工具箱设计一个可用于FPGA实现的波束形成器,以匹配Simulink®中相应的行为模型™, DSP系统工具箱™, 和定点设计器™. 为了验证实现模型,将实现模型的模拟输出与行为模型的输出进行比较。金宝app

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

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

FPGA的分区模型

在为目标fpga准备Simulink®模型时,需要记住三个关键的建模概念:金宝app

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

  • 用于生成HDL代码的子系统:为了从模型生成HDL代码,实现算法必须在Simulink子系统中。金宝app

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

波束形成算法

在本例中,我们使用相移波束形成器作为行为算法,该算法在HDL算法子系统中使用支持HDL代码生成的Simulink模块重新实现。金宝app金宝app波束形成器的工作是计算十个通道之间所需的相位,以使接收信号功率在入射角方向上达到最大。下面是一个FPGA的Sim金宝appulink模型及其行为算法及其相应的实现算法。

型号名称=“金宝appSimulinkBeamformingHDLWorkflowExample”; 开放式系统(型号名称);%确保模型是可见的,没有被范围阻碍。开放式系统(型号名称);集合(所有子对象(0),“可见”,“关闭”);

Simu金宝applink模型有两个分支。顶部分支是我们算法的行为浮点模型,底部分支是功能等效的定点版本,使用支持HDL代码生成的块。除了绘制两个分支的输出以比较两者之外,我们还计算并绘制两个输出之间的差异或误差。金宝app

注意到有延迟(美元Z ^ {-55} $)在行为模型的输出处。这是必要的,因为实现算法使用55个延迟来启用管道,这将产生需要考虑的延迟。考虑到这个延迟被称为延迟平衡,这对于在行为模型和实现模型之间对输出进行时间对齐以使结果更容易比较是必要的。

多通道接收信号

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

%打开生成接收到的多通道信号的子系统。open_system ([modelname“/基带多信道信号”]);

序列化和量化

该模型包括一个序列化和量化子系统,该子系统将浮点、基于帧的信号转换为在硬件中建模流数据所需的定点、基于样本的信号。选择基于采样的处理是因为我们的系统运行速度将低于400mhz;因此,我们优化的是资源而不是吞吐量。

%打开序列化和量化接收信号的子系统。open_system ([modelname/串行化和量化的]);set_param (modelname“SimulationCommand”,“更新”)

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

Quantize Signal块的输出数据类型设置为:

  • 输出数据类型= fixdt(1、12、9)

它是一个带符号的12位字长和19位分数长度精度。之所以选择这种精度,是因为我们的目标是连接到12位ADC的Xilinx®Virtex®-7 FPGA。分数长度的选择是为了适应输入信号的最大范围。

设计实现子系统

以HDL代码生成为目标的HDL算法子系统实现了波束形成器,该波束形成器使用支持HDL代码生成的Simulink模块进行设计。金宝app金宝app

Angle2SteeringVec子系统计算均匀线性阵列(ULA)中每个天线单元的信号延迟。然后将延迟馈给乘累加(MAC)子系统以执行波束形成。

%使用HDL算法打开子系统。open_system ([modelname“/ HDL算法”]);

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

  1. 加工是连续进行的,即使用基于样品的加工

  2. 使用定点数据类型执行算术运算

  3. 通过HDL合成工具添加延迟以实现流水线

为了确保正确的时钟定时,添加到实现模型的一个分支上的任何延迟都必须与上面看到的所有其他并行分支相匹配。例如,Angle2SteeringVec子系统增加了36个延迟;因此,HDL算法子系统的顶部分支包括正好在MAC子系统之前的36个样本的延迟。同样,MAC子系统使用了19个延迟,必须通过向Angle2SteeringVec子系统的输出添加19个延迟来平衡。让我们看看MAC子系统内部,以解释19次延迟。

%打开MAC子系统。open_system ([modelname' / HDL算法/ MAC ']);set_param (modelname“SimulationCommand”,“更新”)

看看MAC子系统的最底部分支,我们看到一个美元Z ^ {2} $,后面是复数乘法块,它包含一个$Z^{-1}$,然后是美元Z ^ {4} $,接着是4个延迟块美元Z ^ {3} $总共19次延误。延迟值在模型属性中的Preload FCN回调中定义。

方向矢量计算

Angle2SteeringVec子系统将任务分解为几个步骤,根据信号的到达角度计算转向矢量。首先用阵列中天线单元位置乘以信号入射方向的矩阵计算信号在每个传感器处的到达延迟。然后将延迟反馈给SinCos子系统,该子系统使用简单高效的CORDIC算法计算三角函数正弦和余弦。

%打开角度2转向VEC子系统。open_system ([modelname“/HDL算法/Angle2SteeringVec”]);

由于我们的设计是由一个间隔在半波长的10个单元的ULA组成,天线单元的位置是基于从天线阵列中心向外测量的每个天线单元之间的间距。我们可以将元素之间的间距定义为一个由-6.7453到6.7453之间的10个数字组成的向量,即间距为波长的1/2,即2.99/2。假设我们使用定点算术,用于元素间距向量的数据类型是fixdt(1,8,4),即8位字长和4位分数长数字数据类型。

反序列化

要比较基于示例的定点实现设计和基于框架的浮点行为设计,需要对实现子系统的输出进行反序列化,并将其转换为浮点数据类型。或者,你可以直接将结果与基于样本的信号进行比较,但随后你必须解除行为模型输出的缓冲,如下所示:

匹配实现算法输出的基于样本的信号。在这种情况下,您只需要将HDL Algorithm子系统的输出转换为浮点数,方法是将Data Type Conversion块的输出数据类型设置为double。

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

运行模型以显示结果。您可以通过点击Play按钮或调用金宝appMATLAB命令行中的sim命令来运行Simulink模型。使用作用域来直观地比较输出。

sim (modelname);

正如在时间范围中看到的波束形成信号和波束形成信号(HDL),这两个信号几乎是相同的。在error范围内,我们可以看到10^-3阶的误差。这表明HDL算法子系统在量化误差范围内产生了与行为模型相同的结果。这是生成HDL代码之前重要的第一步。

由于HDL模型使用55延迟,与行为波束形成信号示波器上显示的原始传输或波束形成信号相比,名为HDL波束形成信号的示波器延迟了55ms。

总结

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

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

本文是本系列教程的第二部分基于FPGA的Simulink波束形成:第2部分-代金宝app码生成演示如何从实现模型生成HDL代码,并验证生成的HDL代码生成的结果与浮点行为模型和定点实现模型相同。