这个例子展示了如何使用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_swhw_stream_top使用模板流从处理器到FPGA模板.顶层模型包括FPGA模型soc_swhw_stream_fpga以及处理器模型soc_swhw_stream_proc实例化为模型引用。顶层模型还包括内存通道和内存控制器块,模拟FPGA和处理器之间共享的外部内存。
设计以满足延迟需求:从一些潜在的帧大小开始,并计算表1中每个帧大小的帧周期。帧周期是从FPGA到处理器的两个连续帧之间的时间。对于本例,FPGA输出采样时间为1/10e6或1e-7,因为FPGA算法运行在10 MHz。帧周期计算为
内存通道的延迟是由于帧缓冲区和FPGA FIFO队列中的样本所消耗的时间。选择FPGA FIFO大小,使其相当于一个帧缓冲区的大小。为了保持最大延迟要求,计算每个帧大小的帧缓冲区的数量,如下所示:
本例允许的最大延迟是10毫秒。计算本表中所有情况下的最大帧缓冲区。因为缓冲区的数量代表了最大延迟要求,所以所有的情况都满足延迟要求。
缓冲区数量的范围由内存体系结构约束决定。软件直接内存访问(DMA)驱动程序允许的最大帧缓冲区数量是64。帧缓冲区的最小数目是3。当处理器写入一个帧缓冲区时,FPGA从另一个帧缓冲区读取。因此,帧缓冲区数量的范围是:
案例#5和#6违反了最小缓冲区要求。
设计以满足吞吐量要求:平均而言,软件处理必须在一个帧周期内完成。如果没有,则软件任务生成数据的速度不够快,无法供FPGA使用,从而违反吞吐量要求。即。
对于你的算法,有多种方法可以获得对应于帧大小的平均任务持续时间。这些概念在任务执行的例子。下表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建设者点击,配置、构建和部署按钮,并按照以下步骤操作:
选择构建模型在设置屏幕上。点击下一个.
点击下一个在审查任务图屏幕上。
在回顾内存映射屏幕上,单击查看/编辑内存映射查看内存映射。点击下一个.
上指定项目文件夹选择项目文件夹屏幕上。点击下一个.
选择构建,加载外部模式在选择构建操作屏幕上。点击下一个.
在验证模型屏幕上,单击验证检查实现模型的兼容性。点击下一个.
在构建模型屏幕上,单击构建开始模型的构建。当FPGA合成开始时,会打开一个外部外壳。点击下一个.
点击测试连接在连接硬件屏幕测试主机与SoC板的连通性。点击下一个去运行应用程序屏幕上。
FPGA合成可能需要30分钟以上才能完成。为了节省时间,您可以按照以下步骤使用提供的预生成的比特流。
关闭外壳以终止合成。
复制预生成的比特流到您的项目文件夹通过运行这个拷贝文件
下面的命令。
点击加载和运行加载预生成的比特流并打开生成的软件模型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设备上实现它所需的工作流程。