多核片上系统(SoC)架构的嵌入式DSP软件设计

Multicore a System-on-a-Chip (SoC) Architecture

SoCs的软件开发涉及到基于最强大的计算模型在各种处理单元之间划分应用程序。这可能需要大量的试用anderror来建立正确的分区。在高层次上,SoCpartitioning算法如下:

将状态机软件(那些提供应用程序控制、排序、用户界面控制、事件驱动软件等的算法)放在一个RISCprocessor上,如ARM。

将信号处理软件放在DSP上,利用DSP为信号处理功能提供的特定于应用程序的体系结构。

在硬件加速器中放置高速率、计算密集型算法(如果它们存在并且是根据考虑的特定算法定制的)。

例如,考虑下面图1所示的软件分区。这个soc模型包含一个通用处理器(GPP)、一个DSP和硬件加速。GPP包含一个芯片支持库,它是一组低层外围API,提供对设备外围设备的有效访问、一个通用操作系统、一个算法层和一组API for、application和userinterface层。

该DSP包含一个类似的芯片支持库、以aDSP为中心的内核、一组特定于DSP的算法以及与高级应用软件的接口。硬件加速器包含一组供程序员访问的api和映射到加速的一些非常具体的算法。

应用程序程序员负责整个系统的划分,并将算法映射到相应的处理元素。一些供应商可能会为这些处理元素中的一个或多个提供“黑盒”解决方案,包括DSP和硬件加速器。

这为应用程序开发人员提供了另一个抽象级别,他们不需要知道一些底层算法的细节。其他系统开发人员可能希望访问这些低级算法,因此这些系统的编程模型通常具有灵活性,这取决于所需的定制和裁剪量。

Figure1.  Software Architecture for SoC

SoC中的通信主要是通过软件来建立的。例如,通过将DSP数据空间中的存储器定义为寄存器来实现图1中的DSP和arm之间的通信接口。             

ARM通过主机接口获得对这些寄存器的读/写访问。两个处理器可以异步地向对方发出命令,没有人能控制对方。命令序列是纯顺序的;除非DSPhas发送“命令完成”确认,否则ARM不能发出新命令。             

ARM与DSP之间有两个寄存器对建立双向异步通信,一个寄存器对用于向ARM发送命令,另一个寄存器对用于向DSP发送命令。每个寄存器对有:             

命令寄存器,用于将命令传递给rm或DSP;             

命令完成寄存器,用于返回命令的执行状态;             

每个命令最多可传递30字的命令参数;             

此外,每个命令执行最多可以返回30个单词的commandreturnparameters。             

ARM-to-DSP命令序列如下:             

ARM将命令写入命令寄存器             

ARM将参数数写入数字寄存器             

ARM将命令参数写入命令参数空间             

ARM向DSP发出不可屏蔽的中断             

DSP读取命令             

DSP读取命令参数             

数字信号处理器执行命令              

DSP清除命令寄存器             

DSP将结果参数写入结果参数空间             

DSP写入“命令完成”寄存器             

DSP向ARM发出提示中断             

从DSP到ARM的命令序列如下:             

DSP将命令写入命令寄存器             

数字信号处理器将参数的个数写入数字寄存器             

DSP将命令参数写入命令参数空间             

DSP向DSP发出提示中断              

ARM读取命令             

ARM读取命令参数             

ARM执行DSP命令             

ARM清除命令寄存器             

ARM将结果参数写入结果参数空间             

ARM写入“命令完成”寄存器             

ARM向DSP发送INT0中断             

ARM和DSP之间的通信通常使用一组通信api来完成。下面是通用处理器(在这种情况下是ARM)和DSP之间的一组通信api的示例:

#define ARM_DSP_COMM_AREA_START_ADDR 0x80

 Start DSP address for ARM-DSP.

#define ARM_DSP_COMM_AREA_END_ADDR 0xFF

 End DSP address for ARM-DSP.

