消息队列模块大幅简化复杂DSP应用.doc_第1页
消息队列模块大幅简化复杂DSP应用.doc_第2页
消息队列模块大幅简化复杂DSP应用.doc_第3页
消息队列模块大幅简化复杂DSP应用.doc_第4页
消息队列模块大幅简化复杂DSP应用.doc_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

消息队列模块大幅简化复杂DSP应用电信基础设施、视讯基础设施和影像应用的带宽需求现正快速增加。这些系统不但要支持分辨率更高、讯框率更快和音质更好的视讯串流,还必须提高信道密度并降低信道耗电。与此同时,市场的高度要求也使厂商必须整合更多的外围、内存,缩小电路板面积,以求降低系统成本。开发人员因此需要高弹性和可扩充的硅芯片及工具,协助他们跟上市场趋势。许多传统高效能DSP I/O的可靠性、带宽和扩充性都有一定的限制。Serial RapidIO (sRIO)则利用高效能的分组交换互连技术克服这些限制,对复杂的DSP架构相当有帮助。与过去的技术大相径庭,sRIO不需与内存共享接口,还能弹性调整做为主装置或仆装置操作。另外,sRIO还提供远距联机、硬件层级的错误侦测/修正功能、状态/确认(acknowledgement)回应、以及频带内中断/讯号发送等。先进DSP,如德州仪器(TI)的TMS320C6455数字讯号处理器,现在都包含sRIO接口。这些sRIO接口拥有高效率,还能直接连接DSP内部的直接内存访问(DMA)引擎,同时利用异动代理缓存器减少控制过程的附加作业。此外,sRIO接口还能设定数据的优先级以提高DMA系统的处理效率,或者将多个数据异动要求安排在队列中依序执行。复杂系统架构的sRIO接口首先,设计人员必须了解sRIO在复杂系统架构里的用途,以及如何利用sRIO有效地提高实际系统设计的弹性。sRIO提供1X和4X的1.25、2.5或3.125GHz双向链路,每个链路的产出都高达10Gbps。这表示sRIO能在芯片或电路板之间提供速度超过20Gbps以上的强大通讯能力。sRIO可让设计人员选择最合适的方法连接多颗组件。无论DSP之间是否有本地联机,都能透过交换器连接,或者直接连成网状、环状和星状架构。sRIO还可用以连接DSP、FPGA和ASIC等组件,这样的弹性可让设计人员以适合应用数据流的方式来安排零件,而不是牺牲系统设计以迁就接口或协议限制。举例而言,一个简单的系统可透过4X链路连接两颗DSP;但对于由5颗DSP组成、需要较大运算能力而不需要更多I/O的系统,则可透过1x链路将这些DSP互相连接,或是让这些DSP透过4x链路各自连接到交换器以提供更强的I/O能力(图1)。还有些系统的运算需求更高,同时可能包含12颗以上的DSP,此时就需要透过4x链路连接到由1个或多个交换器组成的架构以提供最大运算效能和I/O带宽。系统若有sRIO接口,即可利用上述特性大幅提升整体效能。举例而言,无线基础设施系统的每个ASIC或FPGA通常能处理3-6Gbps天线数据,并为每个基地台提供24-48个速度在123Mbps左右的天线串流处理能力。另一方面,用户资料通常则是透过一个共享的EMIF通道传送至DSP处理,每个用户信道的速率约为19Mbps。相较之下,具有sRIO链结通道的DSP则能分别处理用户和天线数据。DSP不仅成本远低于FPGA或ASIC,其处理能力也与现有系统相同,可提供24-48个速度约为123Mbps的天线串流,让天线数据的总速率达到3-6Gbps。在用户数据方面,新一代DSP不但提供速度更快的核心和sRIO I/O,也不会占用外部内存带宽,让每个DSP支持多达128个速度为19Mbps的用户通道,使每个DSP的用户数据速率达到2.5Gbps。图1:此处的sRIO能弹性连接5颗DSP。讯息传递sRIO接口不但提供软件开发人员所需的更高效能和高弹性,还能提供低阶或高阶程序语言开发应用软件供开发人员选择。若程序设计师采用直接I/O的低阶方式,就必须指定目标和地址。这种方法可以得到最佳效能,适用于设计时已知道目标缓冲机制且应用功能分割固定的应用软件。但此方法也有些缺点,例如开发人员必须事先得知远程处理器的物理内存映像,因此会导致其他厂商比较不容易整合软件和他们的产品。高阶讯息传递则提供一套较抽象的通讯方式,因其不需太多的低阶装置程序设计。这种方法最适合目标缓冲机制未知,以及应用分割方式未知或需要保留弹性的应用。除此之外,此类型讯息传递接口还能大幅缩短应用系统扩充或减少处理器所需的时间。目前许多嵌入式处理器厂商已直接在核心软件提供sRIO支持,例如德州仪器(TI)的DSP就在其DSP/BIOS基础软件核心的消息队列(MSGQ)模块中支持讯息传递,协助应用软件开发商在更高阶抽象层内设计应用软件。采用讯息传递机制能协助应用系统透过sRIO链路以更高效率与其他DSP通讯。这个机制的讯息传送优先权高于数据缓冲区,对于应用很有帮助,因为在多数情形下数据控制都应拥有较高的优先权。消息队列不需修改原始程序就能在多个处理器之间移动读取器和写入器,因此设计人员可以先针对单颗处理器发展应用,之后也可轻松将系统扩充为多颗处理器。这表示写入器不必知道读取器位于哪颗处理器,如此一来便让整合更简单,也更容易开发主从应用之类的应用软件。底层实体媒介若能在处理器之间进行零拷贝,消息队列就能以零拷贝的方式传送讯息。零拷贝基本上会传递指针,而不是将讯息内容复制到另一个讯息,这种方式可用于单颗处理器或共享内存的多颗处理器。这种从特定存放区(pool)为讯息配置内存的能力使系统能够提供服务质量(QoS)功能,例如为重要资源提供更快速的效能。消息队列模块讯息伫模块是由应用程序编程接口(API)、配置器和传输器组成,其架构如图2所示。应用程序编程接口将应用软件与传输器及配置器隔离,配置器提供接口给讯息配置内存,传输器则使接口在处理器之间传送讯息。图2:消息队列模块的组成架构图。 消息队列模块在传送任何讯息前,都须先为这些讯息配置内存,并利用多个配置器将重要讯息配置在一个存放区,将非重要讯息配置在另一存放区。STATICPOOL静态分配器就是一个管理应用软件提供的静态缓冲区的简单配置器。STATICPOOL会在初始设定时接受应用软件传来的缓冲区地址和长度以及所要求的讯息大小,接着再按照指定的讯息长度将缓冲区分为多个区块,并建立一个链结串行。这种做法简化了讯息搜寻。传输器接着会透过实体链路将讯息送到另一个处理器的目标消息队列(图3)。有了传输器接口后,应用软件除了设定传输器组态外,不需做任何修改就能改变底层通讯机制。这种方法能将实体链路的技术细节隐藏,同时改善应用软件的可移植性。图3:传输器可透过实体链路将讯息送到另一个处理器的目标消息队列。消息队列拥有独一无二的全局名称,传送者只要用这个名称就能找到该消息队列。所有透过消息队列模块传送的讯息都须将首要字段设为MSGQ_MsgHeader,因为内部指令就是储存在这个标头。这个标头则会供给传输器和消息队列模块的内部使用。将讯息送到不同处理器时,传输器会处理讯息标头部份的字符长度或字节顺序差异。应用软件则负责转换讯息中与应用有关的部份。不同的处理器可能有不同的排程模块(系统的消息队列),因此消息队列模块允许应用软件的写入器指定通知机制的类型。这项功能可让用户指定通知机制并对消息队列模块进行相应调整。但当讯息送到读取器后,写入器就失去了讯息的拥有权,也无法再修改讯息或释出占用的内存,因此传送讯息前一定要确保其内容正确。读取器收到讯息后,必须释出讯息占用的内存或重新使用该讯息。寻找特定消息队列消息队列模块会为每个开启的消息队列提供一个讯息储存区,消息队列的读取器便会从该储存区取得讯息。透过这种方式,就算读取器或写入器线程必须移到另一个处理器,也不需改变读取器或写入器的程序代码。寻找消息队列的方法分为同步与异步两种。同步函式(有可能阻挡其他的线程)会在每次执行传输时,利用一个讯息询问和寻找所要的消息队列。异步函式则会在找到消息队列后,传送一个异步定位讯息到指定的消息队列。同步作业的实作较容易,但必须阻挡队列里的数项参数,例如定位线程。异步操作虽不必阻挡其他线程,但实际设计和使用都较为困难。同步与异步操作都是由应用指定的通知机制提供支持。使用者可以指定通知机制,例如号志或中断要求等,以避免受限于特定的排程模型。讯息传送者可以嵌入一个消息队列,讯息读取器则能取出该消息队列和响应传送者。数据流范例以下为在两个DSP之间移动数据之应用的简单数据流。这个例子使用多个存放区管理不同类型的讯息,包括应用讯息、传输器内部控制讯息和错误讯息。虽然应用软件不见得要使用不同的存放区,但却可让应用维护更容易。举例而言,管理数个小型存放区有时比应付一个大容量存储更容易。另外,若讯息的长度不同,使用一个存放区就会浪费很多内存,因为这个存放区必须做支持可能出现的最大讯息长度的准备。这个流程范例是在评估模块上执行,例如TI的TMS320C6455评估模块,包含两颗透过sRIO相连的1GHz TMS320C6455 DSP。这套评估模块还包含完整程序代码,提供给用户做为设计范例。main()if processor 0: Open the boss message queue and create the boss thread.if processor 1: Open the worker message queue and create the worker thread.Open error message queue and create the error thread.srio_init to initialize peripheralworkerThread()LoopMSGQ_get message from the worker queueDetermine senderSend specific number of message to senderbossThread()MSGQ_locate to locate worker queueLoopMSGQ_alloc messageFill in message with number of messages to receive.MSGQ_setSrcQueue to embedded bosss message queueMSGQ_put message to readerLoopMSGQ_get message from the boss queueerrorThread()LoopMSGQ_get message from the error queueLog MQT error via LOG_printf透过单颗处理器传送讯息以下说明当一颗处理器的工作1将讯息传送给工作2的过程。工作2是由操作系统为其排程,并同时开启一个消息队列,而且为该消息队列指定一个等待函式(pend)和一个送出函式(post)。等待函式是在没有讯息时执行,送出函式则是在将讯息传送给消息队列时呼叫使用。如果消息队列模块发现没有讯息等待处理,工作1即可正常执行,但必须先读取队列标识符(queue identifier)和找到正确的队列,因为讯息可能会在另一个处理器。队列的位置通常会在启动时确认,这对效能几乎不会造成任何影响。工作1在传送讯息给工作2前,必须先为该讯息配置适当的内存。工作1将讯息送出后,就不能再使用该讯息,因为讯息所有权已属于消息队列模块,而消息队列模块会将讯息分派给

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论