主要内容

流数据从硬件到软件

此示例介绍了使用SoC块集设计硬件逻辑(FPGA)和嵌入式处理器之间的数据路径的系统方法。应用程序通常在片上系统(SOC)设备上的硬件逻辑和嵌入式处理器之间进行划分,以满足吞吐量,延迟和处理要求。您将设计和模拟包括FPGA和处理器算法,存储器接口和任务调度的整个应用程序,以满足系统要求。然后,您将通过从模型中生成代码并在SOC设备上实现来验证硬件上的设计。

万博1manbetx支持的硬件平台:

  • Xilinx®Zynq®ZC706评估试剂盒

  • Xilinx Zynq UltraScale™+ MPSoC ZCU102评估试剂盒

  • Xilinx Zynq UltraScale™+ RFSOC ZCU111评估套件

  • Zynq-7000开发委员会

  • Altera®Cyclone®V SoC开发套件

  • Altera Arria®10 SoC开发套件

设计任务和系统需求

考虑一个在FPGA和嵌入式处理器上连续处理数据的应用程序。在这个例子中,FPGA算法过滤输入信号并将结果数据流送到处理器。在实现模型中soc_hwsw_stream_implementation,缓冲块表示从FPGA到处理器的数据传输。处理器对缓冲数据进行操作,并将数据分类为高频率或低频率处理器的算法子系统。FPGA根据拨码开关设置产生低频或高频正弦波的测试数据测试数据来源子系统。

应用程序的性能要求如下:

  • 吞吐量:每秒10E6样品

  • 最大延迟:100ms

  • 样品掉落:<1在10000

设计DataPath的挑战

FPGA处理一个样本一个样本的数据,同时处理器一次处理一帧数据。数据在FPGA和处理器之间异步传输,软件任务每次执行的时间可能不同。因此,FPGA和处理器之间需要一个队列来保存数据,以防止数据丢失。这个队列是在两个阶段实现的,一个作为FIFO的数据样本在FPGA内存和其他作为一系列帧缓冲区在外部内存。你需要设置三个与队列相关的参数:帧大小(数据帧中的样本数量),帧缓冲区的数量和FIFO大小(FIFO中样本突发的数量)。

这些设计参数会影响性能和资源利用率。增加帧大小可以让软件任务有更多的时间执行,并以增加延迟为代价满足吞吐量需求。通常,只有当你准备在硬件上实现时,你才能设置这些参数,这将带来以下挑战:

  • 由于缺乏可见性,难以调试丢弃硬件中样品的问题。

  • 在没有首先评估硬件接口的影响,难以高效地设计应用程序。它可以采取许多设计实现迭代,因为您只能通过硬件实现仅评估性能。

  • 很难优化设计,因为很难通过实现确定性能和因果关系。

理想情况下,您希望在设计时开发应用程序时考虑到这些硬件影响,然后再在硬件上实现和运行。满足这些需求的一种方法是在设计时模拟硬件效果。如果可以模拟任务持续时间、内存缓冲区/ fifo利用率和外部内存传输延迟的变化,就可以评估它们对应用程序设计的影响,并在硬件上实现经过验证的设计。SoC Blockset允许您模拟这些效果,以便您可以在硬件上运行之前评估部署的应用程序的性能。

使用SoC模块集进行设计

创建一个SoC模型soc_hww_stream_top.从实施模型soc_hwsw_stream_implementation使用流从FPGA到处理器模板.顶部型号包括FPGA型号soc_hwsw_stream_fpga和处理器模型soc_hwsw_stream_proc作为模型引用实例化。顶部模型还包括内存通道和内存控制器块,该模型在FPGA和处理器之间建模共享外部存储器。这些早期在实现模型中使用缓冲块建模。为了提高仿真性能,FPGA算法也用于基于帧的处理soc_hwsstream_fpga_frame.并作为顶层的模型变体子系统包含在内。您可以通过选择FPGA子系统的掩码来选择以基于帧的基于帧或基于样本的处理的模型。

设计以满足延迟需求:从FPGA到处理器的数据路径延迟包括通过FPGA逻辑的延迟以及通过存储器通道从FPGA数据传输到处理器的时间。在此示例中,FPGA时钟为10MHz,延迟是纳秒的顺序。与内存通道内的延迟相比,这可以忽略不计,这是按毫秒的顺序。因此,让我们专注于以下列方式设计数据传输的延迟。