#define ARM_DSP_DSPCR (ARM_DSP_COMM_AREA_START_ADDR)

 ARM to DSP, parameters and command
from ARM.


#define ARM_DSP_DSPCCR (ARM_DSP_COMM_AREA_START_ADDR+32)

 ARM to DSP, return values and
completion code from DSP.


#define ARM_DSP_ARMCR (ARM_DSP_COMM_AREA_START_ADDR+64)

 DSP to ARM, parameters and command
from DSP.


#define ARM_DSP_ARMCCR (ARM_DSP_COMM_AREA_START_ADDR+96)

 DSP to ARM, return values and
completion code from ARM.


#define DSP_CMD_MASK (Uint16)0x0FFF

 Command mask for DSP.

#define DSP_CMD_COMPLETE (Uint16)0x4000

 ARM-DSP command complete, from DSP.


#define DSP_CMD_OK (Uint16)0x0000

 ARM-DSP valid command.

#define DSP_CMD_INVALID_CMD (Uint16)0x1000

 ARM-DSP invalid command.

#define DSP_CMD_INVALID_PARAM (Uint16)0x2000

 ARM-DSP invalid parameters.



 Functions

STATUS ARMDSP_sendDspCmd (Uint16 cmd, Uint16 *cmdParams, Uint16 nParams)

 Send command, parameters from ARM to
DSP.


STATUS ARMDSP_getDspReply (Uint16 *status, Uint16 *retParams, Uint16 nParams)

 Get command execution status, return
parameters sent by DSP to ARM.


STATUS ARMDSP_getArmCmd (Uint16 *cmd, Uint16 *cmdParams, Uint16 nParams)

 Get command, parameters sent by DSP
to ARM.


STATUS ARMDSP_sendArmReply (Uint16 status, Uint16 *retParams, Uint16 nParams)

 end command execution status, return
parameters from ARM to DSP.


STATUS ARMDSP_clearReg ()

 Clear ARM-DSP communication area.

SoC系统启动顺序             

通常,DSP的引导映像是ARM引导映像的一部分。对于需要执行的不同任务,DSP可能有许多不同的引导映像。该序列从ARM下载与DSP要执行的特定任务相关的图像开始。arm复位,然后DSP(通过一个控制寄存器)然后带来复位的DSPout。             

在这个阶段,DSP开始在一个特定的位置执行,通常在ROM中。这个地址的ROM代码初始化DSP内部寄存器并将DSP放入idlemode中。此时,ARM使用主机端口接口下载DSP代码。              

在完成下载DSP图像之后,ARM可以向DSP发送一个中断,DSP将其从空闲模式唤醒,矢量到开始位置,并开始运行ARM加载的应用程序代码。DSP启动顺序如下:             

ARM重置DSP,然后将其从重置中取出。             

数字信号处理器(DSP)退出复位,并用startaddress加载其程序计数器(PC)寄存器。             

这个位置的ROM代码将DSP分支到一个初始化routineaddress。             

初始化一个DSP状态寄存器,将矢量表移动到指定的位置,除专用的不可屏蔽中断外,所有中断都被禁用,并且DSP被设置为模式。             

当DSP处于其模式时,ARM用DSP代码/数据加载DSP程序/数据存储器。             

当ARM完成下载DSP代码时,它通过断言一个中断信号从该模式唤醒DSP。             

然后,DSP分支到新的interruptvector表所在的起始地址。ARM应该至少在开始代码中加载了abranch。

SoC的工具支持

SoC工具环境还包含监视每个处理元素的详细状态的支持。如下图3所示,anSoc中处理元素的详细状态报告和控制允许开发人员查看系统的执行概要。             

此外,由于功率敏感的SoC设备可能会在应用程序执行时关闭部分或全部设备,因此了解应用程序的功率分布也很有用。这也可以通过适当的分析工具得到。              

