Simulink中基于fpga的波束形成算法设计万博1manbetx
本例展示了在Simulink®中开发波束形成器的工作流的前半部分,该波束形成器适用于在硬件上实现,例如现场可编程门阵列(FPGA)。万博1manbetx它还展示了如何比较实现模型的结果与行为模型的结果。
第二部分的例子Simulink中基于fpga的波束形成:代码生成万博1manbetx演示如何从实现模型生成HDL代码,并验证生成的HDL代码与行为模型相比产生了正确的结果。
本例展示了如何使用相控阵系统工具箱™、DSP系统工具箱™和定点设计器™库在Simulink中实现一个fpga就绪波束形成器来匹配相应的行为模型。万博1manbetx为了验证实现模型,本示例将实现模型的仿真输出与行为模型的输出进行比较。
采用相控阵系统工具箱设计并验证了浮点函数算法,提供了行为参考模型。然后使用行为模型验证用于生成HDL代码的定点实现模型的结果。
定点设计器提供了用于开发定点和单精度算法的数据类型和工具,以优化嵌入式硬件的性能。您可以执行位真模拟来观察有限范围和精度的影响,而无需在硬件上实现设计。
FPGA分区模型
在准备以fpga为目标的Simulink模型时,需要记住三个关键的建模概念:万博1manbetx
纸浆包处理:基于样本的处理通常也称为串行处理,它是硬件设计中的一种有效的数据处理技术,使您能够在资源和吞吐量之间进行权衡。
针对HDL代码生成的子系统:为了从模型中生成HDL代码,实现算法必须在Simulink子系统中。万博1manbetx
行为和实现模型的时间对齐输出:为了比较行为模型和FPGA实现模型的输出,必须通过向行为模型添加延迟来调整它们的输出。
波束形成算法
本例展示了相移波束形成器作为行为算法,该算法在高密度脂蛋白算法
子系统通过使用Simulink块来支持万博1manbetxHDL代码生成。万博1manbetx波束形成器计算十个通道之间所需的相位,以使接收到的信号功率在入射角方向上最大化。如图所示为Simulink模型与行为算法及万博1manbetx其对应的FPGA实现算法。
modelname =“万博1manbetxSimulinkBeamformingHDLWorkflowExample”;open_system (modelname);集(allchild (0)“可见”,“关闭”);
Simu万博1manbetxlink模型有两个分支。顶部分支是算法的行为的浮点模型,底部分支是使用支持HDL代码生成的块的功能等效的定点版本。万博1manbetx除了绘制两个分支的输出以进行比较之外,本示例还计算并绘制两个输出之间的差异或误差。
模型有一个延迟()块在行为算法的输出。这个延迟是必要的,因为实现算法使用55个延迟来实现管道,这会产生需要考虑的延迟。考虑这种延迟被称为延迟平衡,对于行为模型和实现模型之间的输出进行时间对齐是必要的,以便更容易地比较结果。
多路接收信号
为了综合相控阵天线接收到的信号,该模型包括一个产生多通道信号的子系统。的基带多路信号
子系统对发射波形和接收到的目标回波进行建模,该回波通过10元天线阵列捕获入射角。该子系统还包括一个接收机前置放大器模型,以考虑接收机噪声。这个子系统为我们的行为和实现模型生成输入刺激。
open_system ([modelname/基带多路信号]);
序列化和量化
该模型包括序列化和量化
将浮点、基于帧的信号转换为硬件流数据建模所需的定点、基于采样的信号的子系统。该模型使用标量流处理,因为该算法运行速度低于400mhz。硬件实现可以针对资源而不是更高的吞吐量进行优化。
open_system ([modelname“/序列化和量化”]);set_param (modelname“SimulationCommand”,“更新”)
串行子系统的输入信号有10个通道,每个通道有300个样本或一个300x10大小的信号。子系统序列化或取消缓冲信号,产生一个基于采样的1x10信号,即每个通道一个样本,然后将其量化以满足系统的要求。
量化信号块的输出数据类型为fixdt(1、12、9)
,它是一个带符号的值,字长12位,分数长度精度9位。字长为12位,因为该设计针对的是连接到12位ADC的Xilinx®Virtex®-7 FPGA。分数长度容纳输入信号的最大范围。
设计实现子系统
的高密度脂蛋白算法
子系统以HDL代码生成为目标,实现了波束形成器,波束形成器是使用支持HDL代码生成的Simulink模块设计的。万博1manbetx万博1manbetx
的Angle2SteeringVec
分系统计算均匀线性阵列(ULA)各天线单元的信号时延。然后将延迟馈送到乘法累积(MAC)子系统执行波束形成。
open_system ([modelname“/ HDL算法”]);
算法在高密度脂蛋白算法
子系统的功能相当于相移波束形成行为算法,但可以生成HDL代码。有三个主要的区别使这个子系统能够生成高效的HDL代码。
设计对输入进行连续处理,即使用基于样本的处理。
子系统使用定点数据类型进行任何计算。
实现包括延迟,允许HDL合成工具进行流水线操作。
为了确保正确的时钟计时,添加到实现模型的一个分支的任何延迟都必须匹配到所有其他并行分支,如上所示。的Angle2SteeringVec
例如,子系统有36个延迟;因此,顶端的分支高密度脂蛋白算法
子系统包括一个36个样本的延迟MAC
子系统。同样,MAC
子系统使用19个延迟,必须通过在输出中添加19个延迟来平衡Angle2SteeringVec
子系统。这个图显示了内部MAC
子系统来说明19个延迟。
open_system ([modelname' / HDL算法/ MAC ']);set_param (modelname“SimulationCommand”,“更新”)
的底部分支MAC
子系统有一个块,后面跟着复杂的乘法块,其中包含,则块,然后是4个延迟块总共有19次延误。延迟值在模型属性中的PreLoadFcn回调中定义。
转向矢量计算
的Angle2SteeringVec
子系统根据信号的到达角计算转向矢量。它首先通过将天线单元在阵列中的位置乘以信号的入射方向来计算信号在每个传感器上的到达延迟。然后将延迟传递给要求
采用简单高效的CORDIC算法计算正弦和余弦三角函数。
open_system ([modelname“/ HDL算法/ Angle2SteeringVec”]);
由于该设计由间隔在半波长处的10个单元ULA组成,天线单元的位置基于从天线阵列中心向外测量的每个天线单元之间的间距。定义元素之间的间距为从-6.7453到6.7453的10个数字的向量,即间隔为1/2波长,即2.99/2。在定点算法中,用于元素间距向量的数据类型为fixdt(1、8、4)
,即字长为8位,分数长为4位的符号值。
反序列化
要比较基于样本的定点实现和基于浮点框架的行为设计,您需要反序列化实现子系统的输出,并将其转换为浮点数据类型。或者,您可以直接将结果与基于样本的信号进行比较,但随后必须取消行为模型的输出缓冲,以匹配来自实现算法的基于样本的信号输出,如图所示。
方法的输出进行转换高密度脂蛋白算法
通过将数据类型转换块的输出设置为双
.
HDL模型与行为模型输出的比较
运行模型以显示结果。您可以通过单击Play按钮或从M万博1manbetxATLAB®命令行调用sim命令来运行Simulink模型。使用作用域来直观地比较输出。
sim (modelname);
波束形成信号和波束形成信号(HDL)的时间范围表明,这两个信号几乎相同。在错误范围内,错误是10^-3的数量级。这一结果表明高密度脂蛋白算法
子系统在量化误差范围内产生与行为模型相同的输出。这种验证是生成HDL代码之前重要的第一步。
由于HDL模型使用了55个延迟,与行为波束形成信号作用域上显示的原始传输或波束形成信号相比,标题为HDL波束形成信号的作用域延迟了55ms。
总结
本示例是关于如何设计fpga就绪算法、自动生成HDL代码以及在Simulink中验证HDL代码的两部分系列教程的第一部分。万博1manbetx这个例子展示了如何使用相控阵系统工具箱中的块来创建作为黄金参考的行为模型,以及如何使用支持HDL代码生成的Simulink块来创建硬件实现的子系统。万博1manbetx万博1manbetx并将实现模型的输出与相应行为模型的输出进行比较,验证两种算法在功能上是等价的。
一旦您验证了您的实现算法在功能上等同于您的黄金参考,您就可以使用HDL Coder™用于从Simulink生成HDL代码万博1manbetx(高密度脂蛋白编码器)和HDL验证器™生成一个共同仿真模型(高密度脂蛋白编码器)试验台。
这是本系列教程的第2部分Simulink中基于fpga的波束形成:代码生成万博1manbetx演示了如何从实现模型生成HDL代码,并验证生成的HDL代码产生与浮点行为模型和定点实现模型相同的结果。