借助 MATLAB/Simulink 插件进一步提高 ARC DSP 处理器上的应用程序性能

Ashling 全球工程业务副总裁 Hugh O’Keeffe

简介

物联网 (IoT) 和互联车辆的性能要求已使数字信号处理 (DSP) 技术在诸如传感器融合、语音检测、语音识别和音频处理等数学密集型嵌入式应用中变得越来越有必要。为了满足这些要求,Synopsys 提供了一系列针对 DSP 密集型应用进行了优化的 DesignWare® ARC® 处理器 IP。为了促进这些处理器的快速软件开发,DesignWare ARC MetaWare 开发工具包为 ARC 处理器的 DSP 指令和 XY 存储器提供了全面的 C/C ++ 编程支持。该工具包包含针对 ARC 处理器进行了高度优化的丰富的 DSP 函数库,C/C ++ 开发人员可以轻松地将其集成到嵌入式应用程序软件中。

MathWorks MATLAB® 是一个专门为工程师和科学家设计的编程平台。它在使用方便的环境中集成了计算、可视化和编程功能。在这一环境中,问题和解决方案均以 MATLAB 语言表达。MATLAB 语言是一种基于矩阵的语言,可以非常自然地表达计算数学。Simulink® 是 MATLAB 的附加产品,可为动态系统的建模、仿真和分析提供交互式的图形环境。通过一起使用 MATLAB 和 Simulink,用户可以将文本和图形编程结合起来,以在仿真环境中设计其系统。

本文介绍了 MetaWare MATLAB/Simulink 插件,该插件使 DesignWare ARC 处理器用户能够使用 MathWorks MATLAB/Simulink 平台创建高度优化的应用程序。

MATLAB 和 Simulink

MathWorks MATLAB 是一个数学编程平台,具有专有语言和丰富的库,能够开发数学算法,进行数据分析以及创建模型和应用程序。它可以快速构建虚拟原型,只需花费很少的精力即可探索任何细节级别的设计概念。Simulink 提供了用于将模型构建为模块图的图形用户界面 (GUI),并包括用于构建系统图形模型的预定义模块的综合库。MATLAB 和 Simulink 可以协同工作,并且 MATLAB 模型或应用程序可以轻松集成到 Simulink 设计中,从而可以对整个系统进行仿真。MATLAB 和 Simulink 均支持 C 代码的生成(利用 MathWorks 的“嵌入式编码器”),该代码允许将经过仿真和验证的系统设计部署到 PC、服务器、嵌入式系统等。

ARC MetaWare 开发工具包

Synopsys 的 ARC MetaWare 开发工具包是一套完整的 C/C ++ 工具链解决方案,其中包含支持所有 DesignWare ARC 处理器的嵌入式应用程序的开发、调试和优化所需的所有组件。

MetaWare MATLAB/Simulink 插件将 DesignWare ARC MetaWare 开发工具包集成到 MATLAB 和 Simulink 中,从而允许使用 MetaWare 编译器编译“嵌入式编码器”生成的 C 代码。然后,可以在 ARC 处理器目标(例如,使用 DesignWare ARC EM 入门工具包或 DesignWare ARC AXS103 软件开发平台)和仿真器(例如 ARC nSIM 指令集仿真器)上运行这些经过编译的代码。图 1 概括了 MetaWare 与 MATLAB/Simulink 的集成。

图 1. MATLAB/Simulink MetaWare 集成

代码替换

该插件随 MetaWare 开发工具包一起提供,并包括一个用户手册。可以在 MATLAB 内部采用 安装 App 选项轻松安装。

MATLAB/Simulink 代码生成软件生成 ANSI/ISO C 代码。然而为了达到卓越性能,必须针对处理器专门生成代码,并且 MATLAB/Simulink 代码替换功能允许使用针对目标处理器优化的代码的函数调用,自动替换生成的代码中的指定函数调用。代码替换功能将对某些普通的 ANSI/ISO C 函数调用(由 MATLAB/Simulink 生成)替换为对  MetaWare  DSP 库中包含的高度优化函数的调用。

