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

来源:互联网 发布:徐佳莹 知乎 编辑:程序博客网 时间:2024/06/02 22:56
 

如何构建达芬奇的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 cycles\memory\DMA。

xDC的强大之处:不管前面给得是什么乱七八糟得,我都能把它们组合起来,生成一个dsp可执行的package。

xDC的工作原理:通过Framework Component来分配系统资源

                             FC又包括了DSK2和DMAN3

                             a,DSK2负责管理系统中所有xDAIS算法的memory(包括算法只要存在就会有的永久性memory和与别的算法共享的scratch memory)

                             b,DMAN3负责管理DMA通道号。。。(我只知道这个)

 

原创粉丝点击