从少数潜在的帧大小开始,并计算表-1中的每个帧大小的帧周期。帧周期是FPGA到处理器的两个连续帧之间的时间。对于此示例,FPGA输出采样时间为10E-6,因为每100个FPGA时输出有效数据。

$FramePeriod =帧大小* FPGAOutputSampleTime

内存通道的延迟是由于帧缓冲区队列和FPGA FIFO中的采样所消耗的时间。让我们将FPGA FIFO的大小等效于一个帧缓冲区。为了保持在最大延迟要求,计算每个帧大小的帧缓冲区的数量,按照:

$(NumFrameBuffers + 1) * FramePeriod <= MaxLatency$

本示例允许的最大延迟是100毫秒。由于缓冲区的数量决定了最大延迟需求,所以对于表1中的所有情况,延迟需求都得到了满足。软件DMA驱动允许的最大帧缓冲区数是64。在外部存储器中至少需要3帧缓冲器来进行数据传输。其中一个帧缓冲区由FPGA写入,另一个帧缓冲区由处理器读取。因此,下表中的案例#8-10被拒绝,因为它们违反了最小缓冲区要求。

要可视化延迟,模拟模型并打开内存通道块,去表现标签并单击查看性能图.选择以下所有延迟选项阴谋控制然后点击创建图.如图- 2所示,您将注意到复合延迟满足< 100 ms的要求。

设计以满足吞吐量要求:一般情况下,软件任务处理必须在一帧周期内完成,否则会导致任务超出,导致数据丢失,违反吞吐量要求。即。

美元FramePeriod & # 62;MeanTaskDuration美元

有各种方法可以获得与算法帧大小相对应的平均任务持续时间,这在后面会涉及到任务执行的例子。表2显示了不同帧大小下的平均任务持续时间。

