主要内容

本页采用了机器翻译。点击此处可查看英文原文。

系统工程方法在系统级芯片 (SoC) 应用中的应用

此示例展示了如何使用系统工程方法在系统级芯片 (SoC) 平台上设计一个信号检测器应用程序。此示例中的工作流将应用程序函数映射到所选硬件架构。

信号检测应用程序会持续处理信号数据,并将信号分类为高频或低频。信号在高频和低频类别之间转换的速度不能快于 1 毫秒。信号以 10 MHz 的采样率进行采样。

功能架构

定义应用程序的功能架构。现阶段,应用组件的实现情况尚不清楚。您可以使用 System Composer™ 软件来捕获功能架构。

该模型表示功能架构及其主要软件组件及其连接。

systemcomposer.openModel('soc_signaldetector_func');

func.png

应用程序的功能架构由以下顶级组件组成:

  1. 生成信号

  2. 信号预处理

  3. 信号分类

  4. 激活 LED 灯

硬件架构

选择硬件架构。由于预计应用程序的复杂性,建议选择系统级芯片 (SoC) 设备。所选的系统级芯片 (SoC) 设备集成了硬件可编程逻辑 (FPGA) 核心和嵌入式处理器 (ARM) 核心。您可以使用 System Composer 软件捕获硬件架构的详细信息。

该模型表示硬件架构及其主要硬件组件及其连接。

systemcomposer.openModel('soc_signaldetector_arch');

arch.png

行为建模

如果功能组件的实现可用,则可以将其作为行为添加到功能架构中。在 System Composer 中,对于每个功能组件,您可以将实现行为链接为 Simulink® 模型。要查看组件的实现,请双击功能架构模型中的每个组件。

定义每个组件的行为后,您可以仿真整个应用程序的行为,并验证其功能是否正确。在功能架构模型中选择运行。然后,分析信号分类结果在仿真数据检查器中。要更改信号类型,请选择 Generate Signal 组件,然后选择 Manual Switch 模块。确认源信号分类正确。

功能和硬件元素的分配

在优化功能和硬件架构后,将不同的功能组件分配给不同的硬件元素,以满足所需的系统性能基准。在这种情况下,某些功能组件在硬件架构中可实现的位置受到限制。由于输入输出 (I/O) 连接,您必须在所选硬件架构的 FPGA 核心上实现 Generate SignalActivate LEDs 组件。相比之下,您可以在 FPGA 或处理器内核上实现 Preprocess SignalClassify Signal 组件。

               Component  Constraint
         Generate Signal        FPGA
       Preprocess Signal           -
         Classify Signal           -
           Activate LEDs        FPGA

此示例展示了如何使用三种可能的方案将应用程序功能架构分配到硬件架构。

  • FPGA 处理预处理和分类。

  • FPGA 处理预处理,处理器处理分类。

  • 处理器句柄预处理和分类。

System Composer 将这些场景分别捕获为 Scenario 1Scenario 2Scenario 3,使用的是 分配编辑器

allocSet = systemcomposer.allocation.load('soc_signaldetector_allocation');
systemcomposer.allocation.editor

allo.png

选择分配方案需要找到最能满足应用需求的实现方式。通常,您无需进行详细的仿真,即可通过静态分析找到此实现。在此示例中,使用静态分析来分析在处理器和 FPGA 上实现不同功能组件的计算成本。

实现成本

组件的实现成本取决于所需的计算操作。要确定实现成本,请考虑以下典型方法。

  • 组件无法实现:从可用的参考实现中获取计算成本。

  • 实现和硬件已就绪:测量或配置文件候选硬件上的实现成本。

  • 实现已就绪,但硬件尚未到位:使用 SoC Blockset™ 算法分析器函数 socAlgorithmAnalyzerReport 估算实现成本。

socModelAnalyzer 函数估计 Simulink 模型中的操作数量,并生成算法分析器报告。要获取模型执行的操作数,然后分析处理器上的实现成本,请使用动态分析函数选项。要获得算法所需的运算符数量,然后分析 FPGA 上的实现成本,请使用静态分析函数选项。有关如何使用 socModelAnalyzer 的示例,请参阅此示例函数。

soc_signaldetector_costanalysis
*** Component: 'Preprocess Signal'
                                ADD(+)    MUL(*)
                                ______    ______

    FPGA Implementation            15        16 
    Processor Implementation    15300     16320 


 
*** Component: 'Classify Signal'
                                ADD(+)    MUL(*)
                                ______    ______

    FPGA Implementation            32        18 
    Processor Implementation    32640     18360 

在此代码中获得的每个功能组件的实现成本都输入到功能架构中的相应构造型中。要验证值,请选择功能架构模型中的每个组件,然后使用“属性检查器”。

要了解有关 socModelAnalyzer 的详细信息,请参阅 Compare FIR Filter Implementations Using socModelAnalyzer (SoC Blockset) 示例。此示例展示了如何分析 Simulink 算法的不同实现的计算复杂度。

分配选择

您可以使用实现应用程序功能组件所需的运算符或运算的数量来决定如何将功能组件分配给硬件组件。通过比较 FPGA 和处理器的可用资源与实现成本,分析候选方案的分配。此示例使用 FPGA 中的示例值和硬件架构模型中的处理器组件来表示可用的计算资源。使用属性检查器验证这些值。

通常,分析不会直接使用操作员或操作的数量。相反,首先将操作员或操作的数量与每个操作员或操作的成本相乘。操作员或操作的成本取决于硬件配置。确定此类成本超出了本示例的范围。

有关如何使用成本模型的示例,请使用此函数。请注意,我们要求 FPGA 和处理器的容量大于预计的实现成本,并且处理器的余量在 60% 至 90% 之间。

soc_signaldetector_partitionanalysis
                  FPGA DSPs Used (out of 900)    FPGA LUT Used (out of 218600)    Processor Instructions/s (out of 1000000000)    Processor Headroom (%)    Feasible
                  ___________________________    _____________________________    ____________________________________________    ______________________    ________

    Scenario 1                34                              576                                          0                               100                 0    
    Scenario 2                16                              192                                  326400000                               100                 0    
    Scenario 3                 0                                0                                  489600000                               100                 0    

根据结果,方案 2 是可行的。

FPGA 与处理器之间的数据路径设计

FPGA 以样本为单位处理数据,而处理器则以帧为单位处理数据。由于处理器任务的执行时间可能不确定,为了防止数据丢失,需要一个队列来存储 FPGA 与处理器之间的数据。在这种情况下,您必须设置与队列相关的参数:帧大小、帧缓冲区数量和 FIFO 大小(即 FIFO 中的样本数量)。此外,在嵌入式应用中,任务持续时间可能会因不同的任务实例而异(例如,由于不同的代码执行路径或操作系统切换时间的变化)。因此,数据可能会在内存通道中丢失。示例 Streaming Data from Hardware to Software (SoC Blockset) 展示了选择满足应用需求的前述参数的系统方法。

另请参阅

(SoC Blockset) | (SoC Blockset) |

主题