主要内容

从软件到硬件的数据流

这个例子展示了如何使用SoC Blockset™设计从嵌入式处理器到硬件逻辑(FPGA)的数据路径。设计并模拟整个应用程序,包括FPGA和处理器算法、内存接口和任务调度,以满足系统要求。然后,通过从模型生成代码并在片上系统(SoC)设备上实现,在硬件上验证设计。

万博1manbetx支持硬件平台:

  • 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算法通过滤波来检测信号的频率,并点亮发光二极管(LED)来指示检测。的数据路径建模流数据从硬件到软件的例子。在本例中,数据流与从硬件到软件的数据流示例相反。

应用程序具有这些性能需求。

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

  • 最大时延:10ms

  • 数据流:连续

使用SoC块集设计

创建SoC模型soc_swhw_stream_top使用模板流从处理器到FPGA模板.顶层模型包括FPGA模型soc_swhw_stream_fpga以及处理器模型soc_swhw_stream_proc实例化为模型引用。顶层模型还包括内存通道和内存控制器块,模拟FPGA和处理器之间共享的外部内存。

设计以满足延迟需求:从一些潜在的帧大小开始,并计算表1中每个帧大小的帧周期。帧周期是从FPGA到处理器的两个连续帧之间的时间。对于本例,FPGA输出采样时间为1/10e6或1e-7,因为FPGA算法运行在10 MHz。帧周期计算为

$FramePeriod =帧大小* FPGAOutputSampleTime$

内存通道的延迟是由于帧缓冲区和FPGA FIFO队列中的样本所消耗的时间。选择FPGA FIFO大小,使其相当于一个帧缓冲区的大小。为了保持最大延迟要求,计算每个帧大小的帧缓冲区的数量,如下所示:

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

本例允许的最大延迟是10毫秒。计算本表中所有情况下的最大帧缓冲区。因为缓冲区的数量代表了最大延迟要求,所以所有的情况都满足延迟要求。

缓冲区数量的范围由内存体系结构约束决定。软件直接内存访问(DMA)驱动程序允许的最大帧缓冲区数量是64。帧缓冲区的最小数目是3。当处理器写入一个帧缓冲区时,FPGA从另一个帧缓冲区读取。因此,帧缓冲区数量的范围是:

$3 <= NumFrameBuffers <= 64$

案例#5和#6违反了最小缓冲区要求。

设计以满足吞吐量要求:平均而言,软件处理必须在一个帧周期内完成。如果没有,则软件任务生成数据的速度不够快,无法供FPGA使用,从而违反吞吐量要求。即。

美元FramePeriod & # 62;MeanTaskDuration美元

对于你的算法,有多种方法可以获得对应于帧大小的平均任务持续时间。这些概念在任务执行的例子。下表2捕获了各种帧大小的平均任务持续时间。因为平均任务持续时间大于计算的帧周期,所以情况#1和#2违反了吞吐量要求。

设计以满足数据连续性要求:为了满足数据连续性的要求,在开始流数据之前,在内存中填充帧缓冲区(priming)。当由于处理器执行而发生临时中断时,数据可以从先前填充的帧缓冲区中获得。启动是通过设计软件逻辑来实现的soc_swhw_stream_proc /作家/启动子系统,它生成一个streamEnable命令用于FPGA在内存快满时开始流数据。

由于不同的代码执行路径和操作系统切换时间等原因,任务持续时间可能会有所不同,因此软件任务可能无法通过共享内存按时将数据传递到FPGA。这可能会导致数据连续性的丧失。在task Manager块的掩码中指定平均任务执行时间及其统计分布,然后模拟验证是否满足此要求。

默认情况下,模型默认使用case #3参数配置。模拟顶部模型,单击数据检查模拟选项卡。添加bufAvail顶部视图上的信号。在这种情况下,可用的软件缓冲区信号不会降为零,并且validDropLED在顶部模型中不亮,表示数据连续流。

设置案例# 4的模型,就像这段代码中那样,并再次模拟该模型。

soc_swhw_stream_set_parameters (4);%第4行

在这种情况下,可用软件缓冲区降为零,并且validDropLED顶级模特亮起了灯。

案例#4违反了数据连续性要求。案例3被证明是满足所有设计要求的最佳案例。表3显示了更新后的结果。

运行soc_swhw_stream_set_parameters (3)命令在模型部署之前使用案例#3参数恢复模型。

在硬件上实现和运行模型

本节需要以下s manbetx 845产品:

  • 高密度脂蛋白编码器™

  • 嵌入式编码器®

  • Xilinx设备的SoC 万博1manbetxBlockset支持包,或Intel设备的SoC Blockset支持包

有关支持包的详细信息,请参见万博1manbetxSoC Blockset支万博1manbetx持的硬件

要在支持的SoC板上实现该模型,请使用万博1manbetxSoC建设者工具。默认情况下,模型是在Xilinx®Zynq®ZC706评估试剂盒因为它是用那个板配置的。打开SoC建设者点击,配置、构建和部署按钮,并按照以下步骤操作:

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

  2. 点击下一个审查任务图屏幕上。

  3. 回顾内存映射屏幕上,单击查看/编辑内存映射查看内存映射。点击下一个

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

  5. 选择构建,加载外部模式选择构建操作屏幕上。点击下一个

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

  7. 构建模型屏幕上,单击构建开始模型的构建。当FPGA合成开始时,会打开一个外部外壳。点击下一个

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

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

  1. 关闭外壳以终止合成。

  2. 复制预生成的比特流到您的项目文件夹通过运行这个拷贝文件下面的命令。

  3. 点击加载和运行加载预生成的比特流并打开生成的软件模型soc_swhw_stream_top_sw

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

加载比特流后,运行生成的软件模型soc_swhw_stream_top_sw在外部模式下单击监视和调优在工具条上。这将点亮单板上的LED2,表示FPGA检测到高频信号。要在运行时动态地改变正弦信号的频率,请将SourceSelector终止符块替换为Constant块,然后在外部模式下再次运行模型。将常数值从0修改为1,分别将信号频率从高改变为低。

在其他板上的实施:若要在除ZC706外的其他支持板上实现该模型,请先将模型配万博1manbetx置到所支持的板上,然后配置样例参数如下。

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

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

  • 导航到目标硬件资源>FPGA设计(顶级)制表符和设置IP核心时钟频率(MHz)至10mhz。

接下来,打开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_swhw_stream_top-c5soc.rbf”),”。/ soc_prj ');

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

  • “soc_swhw_stream_top-zc706.bit”

  • “soc_swhw_stream_top-zedboard.bit”

  • “soc_swhw_stream_top-zcu102.bit”

  • “soc_swhw_stream_top-XilinxZynqUltraScale_RFSoCZCU111EvaluationKit.bit”

  • “soc_swhw_stream_top-c5soc.rbf”

  • “soc_swhw_stream_top-a10soc.periph.rbf”

  • “soc_swhw_stream_top-a10soc.core.rbf”

总之,这个例子展示了如何设计从处理器到FPGA的连续流数据路径。您使用SoC Blockset设计并建模了行为,并经历了在SoC设备上实现它所需的工作流程。