一般来说,SoC和异构处理器需要更复杂的工具支持。一个SoC可以包含几个可编程的可调试处理元素,这些处理元素需要支持代码生成、调试访问和可见性以及实时数据分析的工具。A这方面的一般模型如下图2所示。一个SoC处理器将有几个处理元件,如ARM和DSP。             

这些处理元素中的每一个都需要一个开发环境,其中包括提取、处理和显示调试和检测数据流的机制、调用和插入内存的机制以及控制可编程元素执行的机制,以及生成、链接和构建可编程元素可执行映像的工具。

Figure2. An
SoC tools environment 

SoC工具环境还包含监视每个处理元素的详细状态的支持。如下图3所示,anSoc中处理元素的详细状态报告和控制允许开发人员查看系统的执行概要。             

此外,由于功率敏感的SoC设备可能会在应用程序执行时关闭部分或全部设备,因此了解应用程序的功率分布也很有用。这也可以通过适当的分析工具得到。

Figure3. Tools support provide visibility into
the status of each of theSoC processing elements 

SoC的视频处理实例

视频处理是需要片上系统解决方案的商业应用的一个很好的例子。视频处理应用程序是计算密集型的,需要大量的MIPS来维持这些应用程序所需的数据吞吐量。这些应用程序中的一些非常复杂的算法包括:

“图像管道处理和视频稳定

“压缩和减压

“颜色转换

“水印和各种形式的加密

Figure4. A
SoC designed for video and image processing using a RISC device(ARM926) and a DSP 

要执行每秒30帧的MPEG-4算法,根据视频的分辨率可以达到2500 MIPS。

音频通道处理没有要求那么高,但是仍然需要足够的整体MIPS来执行音频压缩和解压缩、均衡和采样率转换。

随着这些应用变得更加复杂和要求更高(例如,新的压缩技术仍在开发中),这些SoC将不仅需要支持一个压缩标准,还需要支持几个不同的压缩标准。用于视频应用的soc包括用于提高性能的专用指令集加速器。soc编程模型和外围混合允许灵活地有效地支持这些标准的几种格式。

例如,上面图4中的DM320 SoC处理器有一个专用于视频处理的片上Simd引擎(称为iMX)。该硬件加速器可以执行常见的视频处理算法(离散余弦变换(DCT)、IDCT、运动估计、运动相关等)

VLCD(可变长度编码/解码)处理器用于支持可变长度编码和解码以及JPEG、H.263、MPEG-1/2/4视频压缩标准的量化。

如图4所示,SoC解决方案包含适当的加速机制、专用指令集、硬件协处理器等,它们提供了DSP应用中重要算法的高效执行。我们讨论了视频处理的一个例子,但是您会发现支持其他应用程序(如无线基站和蜂窝手机)的机制是相同的。

