您的位置 首页 汽车

双核处理器ARM+DSP怎么完成协同作业

针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,

针对当时运用的复杂性,SOC芯片更好能能满意运用和媒体的需求,集成许多接口,用ARM做为运用处理器进行多样化的运用开发和用户界面和接口,运用DSP进行算法加快,特别是媒体的编解码算法加快,既能够坚持算法的灵活性,又能供给强壮的处理才干。德州仪器(TI)继榜首系列Davinci芯片DM644x之后,又接连推出了DM643x,DM35x/36x,DM6467,OMAP35x,OMAPLx等一系列ARM+DSP或ARM+视频协处理器的多媒体处理器渠道。许多有很强DSP开发经历的工程师,以及运用处理开发经历的工程师都转到运用达芬奇或OMAP渠道上开发视频监控、视频会议及便携式多媒体终端等产品。依据ARM+DSP的芯片架构,怎么进行开发完成做希望的嵌入式运用呢?
传统的芯片,根本是一个处理器内核,或许是通用处理器如ARM,或许是DSP。关于操控和用户接口,一般用通用处理器完成,算法处理或许媒体处理则依赖于DSP或许硬件芯片,许多体系都是双芯片的架构。开发形式也比较单纯,比方ARM芯片,有ARM的的仿真东西,依据OS之上进行运用开发;DSP有DSP的开发东西,如TI的CCS以及510、560的仿真器,能够进行算法的移植、优化、盯梢、调试等。这时,所需求的经历也比较单一。

依据ARM+DSP的双核架构,许多工程师不知道怎么下手进行开发,提出了许多的疑问,比方对ARM工程师,很困惑的是怎么运用DSP的资源?怎么进行数据的交互?怎么坚持双核之间的同步?对DSP工程师,则问到怎么进行ARM调试?怎么发动DSP?假如进行媒体加快,怎么操作外设获取或发送数据等。依据不同的开发经历和根底,ARM工程师和DSP工程师会从彻底不同的视点来看SOC的芯片,以至于拿到SOC的芯片底子不知道怎么下手,这儿就自己的经历与我们同享一下。

首要ARM+DSP的芯片,他是一个双核的,对应ARM和DSP分别是不同的指令集和编译器,能够把SOC的芯片看成是两个单芯片的组成,需求两套不同的开发东西,CCS3.3能够进行芯片级的调试和仿真,可是对应ARM和DSP需求挑选不同的渠道。一般来说,ARM上面跑操作体系,比方Linux,Wince等,在ARM上的开发,除了bootloader以外,根本都是依据OS的开发,比方驱动,内核削减,以及上层运用等,需求的调试和仿真主要靠log或许OS供给的调试器,如KGDB,Platform Builder等。依据DSP核的开发和传统单核DSP相同,需求用CCS+仿真器来进行开发调试。

其次,关于芯片的外设接口,ARM核和DSP核都能够拜访,典型的状况是ARM操控一切的外设,经过OS上的驱动去操控和办理,这部分和传统的ARM芯片相似;DSP主要是进行算法加快,仅仅和memory打交道,为了坚持芯片的资源办理的一致性,尽量防止由DSP去拜访外设。当然,依据详细的运用需求,DSP也是能够操控外设接口进行数据的收发,这时,需求做好体系的办理,防止双核操作的抵触。

对memory的运用,非易失的存储空间,比方NAND、NOR Flash,根本也是由ARM拜访,DSP的算法代码作为ARM端OS文件体系的一个文件存在,经过运用程序进行DSP程序的下载和DSP芯片的操控。外部RAM空间,即DDR存储区,是ARM和DSP同享存在的,可是在体系规划的时分,需求把ARM和DSP运用的内存严厉物理地址分隔,以及预留出一部分用来交互的内存空间。一般状况,ARM是用低端地址,DSP经过CMD文件分配高端地址,中心预留部分空间用来做数据交互,比方在OMAP3的Linux下的DVSDK中,128MB的DDR空间被分红三部分,低端地址从0x8000000到0x85800000-1的88MB空间给Linux内核运用;从0x85800000到0x86800000-1的16MB给CMEM的驱动,用来做ARM和DSP的大块数据交互,从0x86800000到0x88000000-1的24MB是DSP的代码和数据空间。

芯片的发动也是需求要点考虑的问题,一般状况下,是ARM发动,和传统的单核ARM相同,支撑不同的发动方法,比方能够支撑NAND,NOR,UART,SPI,USB,PCI等接口发动。DSP默许处于复位状况,只要经过ARM的运用下载代码而且免除复位今后,DSP才干跑起来。有些运用场景,需求DSP直接从外部上电就自发动,有些芯片也是支撑这种形式的。

