<meta name="keywords" content="庄家克星时时彩,arm,dsp,通讯" />

快速完成ARM和DSP的通讯和协同使命

宣布时间:2009年06月02日 14:06    宣布者:ARM
要害词: arm , dsp , 通讯
视频监控子系统是现代智能机械人设计中必弗成少的一个部门,它须要接纳DSP并凭证某种算法对摄取的图象阻拦处置赏罚赏罚和剖析,它也须要接纳ARM处置赏罚赏罚器对DSP阻拦协同治理和控制使命,现在开发工程师碰着的一个最年夜设计寻衅是:若何最高效力地完成ARM和DSP或协处置赏罚赏罚器的通讯和协同使命?本文将详细为您简介处置赏罚赏罚这一手艺寻衅的处置赏罚赏罚妄图和完成指南。

德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处置赏罚赏罚器)DM6?46曾经问世快三年了。继DM6?4x以后,TI又陆续推出了DM6?3x、DM35x、DM6?67、OMAP353x等一系列 ARM+DSP或ARM+视频协处置赏罚赏罚器的多媒体处置赏罚赏罚器平台。许多有很强DSP开发履历或ARM开发履历的工程师都转到达芬奇或通用 OMAP(OMAP353x)平台上开发视频监控、视频聚会聚会会议及便携式多媒体终端等产物。年夜家都面临着统一个效果,那就是若何完成ARM和DSP或协处置赏罚赏罚器的通讯和协同使命?TI的数字视频软件开发包(DVSDK)供应了Codec Engine这样一个软件模块来完成ARM和DSP或协处置赏罚赏罚器的协同使命。有许多工程师反映这个软件模块异常好用,节俭了许多开发时间,也有工程师以为 TI供应的质料太多,不知若何快速上手。本文将从一个第一次接触Codec Engine的工程师角度出发,归结TI供应的相关资源(文档,例程和群集资源),并简介相关开发调试措施帮您快速入门Codec Engine。

1.Codec Engine概述

如图1所示,Codec Engine是毗连ARM和DSP或协处置赏罚赏罚器的桥梁,是介于应用层(ARM侧的应用法式模范模范)和旌旗暗记处置赏罚赏罚层(DSP侧的算法)之间的软件模块。ARM应用法式模范模范挪用Codec Engine的VISA (Video, Image, Speech, Audio)API,如图1中VIDENC_process(a, b, c )。Codec Engine的stub (ARM侧)会把参数a, b, c和要挪用DSP侧process这个信息打包,经由历程新闻行列(message queue)转到达DSP。Codec Engine的skeleton(DSP侧)会解开这个参数包,把参数a, b, c转换成DSP侧对应的参数x, y, z(好比ARM侧转达的是虚拟地址,而DSP只能认物理地址),DSP侧的server(优先级较低,担负和ARM通讯的义务)会凭证process这一信息培植一个DSP侧的process(x, y, x)义务事实完成VIDENC_process(a, b, c)的操作。

1.JPG
图1 达芬奇软件结构框图

2. Codec Engine入门第一步

有些初学者以为Codec Engine文件包结构严重年夜,很难找到自己想找的文档或例子。着实在Codec Engine文件包的根眼前目今有一个宣布诠释文档,好比Codec Engine 1.20 根目录下的release_notes_codec_engine_1_20.html。这个文档就是你明确Codec Engine的泉源,外面有关于该版本Codec Engine的简介、相关文档质料的链接、新的功效、支持哪些芯片、已知的bug、修改了哪些bug及例子等等的详细诠释。详细如图2蓝色字体所示。浏览该文档后,初学者至少可以知道那里可以找到自己想要的文档或例子。举例来讲,假设想找相关的文档,点击 Documentation便可以看到这个Codec Engine文件包里的文档的链接。

2.JPG
图2 Codec Engine 1.20 Release Notes截图

3.Codec Engine入门第二步

点击Codec Engine的宣布诠释文档 (如图2)的Validation Info,我们可以知道Codec Engine 1.20须要和以下软件模块和工具合营应用:

* Framework Components 1.20.02
* xDAIS 5.21
* XDC Tools 2.93.01
* DSP/BIOS Link 1.40.05, configured for the DM6?46 EVM
* C6x Code Generation Tools version 6.0.8
* DSP/BIOS 5.31.05
* MontaVista Linux v4.0
* Red Hat Enterprise Linux 3 (SMP)