该插件允许将 MATLAB 配置为启用代码替换,以使用 Synopsys DesignWare ARC DSP 库中的函数。

该插件提供了一个“映射”表,该表告诉 MATLAB 如何进行代码替换,并确保 ARC MetaWare DSP 库的理想利用:

  • 向量函数
  • 复杂数学
  • 标量函数
  •  实数和复数矩阵函数
  • Simulink DSP 模块包括:
    • 离散 FIR
    • 卷积
    • 相关系数
    • 双二阶滤波器 DF1/双二阶滤波器 DF2T
    • FIR 抽取/插值
    • LMS 滤波器
    • 实数/复数 FFT
    • 实数/复数逆 FFT

用户手册中提供了所支持的所有映射的全部详细信息。例如,下表显示了受支持的到 DesignWare ARC MetaWare DSP 库的矩阵函数映射:

表格 1. 矩阵函数

MathWorks CRTOOL 可用于轻松显示插件执行的映射,或者只需在启用映射和禁用映射的情况下构建应用程序,查看生成的代码有何差异。

环内处理器

Simulink 支持环内处理器 (PIL),这是一种在硬件上开发和测试 Simulink 模型的方法。在 PIL 仿真中,生成的代码在目标硬件上运行。选择模型中的特定模块以在硬件上运行,因此就创建了 PIL 模块,使 Simulink 可以与常规模块仿真并行地运行此模块。PIL 仿真的结果被传输到 Simulink,从而可以验证仿真和代码生成结果的数值等效性。这一 PIL 验证过程是设计周期的关键部分,旨在确保部署代码的行为与设计相匹配。图 2 显示了典型的 PIL 设置。

该插件使用 Ashling Opella-XD JTAG 探头接口托管 PC,从而在 ARC EM 入门套件和 ARC AXS103 软件开发平台硬件目标上支持 PIL。PIL 要求目标正在运行可从 www.embarc.org 获取的 embARC 开放软件平台(带有 FreeRTOS)。

图 2. 使用 Ashling Opella-XD JTAG 探头的典型 PIL 设置

API (rtIOStream) 用于管理 Simulink 与目标硬件上运行的代码之间的通信,该通信可以通过串行接口或 TCP/IP 连接来实现。该插件支持使用串行连接(通过 USB 的 UART)或 TCP/IP 接口进行通信。

Simulink 允许仿真模块和 PIL 模块(在硬件上运行)同时并行运行,并且可以比较两者的结果输出,从而可以在 Simulink 中进行验证。该验证过程可确保在硬件上运行的已部署代码与 Simulink 设计匹配。图 3 显示了并行运行的仿真和硬件目标。注意如何比较两个模块的输出以验证正确的操作。

图 3. Simulink 设计显示了在 Simulink(控制器)和 PIL(控制器 1)中运行的模块

基准测试

MATLAB 插件支持 Simulink 提供的本机代码执行性能分析或基准测试。启用后,将对生成的代码进行测量,以记录函数执行所需的时间。运行仿真后,Simulink 提供代码执行性能分析报告以进行分析。请注意,目标处理器中必须存在 ARC TIMER0 并启用才能执行基准测试。

使用 DesignWare ARC MetaWare DSP 库的代码替换可提高整体性能,而能否改进通常取决于:

  • 优化的函数/运算符(使用 ARC MetaWare DSP 库)
  • 向量/矩阵输入大小

例如,使用 ARC MetaWare DSP 库时,发现使用 32 位单精度浮点数据类型的 5x5 矩阵乘法运行速度快 2.5 倍。离散 FIR 滤波器(q15 定点;64x1 输入向量)的运行速度提高 6.6 倍。

结语

Synopsys DesignWare ARC MetaWare 开发工具包的 MATLAB/Simulink 插件使 ARC 处理器用户能够生成高性能代码,如上面的基准示例所示。通过使用 MATLAB 的嵌入式编码器代码替换库,插件可以借助充分利用 ARC 架构 DSP 扩展程序的 DesignWare ARC MetaWare DSP 库,生成高度优化的“C”代码,以在“ARC”架构上运行。