DSP

学习笔记1-如果构建达芬奇的dsp server

2019-07-13 09:32发布

  如何构建达芬奇的DSP Server   1,Davinci的特点:ARM负责操作系统,DSP负责codec算法处理,ARM通过codec engine来调用DSP侧的codec。 codec engine: 我理解的是ARM和DSP连接的桥梁 codec server(dsp server):把不同的模块集成到一起生成DSP可执行文件,并对他们的DSP资源进行管理 PS: codec server 包含了 codec engine     2,软件系统分为三层:     1)信号处理层:在DSP侧负责处理算法,codec engine,dsp实时操作系统DSP/BIOS,与ARM的通信     2)I/O层:针对Davinci外设模块的驱动程序     3)应用层:         a,通过codec engine的VISA AIP (video, image, speech, audio) 来调用DSP侧的算法(信号处理层)。         b,通过EPSI API (easy peripheral software interface) 来访问和操作Davinci的外设(I/O层)     3,软件系统的开发步骤:     1)基于DSP侧的算法,生成算法库文件*.lib。           PS:算法必须符合xDM ( xDAIS ( eXpress DSP Algorithm Interface Standard) for Digital Media) 标准                   如果不符合,就要创建自己的stub和skeleton     2)生成DSP server,即*x64p(.out)文件,即在DSP上运行的可执行文件     3)根据DSP server创建codec engine的配置文件.cfg(这和后面要说到的dsp server的配置文件.cfg是不一样的)     4)把codec包(算法包)、DSP server(用于分配资源)、codec engine(负责ARM和DSP的沟通)的配置文件,结合生成ARM的可执行文件。 总结:算法(DSP侧)->dsp server(负责分配资源,dsp侧)->codec engine配置文件(负责沟通)->前三者结合起来生成能ARM侧的可执行文件     4,codec engine是什么 1)应用层通过codec engine的API来调用、运行符合xDAIS的算法 具体来说,在这里,这个API是VISA API,这个算法是音视频编解码算法xDM 我可以理解为:不同的应用调用不同的API,不同的API调用相应的不同的算法 比如:应用层要解决“上网问题”->通过codec engine的“上网API”->调用“上网算法”   2)也就是说,codec engine通过API为算法提供一个标准的软件架构和接口。 具体表现为: a,通过API调用的算法可在本地(ARM侧)或者远端(DSP侧)执行 b,codec engine可基于ARM+DSP、DSP、ARM上运行 c,无论codec engine在哪里运行,对应的API都一样 d,无论codec engine运行的环境是什么(linux或者别的),API都一样 我理解为:API只面向算法,算法不同,对应的API不同,不管其他外界变量如何,API不变   3)codec engine是介于应用程序和具体算法之间的软件(前面说到ARM通过codec engine来调用DSP侧的算法,这个不矛盾吧??) 在Davinci中,程序通过API调用算法 具体来说API通过stub和skeleton访问engine SPI,engine SPI最后再调用具体算法 我理解:这个stub/skeleton就是我们需要编写的东西,是吗?   4)codec engine 的工作原理     a,应用程序调用engine_open():加载DSP可执行文件、初始化DSP server,在DSP侧创建RMS(remote management server,用于管理和维护instances(DSP/BIOS系统中的任务) )     b,应用程序调用VISA create API          这个API调用相应的VISA create 函数          这个函数在应用程序这侧(可以认为是arm侧吗?)的engine SPI的codec table查到,哦,远端DSP侧有一个这种算法哦~         于是这个函数再回到DSP侧的engine SPI的codec table查看,果然有一个这种算法         于是在RMS中建立这种算法的instance,并返回handle,便于以后的process等操作         ps:中间那两个在engine SPI查询的过程在3)中也讲到了。API是通过engine SPI 才能调用具体的算法的。     5,dsp server(codec server)是什么 1)先看下xDC(eXpress DSP Component) 它根据一套build指令build可执行文件 2)我理解的是: dsp server自己的源文件(main.c,.tcf,.cmd)+一个package(包含了codec engine用到的一些东西) ——>通过xDC的build——>生成了DSP的可执行文件package xDC的主要作用:系统级管理,为那些模块分配DSP资源。这些资源包括cpu cyclesmemoryDMA。 xDC的强大之处:不管前面给得是什么乱七八糟得,我都能把它们组合起来,生成一个dsp可执行的package。 xDC的工作原理:通过Framework Component来分配系统资源                              FC又包括了DSK2和DMAN3                              a,DSK2负责管理系统中所有xDAIS算法的memory(包括算法只要存在就会有的永久性memory和与别的算法共享的scratch memory)                              b,DMAN3负责管理DMA通道号。。。(我只知道这个)