是以,我们须要在该Codec Engine装配的DVSDK文件包下面检查下面提到的软件模块和工具能否装配,版天性否准确。否则,能够会编译不外 Codec Engine的例子。那么,甚么是 Framework Components,甚么是xDAIS,甚么又是XDC Tools呢?你可以划分到它们的根目录下浏览它们各自的宣布诠释文档,做一个全体的明确。

这里我们质朴简介一下,可以赞助年夜家尽快找到和自己相关的重点及资源。

1)Framework Components是TI供应的一个软件模块,担负DSP侧的memory 和DMA资源治理。是以,DSP算法工程师须要明确这个软件模块。 /index.php?title=Framework_Components_FAQ

2)xDAIS 是一个尺度,它界说了TI DSP算法接口的尺度。这样年夜年夜前进了DSP算法软件的通用性。DSP算法工程师要写出能被ARM经由历程Codec Engine挪用的算法,必须保证自己的算法接口切合这个尺度。是以,DSP算法工程师也必须明确这个软件模块。

3)XDC Tools和gmake类似,是一个工具。XDC凭证用户界说的一套build指令,经由历程挪用用户指定的ARM 工具链(Tool Chain)和DSP编译器(C6x Code Generation Tools )build出ARM侧和DSP侧的可推行文件。可以先不用细究这个工具,只需经由历程编Codec Engine的例子,知道若何设置build指令便可以了。

4)DSP/BIOS Link是完成ARM和DSP之间通讯的底层软件,Codec Engine就是培植在这个底层软件之上。在修改系统内存分配(缺省是256MB的DDR2)时,DSP/BIOS Link 1.38版本的用户须要修改DSP/BIOS Link的装备文件,着重新build DSP/BIOS Link。而DSP/BIOS Link 1.40版本以后的用户就无需此操作。 /index.php?title=DSPLink_Overview

http://wiki.davincidsp.com/index.php?title=Changing_the_DVEVM_memory_map

5)C6x Code Generation Tools是Linux情形下C6000系列DSP的编译器。我们用CCS开发DSP时都是用的Windows情形下的DSP编译器。

6)DSP/BIOS 是TI 收费供应的DSP实时操作系统。和下面C6x Code Generation Tools一样,这里的DSP/BIOS也是Linux情形下的版本。DSP系统工程师须要明确这个操作系统。http: //tiexpressdsp.com/wiki/index.php?title=CategorySPBIOS

4. Codec Engine入门第三步

开发ARM+DSP平台须要三类工程师:ARM应用法式模范模范工程师、DSP算法工程师和DSP系统工程师。而开发ARM+协处置赏罚赏罚器平台只须要ARM应用法式模范模范工程师。下面就让我们针对这三类工程师做划分简介。假定您应用的是TI或TI第三方的编解码算法,就不须要关注DSP算法工程师的部门。假定应用ARM+协处置赏罚赏罚器平台,就只需眷注ARM应用工程师的部门。

4.1 DSP算法工程师应当若何着手?

这里我们不议论辩说若何开发DSP算法,只议论辩说DSP算法工程师怎样让自己的算法可以被ARM经由历程Codec Engine挪用。(参考,这个文档会讲到codec package及相关的.xs和.xdc文件,Codec Engine1.20及以上版本的用户可以先不细究这些内容,前面会简介工具帮您自动天生这些文件。)

1)熟悉xDAIS和xDM尺度。

xDM 只是xDAIS的扩年夜,是以,须要先明确xDAIS。在xDAIS 软件包根目录下的宣布诠释文档里,可以很快找到关于xDAIS和xDM的文档链接。 /spruec8b/spruec8b.pdf

在xDAIS装配蹊径下的examples/ti/xdais/dm/examples /g711有一个g711_sun_internal.c,这个算法不切合xDAIS尺度。在统一个蹊径下的g711dec_sun_ialg.c (decoder)和g711enc_sun_ialg.c (encoder)是封装成切合xDM尺度以后的编解码算法。可以经由历程这个例子学习和明确若何把自己算法封装成切合xDM尺度的算法。

xDAIS 6.10及其以后的版本,网罗了一个工具QualiTI,可以检查您的DSP算法能否知足xDAIS尺度(但不会检查能否知足xDM)。详细请参考: /index.php?title=QualiTI_XDAIS_Compliance_Tool

2)熟悉 Framework Components。