多核片上系统(SoC)架构的嵌入式DSP软件设计的更多相关文章

  1. (数字IC)低功耗设计入门(三)——系统与架构级

    前面讲解了使用EDA工具(主要是power compiler)进行功耗分析的流程,这里我们将介绍在数字IC中进行低功耗设计的方法,同时也结合EDA工具(主要是Design Compiler)如何实现. ...

  2. 高性能web系统的架构和系统优化

    07年毕业一直都在软件公司,14年来到一个互联网公司,给我的感受,区别主要在于: 软件公司需求相对稳定,能够按照计划按部就班的去实施,互联网公司需求相对来说不稳定,上线比较着急,大部分都是小迭代更新, ...

  3. SLAM+语音机器人DIY系列:(二)ROS入门——2.ROS系统整体架构

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  4. “分而治之”,一种AI和动画系统的架构

    译者注:随着国内游戏研发水平的不断提高,对画面品质的不断提升,同时大量手游使用Unity和Unreal 4等成熟的工具开发,动作状态机已经不是什么陌生的概念了.我们在项目开发时也大量使用了动作状态机. ...

  5. (系统架构)标准Web系统的架构分层

    标准Web系统的架构分层 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求的不同,不一定每一层 ...

  6. 标准Web系统的架构分层

    标准Web系统的架构分层 – 转载请注明出处 1.架构体系分层图 在上图中我们描述了Web系统架构中的组成部分.并且给出了每一层常用的技术组件/服务实现.需要注意以下几点: 系统架构是灵活的,根据需求 ...

  7. Android系统四层架构分享

    Android系统四层架构 个人网站:http://www.51pansou.com Android视频下载:Android视频 Android源码下载:Android源码 如果把Android系统看 ...

  8. 基于Flume的美团日志收集系统(一)架构和设计

    美团的日志收集系统负责美团的所有业务日志的收集,并分别给Hadoop平台提供离线数据和Storm平台提供实时数据流.美团的日志收集系统基于Flume设计和搭建而成. <基于Flume的美团日志收 ...

  9. SaaS系列介绍之十三: SaaS系统体系架构

    1 系统体系架构设计 软件开发中系统体系架构决定了一个系统稳定性.健壮性.可扩展性.兼容性和可用性,它是系统的灵魂.体系架构是架构师所关注的核心.良好的体系架构是系统成功的开端,否则,再好的代码与设计 ...

随机推荐

  1. thinkPHP5中的与原本的字母方法用什么东西替代了?

    过去的单字母函数已完全被替换掉,如下:S=>cache,C=>config,M/D=>model,U=>url,I=>input,E=>exception,L=&g ...

  2. Linux中常见的150个命令(干货)

    目录 线上查询及帮助命令 文件和目录操作命令 查看文件和内容处理命令 文件压缩及解压缩命令 信息显示命令 搜索文件命令 进程管理相关命令 用户管理命令 基础网络操作命令 深入网络操作命令 有关磁盘与文 ...

  3. php、jsp、asp和aspx的区别

    目录 PHP JSP ASP ASP.NET PHP PHP是一种跨平台的服务器端的嵌入式脚本语言.它大量地借用C.Java 和 Perl 语言的语法,并耦合PHP自己的特性,使WEB开发者能够快速地 ...

  4. (翻译)Attacking Interoperability(攻击互操作性)in Black Hat 2009 研究报告

    前言 攻击互操作性(Attacking Interoperability)是 Mark & Ryan & David 发表于 2009 年的美国黑帽大会(Black Hat)上的一份研 ...

  5. Hexo 博客Next 搭建与美化主题

    ========================================================================================将页面部署到GitHub ...

  6. 2020腾讯Android岗初级到高级面试真题收录解析

    前言 马上就要到金九银十面试季了,需要找工作的小伙伴可以开始刷题复习了. 今天给大家分享的是博主腾讯面试的面经以及对腾讯2020上半年Android开发岗面经真题收录,希望可以帮助到大家,喜欢的朋友可 ...

  7. 每天一道面试题LeetCode 26--删除排序数组中的重复项(python实现)

    题目1:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成. ...

  8. Django(3)pycharm创建项目

    创建项目 我们创建django项目有两种方式,命令行方式和使用pycharm工具创建,本文就介绍常用的pycharm工具创建   首先点击django,输入项目的名称,选择创建好的虚拟环境,最后点击c ...

  9. JVM内存溢出后服务还能运行吗

    文章开篇问一个问题吧,一个java程序,如果其中一个线程发生了OOM,那进程中的其他线程还能运行吗? 接下来做实验,看看JVM的六种OOM之后程序还能不能访问. 在这里我用的是一个springboot ...

  10. VSCode配置MSVC+VSCode使用easyx库,2021.5.13日配置

    VSCode配置MSVC+VSCode使用easyx库,2021.5.13日配置~~ 想必很多人和我一样,想用vscode编程c++,easyx库不支持MinGW,一般人都是直接使用vs2019安装e ...