终究,关于芯片的通讯和同步,这个是困扰许多工程师的问题,为了便于客户的开发和运用,TI供给了DSPLINK,CODEC ENGINE的DVSDK开发套件,依据DVSDK能够很便利的进行ARM+DSP的运用开发,下面临DVSDK的软件架构,各个软件模块的功用等做扼要介绍。

DVSDK是多个软件模块的集成,包括纯DSP端的软件模块,ARM的软件模块和双核交互的软件模块。DVSDK的软件包都是依据实时软件模块(Real-Time-Software-Component:RTSC)的,还需求装置RTSC的东西XDC,XDC是TI开源的一个东西,能够支撑跨渠道的开发,能够最大程度的代码重用;假如需求进行纯ARM的开发,还需求ARM的编译东西以及Linux内核或许Wince的BSP;假如需求进行DSP的算法开发或许DSP端开履行代码生成,还需求装置DSP的编译器cgtools和DSP/BIOS;为了便于装备生成DSP端的可履行代码,经过导游生成Codec的RTSC包和可履行代码,还能够选装ceutils和cg_xml。

DVSDK的中心是Codec Engine,一切的其他软件模块根本都是环绕Codec Engine的。Codec Engine是衔接ARM和DSP的桥梁,是介于运用层(ARM侧的运用程序)和信号处理层(DSP侧的算法)之间的软件模块,在编译DSP端可履行代码和ARM端运用程序时,都需求Codec Engine的支撑。Codec Engine主要有两部分:
? ARM端运用适配层,供给了精简的API和对应的库给运用层运用。
? DSP的算法调用层,供给了DSP算法的接口封装标准,是的一切的算法经过简略的装备就能够编译到DSP的可履行程序中。
终究的运用程序需求经过Codec Engine的API接口来下载DSP代码,调用DSP端的封装好的算法,以及进行ARM和DSP的通讯。

关于Codec Engine的介绍,能够参阅《帮您快速入门Codec Engine》。

Codec Engine底层ARM和DSP的通讯是建立在DSP/BIOS Link之上的,DSP/BIOS Link真实完成ARM和DSP交互的软件模块。因为DSP/BIOS Link是跨渠道的,也是有ARM部分和DSP部分组成,其间在ARM端,包括依据OS的驱动和供运用调用的库文件,DSP端,有必要要用DSP/BIOS,DSP的可履行代码需求包括DSP/BIOS Link的库文件。DSP/BIOS

Link常用的主要有如下几部分的软件模块:
? PROC相关的,主要是用来做DSP芯片的操控,比方发动,中止等,下载DSP的可履行代码,以及直接读写DSP端的memory空间等
? MSGQ相关,ARM和DSP的通讯是依据MSGQ的,MSGQ有轮询等候的方法或许中止的方法,MSG是依据同享内存池的方法。Codec Engine经过MSGQ交互一些要害数据,比方操控,和一些大块数据的地址指针等。很多的数据交互需求经过cmem完成。

在ARM端,合作Codec Engine运用的软件模块有LinuxUtils或许WinceUtils,包括cmem,SDMA等,cmem是用来在OS之外分配接连物理内存空间,进行物理地址到虚地址,以及虚地址到物理地址空间转化的。为了防止数据的屡次仿制,需求拓荒一块ARM和DSP同享的数据空间,ARM和DSP都能够直接拜访,这部分空间需求经过CMEM办理。对ARM来说,CMEM是OS上的一个驱动程序,需求经过IOCTL来完成内存分配或许地址空间转化。因为DSP能够拜访任何物理地址空间,经过ARM传给DSP的指针有必要是物理地址。

为了适配一些播放器的接口,DVSDK还供给了DMAI(Digital Media Application Interface),DMAI供给了更为精简的媒体接口和依据OS的音视频捕捉、回放等接口,在Linux下的gstreamer和Wince下的dshow filter都是依据DMAI的。而且DMAI也供给了最根本的测验运用比如,能够很便利的进行修正和测验。

假如仅仅调用现成的或许第三方的算法库,能够只了解ARM端的软件模块,Codec Engine或许DMAI现已供给了丰厚的运用接口,DSP能够认为是个单纯的媒体加快器,把ARM+DSP的芯片当作ASIC相同运用。假如要充分发挥DSP的功能,就需求对DSP进行开发了。Codec Engine对DSP的算法仅仅标准了接口,以便于和Codec Engine一同生成DSP的可履行程序。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qiche/257284.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部