Framework Components主要网罗两个模块DSKT2和DMAN3,它们划分管负DSP侧的memory 和EDMA资源治理。DSP算法应用的memory必须是先向DSKT2提出请求并由DSKT2分配取得的。异常DSP算法应用的EDMA通道也是向 DMAN3请求并由DMAN3分配取得的。而关于QDMA的操作,是经由历程ACPY3这个模块完成的。这样的利益是很容易对DSP侧不合的算法做整合,不合的算法之间不用担忧资源(Memory和EDMA)的抵触效果。

在Framework Components 软件包根目录下的宣布诠释文档里,可以很快找到相关文档的链接。在Framework Components装配蹊径下packages\ti\sdo\fc\dman3\examples有一个Fast Copy的例子,可以帮您明确若何基于Framework Components的ACPY3模块完成QDMA的操作。

另外,有些用户 DSP侧的算法较量质朴,在确保平和ARM侧EDMA资源抵触的条件下在算法里直接操作EDMA不应用DMAN3也是可以的。这样做的弊病是和其它算法做整应时会遇到资源应用抵触的效果。

4.2 DSP系统工程师应当若何着手?

通常DSP算法工程师都邑把自己的切合xDM尺度算法编成一个.lib文件(或 .a6?P),供DSP系统工程师挪用。DSP系统工程师事实build出一个DSP Server(也就是DSP的可推行法式模范模范.x6?P,和CCS下编译天生的.out类似)。(参考 /sprued5b/sprued5b.pdf,这个文档会讲到.xdc和.bld等文件,Codec Engine1.20及以上版本的用户可以先不细究,前面简介工具帮您自动天生这些文件。)

1)假定现在有一个.lib文件(或 .a6?P)(算法必须切合xDM尺度),若何生资自己的DSP Server呢?下面URL有详细的关于RTSC Codec and Server Package Wizard工具简介,教您若何把一个.lib文件封装成RTSC Codec 包和RTSC DSP Server包,并事实build出DSP的可推行法式模范模范.x6?P。 /index.php?title=RTSC_Codec_And_Server_Package_Wizards

2)假定您应用的是Codec Engine 1.20之前的版本,请参考Codec Engine装配蹊径下examples/servers/video_copy这个例子。这时间间就须要弄清晰sprued6c.pdf和 sprued5b.pdf中提到的.xdc和.xs等文件的功效,也能够或许在video_copy中的相关文件的基础上修改手动培植出自己的RTSC Codec包和RTSC DSP server包。

3)培植好RTSC Codec 和RTSC DSP Server包以后,就是若何build出.x6?P的效果了。点击图2所示的Examples,便可以找到build Codec Engine例子的诠释文档的链接。凭证这个文档做一遍后,便可以对若何build Codec Server有一个清晰的明确。其中要害是修改user.bld和xdcpaths.mak文件,设置Codec Engine依附的其它软件模块和工具的准确蹊径。

4)假定自己的硬件DDR2年夜小和例子中的256Mbytes不不合,须要修改DSP的.tcf文件和其他装备。尚有些工程师不清晰若何分配memory及若何决议详细段,如:DDRALGHEAP和DDR的年夜小,和若何装备./loadmodules里的参数都请参考: /index.php?title=Changing_the_DVEVM_memory_map。

4.3 ARM应用法式模范模范工程师应当若何着手?

ARM应用工程师须要挪用Codec Engine的VISA API,事实编出ARM侧的可推行法式模范模范,是以,必须凭证自己的应用学习相关的VISA API、若何培植应用侧Codec Engine的package及装备文件。(参考,这个文档也触及到若何调试Codec Engine的内容)。

1)明确ARM应用法式模范模范挪用Codec Engine的流程、VISA API和其他Codec Engine API。可以参考Codec Engine装配蹊径下examples/apps/video_copy的例子(较质朴)或许DVSDK装配蹊径下demos里的encode /decode/encodedecode例子(较严重年夜)。 /index.php?title=Configuring_Codec_Engine_in_Arm_apps_with_createFromServer

2)明确ceapp.cfg文件。sprue67d.pdf有相关简介,可以先读懂examples/apps /video_copy/ceapp.cfg。

3)用4.2 3)中提到的措施学习若何build ARM侧的可推行法式模范模范。

4)怎样在多线程中挪用codec engine,参考: /index.php?title=Multiple_Threads_using_Codec_Engine_Handle