要用表中行(#2-#7)对应的参数来模拟模型,使用该函数set_hwsw_stream_set_parameters函数以行#作为参数。设置第2行模型参数如下:

soc_hwsstream_set_parameters(2);%行#2

由于1.06 ms的Mean Task Duration大于1.0 ms的Frame Period,数据被丢弃在内存通道中。打开逻辑分析仪并注意那个信号icFIFODroppedCount在整个模拟过程中不断增加,如图3所示,这表明丢失数据的累积量。

由于数据在通过内存从FPGA传输到处理器的过程中被丢弃,这反映为吞吐量的下降。开放内存控制器块,去表现标签并单击图数据吞吐量按钮,查看内存吞吐量图,如图4所示。注意,吞吐量小于所需的0.4 MBps。由于FPGA输出数据采样时间为10e-6,每个采样宽为4字节,因此系统所需的流吞吐量为4字节/10e-6 = 400kbps。

设计以满足滴样本要求由于任务持续时间可能因许多原因而不同,比如不同的代码执行路径和操作系统切换时间的变化,数据有可能被丢到内存通道中。在“任务管理器”块的掩码中指定任务平均执行时间和任务持续时间的统计分布。大小先进先出相当于一个帧缓冲区。设置FIFO突发大小为16字节,并计算FIFO深度:

$FIFO_depth = FrameSize / fifburstsize $

现在,为情况# 3-7模拟100秒的模型(10e6采样,每秒10e-6采样)。打开逻辑分析仪并记录在信号上的样品数量icFIFODroppedCount

soc_hwsstream_set_parameters(3);%设置#3的模型参数

打开仿真数据检查器并添加来自内存通道的信号,如下图5所示。注意,作为缓冲区的使用(信号buffAvail)增加到最大11,FIFO的使用(信号isfifoentries.)开始增加。当完全使用FIFO时,样本会被删除(信号isFIFODroppedCount

所有情况#3-7的模拟结果以及每10000个样本的最终掉落结果如表3所示。

突出显示的条目(第4行和第5行)是有效的设计选择,因为它们满足吞吐量、延迟和drop样例需求。

硬件实现和运行

本节要求的产品如下:s manbetx 845

  • 高密度脂蛋白编码器™

  • 嵌入式编码器®

  • 用于Xilinx设备的So万博1manbetxC Blockset支持包,或

  • 英特尔设备的SoC Slo万博1manbetxckset支持包

有关支持包的更多信息,请参阅万博1manbetxSoC Blockset支万博1manbetx持的硬件

为了在一个受支持的SoC板上实现该模型,使用万博1manbetxSoC建设者工具。打开“FPGA”子系统的掩码,然后选择“基于样本的处理”的模型变体。默认情况下,模型将实现Xilinx®Zynq®ZC706评估试剂盒因为它配置了那个板。打开SoC建设者点击工具条中的“配置、构建和部署”按钮,并遵循以下步骤:

  • 选择构建模型设置屏幕上。点击下一个

  • 点击下一个审查任务地图屏幕上。

  • 点击查看/编辑内存映射查看上的内存映射审查记忆映射屏幕上。点击下一个

  • 指定项目文件夹选择项目文件夹屏幕上。点击下一个

  • 选择构建,加载和运行选择构建操作屏幕上。点击下一个

  • 点击验证检查模型实现的兼容性验证模型屏幕上。点击下一个

  • 点击建造开始建立模型构建模型屏幕上。当FPGA合成开始时,外部外壳将打开。点击下一个

  • 点击测试连接连接硬件屏幕测试主计算机与SOC板的连接性。点击下一个运行应用程序屏幕上。

FPGA综合可能需要30分钟以上的时间。为了节省时间,你可以按照以下步骤使用预先生成的比特流:

  • 关闭外壳以终止合成。

  • 通过运行下面的命令将预生成的比特流复制到您的项目文件夹中,然后,

  • 点击加载并运行按钮加载预生成的比特流并在SoC板上运行模型

拷贝文件(fullfile (matlabshared.sup万博1manbetxportpkg.getSupportPackageRoot,'工具箱'“soc”...“万博1manbetxsupportpackages”“xilinxsoc”“xilinxsocexamples”“比特流”...“soc_hwsw_stream_top-zc706.bit”),”。/ soc_prj ');

当应用程序在硬件上运行时,拨动板上的拨码开关,将测试数据从“低”频率更改为“高”频率,并注意板上相应的LED闪烁。您还可以读取在外部模式下运行的模型中的示例丢弃计数。因此,您需要验证SoC Blockset模型的实现是否匹配仿真并满足要求。

在其他委员会实施:若要在Xilinx®Zynq®ZC706评估板以外的其他单万博1manbetx板上实现该型号,必须先将型号配置为支持的单板,并设置示例参数如下所示。

  • 硬件选项卡上,单击硬件设置打开配置参数窗口。

  • 在里面硬件实现选项卡,选择您的板硬件板下拉列表在顶部和处理器模型。

  • 导航到目标硬件资源>FPGA设计(顶级)选项卡并启用包括MATLAB作为AXI主机IP,用于基于主机的交互并设置IP核时钟频率(MHz)10 MHz。

  • 导航到目标硬件资源>FPGA设计(调试)选项卡并启用包括AXI互连监视器

接下来,打开SoC Builder,并遵循前面提到的Xilinx®Zynq®ZC706的步骤。修改拷贝文件命令匹配与您的板对应的位流。在Altera Arria®10 SoC开发套件和Altera Cyclone®V SoC开发套件的情况下使用如下拷贝文件命令对应您的板。对于Altera Arria®10 SoC开发套件,复制'.periph。rbf’和‘.core。rbf的文件。

拷贝文件(fullfile (matlabshared.sup万博1manbetxportpkg.getSupportPackageRoot,'工具箱'“soc”...“万博1manbetxsupportpackages”“intelsoc”'intelsocexamples'“比特流”...“soc_hwsw_stream_top-c5soc.rbf”),”。/ soc_prj ');

以下是可用的预先生成的比特流文件:

  • “soc_hwsw_stream_top-zc706.bit”

  • 'soc_hwsstream_top-zedboard.bit'

  • “soc_hwsw_stream_top-zcu102.bit”

  • 'soc_hwsstream_top-xilinxzynqultrascale_rfsoczcu111evalizationkit.bit'

  • “soc_hwsw_stream_top-c5soc.rbf”

  • “soc_hwsw_stream_top-a10soc.periph.rbf”

  • “soc_hwsw_stream_top-a10soc.core.rbf”

总之,这个例子向你展示了一种使用SoC Blockset在硬件逻辑和嵌入式处理器之间设计数据路径的系统方法。您选择了帧大小、帧缓冲区数量、FIFO大小等设计参数,以满足吞吐量、时延和drop samples等系统性能要求。通过模拟和可视化这些参数对包含硬件逻辑、处理器算法、外部内存和处理器任务持续时间的完整模型的影响,可以发现在硬件上实现之前的吞吐量损失、延迟和样本丢失等问题。这个工作流确保设计在实现之前在硬件上工作,并避免长时间的设计-实现迭代。