主要内容

数据从硬件流到软件

一种利用SoC Blockset设计硬件逻辑(FPGA)和嵌入式处理器之间数据路径的系统方法。

应用程序通常在片上系统(SoC)设备上的硬件逻辑和嵌入式处理器之间进行分区,以满足吞吐量、延迟和处理需求。您将设计和模拟整个应用程序,包括FPGA和处理器算法,内存接口和任务调度,以满足系统的要求。然后,您将通过从模型生成代码并在SoC设备上实现来验证硬件上的设计。

支持硬件平台:

  • Xilinx®Zynq®ZC706评估试剂盒

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

  • Xilinx Zynq UltraScale™+ RFSoC ZCU111评估试剂盒

  • ZedBoard™Zynq-7000开发板

  • Altera®Cyclone®V SoC开发套件

  • Altera Arria®10 SoC开发套件

设计任务和系统要求

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

该应用程序有以下性能要求:

  • 吞吐量:每秒10e6个样本

  • 最大延迟:100 ms

  • 样品下降:< 1 / 10000

设计数据路径的挑战

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

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

  • 由于缺乏可见性,很难调试诸如在硬件中丢失样本之类的问题。

  • 如果不首先评估硬件接口的效果,就很难有效地设计应用程序。它可能需要多次设计-实现迭代,因为您只能通过硬件上的实现来评估性能。

  • 由于性能和因果关系很难通过实现来确定,因此优化设计是困难的。

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

利用SoC块集进行设计

创建SoC模型soc_hwsw_stream_top从实现模型来看soc_hwsw_stream_implementation使用从FPGA到处理器模板的流.顶层模型包括FPGA模型soc_hwsw_stream_fpga和处理器模型soc_hwsw_stream_proc实例化为模型引用。顶层模型还包括AXI4-Stream to Software块,该模块在FPGA和处理器之间建立了共享外部内存的模型。这些是先前在实现模型中使用缓冲块建模的。为了提高仿真性能,还对FPGA算法进行了基于帧的处理建模soc_hwsw_stream_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写入,另一个帧缓冲区由处理器读取。因此,下表中的Case #8-10被拒绝,因为它们违反了最小缓冲区要求。

为了可视化延迟,模拟模型并打开AXI4-Stream软件块,去性能选项卡并单击查看性能的情节当地主.选择下面的所有延迟选项阴谋控制并点击创建图.如图- 2所示,您会注意到复合延迟满足< 100 ms的要求。

设计满足吞吐量要求:平均而言,软件任务处理必须在一个帧周期内完成,否则,任务将超时,导致数据丢失,违反吞吐量要求。即。

美元FramePeriod & # 62;MeanTaskDuration美元

有各种不同的方法获得对应于你的算法的帧大小的平均任务持续时间,这在任务执行的例子。表2捕获了不同帧大小的平均任务持续时间。

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

soc_hwsw_stream_set_parameters (2);%第2行

由于1.06 ms的平均任务持续时间大于1.0 ms的帧周期,数据被丢弃在内存中。打开逻辑分析仪,注意信号icFIFODroppedCount在整个模拟过程中不断增加,如图3所示,表示丢失数据的累积量。

由于数据在从FPGA通过内存传输到处理器的过程中被丢弃,这反映为吞吐量的下降。开放AXI4-Stream软件块,去性能选项卡并单击查看性能的情节按钮下内存控制器以查看如图4所示的内存吞吐量图。注意,吞吐量低于所需的0.4 MBps。由于FPGA输出数据采样时间为10e-6,每个采样是4字节宽,因此系统所需的流吞吐量为4字节/10e-6 = 400 KBps。

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

$FIFO_depth = FrameSize / FIFOBurstSize$

现在,对案例# 3-7模拟模型100秒(10e6个样本,每秒10e-6个样本)。打开逻辑分析器并注意信号上丢失的样本数量icFIFODroppedCount

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

打开仿真数据检查器并从内存中添加信号,如下面的图5所示。注意,作为缓冲区的使用(信号buffAvail)增加到最大值11时,FIFO使用率(信号)isFIFOEntries)开始增加。当FIFO完全使用时,样本被丢弃(信号isFIFODroppedCount

所有案例#3-7的模拟结果和每10000个样本掉落的结果如表3所示。

高亮显示的条目(第4行和第5行)是有效的设计选择,因为它们满足吞吐量、延迟和丢弃样本的要求。

在硬件上实现和运行

本节需要以下产品:2022世界杯八强谁会赢?

  • 高密度脂蛋白编码器™

  • 嵌入式编码器®

  • 用于Xilinx设备的SoC块集支持包

  • 英特尔设备SoC块集支持包

有关支持包的更多信息,请参见SoC块集支持的硬件

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

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

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

  • 点击查看/编辑内存映射在上查看内存映射检查内存映射屏幕上。点击下一个

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

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

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

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

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

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

  • 关闭外壳终止合成。

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

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

拷贝文件(fullfile (matlabshared.supportpkg.getSupportPackageRoot,“工具箱”“soc”...“supportpackages”“xilinxsoc”“xilinxsocexamples”“比特流”...“soc_hwsw_stream_top-zc706.bit”),”。/ soc_prj ');

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

在其他板上的实施:若要在Xilinx®Zynq®ZC706评估套件板以外的支持板上实现该模型,必须先将该模型配置到支持的板上,并设置示例参数如下。

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

  • 硬件实现选项卡,从中选择您的板硬件板顶部和处理器型号上的下拉列表。

  • 导航到目标硬件资源>FPGA设计(顶层)选项卡并启用包含MATLAB作为AXI Master 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.supportpkg.getSupportPackageRoot,“工具箱”“soc”...“supportpackages”“intelsoc”“intelsocexamples”“比特流”...“soc_hwsw_stream_top-c5soc.rbf”),”。/ soc_prj ');

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

  • “soc_hwsw_stream_top-zc706.bit”

  • “soc_hwsw_stream_top-zedboard.bit”

  • “soc_hwsw_stream_top-zcu102.bit”

  • “soc_hwsw_stream_top-XilinxZynqUltraScale_RFSoCZCU111EvaluationKit.bit”

  • “soc_hwsw_stream_top-c5soc.rbf”

  • “soc_hwsw_stream_top-a10soc.periph.rbf”

  • “soc_hwsw_stream_top-a10soc.core.rbf”

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

另请参阅

Baidu
map