5)还可以参考以下三个文档明确更多TI demo的ARM应用法式模范模范的结构、线程调剂等详细的效果。
EncodeDecode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraah0a.htm, 8 KB) 27 Jun 2007 Abstract
Encode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraa96a.htm, 8 KB) 27 Jun 2007 Abstract
Decode Demo for the DaVinci DVEVM/DVSDK 1.2 (Rev. A) (spraag9a.htm, 8 KB) 27 Jun 2007 Abstract

5.应用中常碰着的效果

1)假定遇到效果可以先会见 /index.php?title=Codec_Engine_FAQ。

2)有些工程师没有DSP开发履历,或许暂时没有仿真器经由历程JTAG调试DSP。可以参考下面网页的内容,先做一个“Hello World”的例程对ARM和DSP若何协同使命有个理性熟悉。 /index.php?title=How_to_build_an_ARM/DSP_Hello_World_program_on_the_DaVinci_EVM

3)许多工程师都是参考video_copy的例子,在它的基础上把自己的算法加出来。由于有源代码,这样较量容易。但一定要凭证自己算法的须要修改ARM和DSP之间转达的buffer和参数,主要的是先保证ARM侧的应用法式模范模范可以把buffer和参数准确转到达DSP,DSP可以把处置赏罚赏罚以后的buffer准确的传到ARM侧的应用法式模范模范。把这个通路买通以后,就较量容易定位效果是出在ARM应用法式模范模范照样DSP侧的算法。另外,参考 video_copy例子时重视代码的注释,以便清晰哪一句代码可以删掉落落哪一句必须要修改或生涯。假定要扩年夜xDM的数据结构请参考: /index.php?title=Extending_data_structures_in_xDM。

4)Codec Engine DSP侧会触及到Cache不合性的效果。请参考: /index.php?title=Cache_Management

5)关于Codec Engine系统调试,有以下几种措施:

A.掀开Codec Engine trace,经由历程打印信息看效果出在甚么地方。好比engine_open掉落败,DSP侧不克不及培植codec 等等。
a)Codec Engine 2.0及以上版本,请参考:
b)Codec Engine 1.x版本,请参考:

B.ARM 应用法式模范模范跑起来后,用仿真器连上CCS调试DSP侧法式模范模范,参考: /index.php?title=Debugging_the_DSP_side_of_a_CE_application_on_DaVinci_using_CCS

C.用Soc Analyzer可以做系统调试以外,还可以统计详细函数运转(ARM和DSP侧)时间(benchmark)。请参考:

6)由于Codec Engine是介于ARM 应用法式模范模范和编解码算法中央的软件模块,许多工程师异常想知道它的开支(overhead),请参考:

7)怎样在Linux情形下编DSP的汇编或线性汇编法式模范模范?

在Codec Engine装配蹊径下/packages/config.bld文件里

var C6?P = xdc.useModule(‘ti.targets.C6?P’);

以后添加:

C6?P.extensions[“.sa”] = {
suf: “.sa”, typ: “asm:-fl”
}



C6?P.extensions[“.asm”] = {
suf: “.asm”, typ: “asm:-fa”
}

8)DSP侧若何统计详细函数运转时间?

TI DSPC6?x+内核有一个6?位的硬件准时器(Time Stamp Counter),它的频率和CPU频率不合。最质朴的措施是应用TSC的低32位TSCL。重视在DM6?4x中,TSCH用于ARM。

#include
void main (){

TSCL=0;

t1=TSCL;
my_code_to_benchmark();
t2=TSCL;
printf(“# cycles == %d\n”, (t2-t1));
}

6.结语

以上针对若何上手TI的Codec Engine做了质朴的归结,尚有许多详细细节的效果没有触及到。还请列位工程师从自己要用的软件模块宣布诠释文档泉源找到相关的文档并研究。经常会见 TI的网页,和找到最新的信息和质料。也异常迎接您在wiki上提问。

作者:德州仪器半导体手艺(上海)无限公司 通用DSP 手艺应用工程师 崔晶
迎接分享本文,转载请生涯出处:http://badahub.com/thread-2748-1-1.html     【打印本页】
您须要登录后才可以揭晓议论 登录 | 急速注册

厂商推荐

相关文章

相关视频演示

关于我们  -  服务条目  -  应用指南  -  站点舆图  -  友谊链接  -  联系我们
庄家克星时时彩-时时彩qq群-时时彩平台推荐 © 版权一切   | 京公网安备110108881021702
回顶部