TI DaVinci(达芬奇)入门

(转载来自 德州仪器半导体技术(上海)有限公司 通用DSP 技术应用工程师 崔晶

    德州仪器(TI)的第一颗达芬奇(DaVinci)芯片(处理器)DM6446已经问世快三年了。继DM644x之后,TI又陆续推出了DM643x,DM35x,DM6467,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 达芬奇软件结构框图

2.Codec Engine入门第一步,从Codec Engine发布说明文档(release notes)开始
 


图2 Codec Engine 1.20 Release Notes截图

3.Codec Engine入门第二步,了解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 DM6446 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算法工程师需要了解这个软件模块。
http://tiexpressdsp.com/wiki/index.php?title=Framework_Components_FAQ

2) xDAIS 是一个标准,它定义了TI DSP算法接口的标准。这样大大提高了DSP算法软件的通用性。DSP算法工程师要写出能被ARM通过Codec Engine调用的算法,必须保证自己的算法接口符合这个标准。因此,DSP算法工程师也必须了解这个软件模块。

http://tiexpressdsp.com/wiki/index.php?title=Category:XDAIS

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版本以后的用户就无需此操作。

http://tiexpressdsp.com/wiki/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=Category:DSPBIOS

4.Codec Engine入门第三步,根据自己的角色参考相关的文档和例子进行开发
 开发ARM+DSP平台需要三类工程师:ARM应用程序工程师、DSP算法工程师和DSP系统工程师。而开发ARM+协处理器平台只需要ARM应用程序工程师。下面就让我们针对这三类工程师做分别介绍。如果您使用的是TI或TI第三方的编解码算法,就不需要关注DSP算法工程师的部分。如果使用ARM+协处理器平台,就只需关心ARM应用工程师的部分。

4.1 DSP算法工程师应该如何着手?
这里我们不讨论如何开发DSP算法,只讨论DSP算法工程师怎样让自己的算法可以被ARM通过Codec Engine调用。(参考http://www.ti.com/litv/pdf/sprued6c,这个文档会讲到codec package及相关的.xs和.xdc文件,Codec Engine1.20及以上版本的用户可以先不细究这些内容,后面会介绍工具帮您自动生成这些文件。) 
1) 熟悉xDAIS和xDM标准。
xDM只是xDAIS的扩展,因此,需要先了解xDAIS。在xDAIS 软件包根目录下的发布说明文档里,可以很快找到关于xDAIS和xDM的文档链接。
http://focus.ti.com/lit/ug/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)。具体请参考:

http://tiexpressdsp.com/wiki/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的ACPY3模块实现QDMA的操作。另外,有些用户DSP侧的算法比较简单,在确保不和ARM侧EDMA资源冲突的前提下在算法里直接操作EDMA不使用DMAN3也是可以的。这样做的弊端是和其它算法做整合时会遇到资源使用冲突的问题。

4.2 DSP系统工程师应该如何着手?
通常DSP算法工程师都会把自己的符合xDM标准算法编成一个.lib文件(或 .a64P),供DSP系统工程师调用。DSP系统工程师最终build出一个DSP Server(也就是DSP的可执行程序.x64P,和CCS下编译生成的.out类似)。(参考http://focus.ti.com/lit/ug/sprued5b/sprued5b.pdf,这个文档会讲到.xdc和.bld等文件,Codec Engine1.20及以上版本的用户可以先不细究,后面介绍工具帮您自动生成这些文件。)

1) 如果现在有一个.lib文件(或 .a64P)(算法必须符合xDM标准),如何生成自己的DSP Server呢?下面URL有详细的关于RTSC Codec and Server Package Wizard工具介绍,教您如何把一个.lib文件封装成RTSC Codec 包和RTSC DSP Server包,并最终build出DSP的可执行程序.x64P。

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

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出.x64P的问题了。点击图2所示的Examples,就可以找到build Codec Engine例子的说明文档的链接。按照这个文档做一遍后,就可以对如何build Codec Server有一个清楚的了解。其中关键是修改user.bld和xdcpaths.mak文件,设置Codec Engine依赖的其它软件模块和工具的正确路径。

4) 如果自己的硬件DDR2大小和例子中的256Mbytes不一致,需要修改DSP的.tcf文件和其他配置。还有些工程师不清楚如何分配memory及如何决定具体段,如:DDRALGHEAP和DDR的大小,以及如何配置./loadmodules里的参数都请参考:http://wiki.davincidsp.com/index.php?title=Changing_the_DVEVM_memory_map。

4.3 ARM应用程序工程师应该如何着手?
ARM应用工程师需要调用Codec Engine的VISA API,最终编出ARM侧的可执行程序,因此,必须根据自己的应用学习相关的VISA API、如何创建应用侧Codec Engine的package及配置文件。(参考http://focus.ti.com/lit/ug/sprue67d/sprue67d.pdf,这个文档也涉及到如何调试Codec Engine的内容)。

1)了解ARM应用程序调用Codec Engine的流程、VISA API和其他Codec Engine API。可以参考Codec Engine安装路径下examples/apps/video_copy的例子(较简单)或者DVSDK安装路径下demos里的encode/decode/encodedecode例子(较复杂)。
http://wiki.davincidsp.com/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,参考:
http://wiki.davincidsp.com/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)如果遇到问题可以先访问 http://wiki.davincidsp.com/index.php?title=Codec_Engine_FAQ。

2)有些工程师没有DSP开发经验,或者暂时没有仿真器通过JTAG调试DSP。可以参考下面网页的内容,先做一个“Hello World”的例程对ARM和DSP如何协同工作有个感性认识。

http://wiki.davincidsp.com/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的数据结构请参考:

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

4) Codec Engine DSP侧会涉及到Cache一致性的问题。请参考:
http://wiki.davincidsp.com/index.php?title=Cache_Management

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

A. 打开Codec Engine trace,通过打印信息看问题出在什么地方。比如engine_open失败,DSP侧不能创建codec 等等。

a) Codec Engine 2.0及以上版本,请参考: http://wiki.davincidsp.com/index.php?title=Easy_CE_Debugging_Feature_in_CE_2.0

b) Codec Engine 1.x版本,请参考: http://wiki.davincidsp.com/index.php?title=TraceUtil

B. ARM应用程序跑起来后,用仿真器连上CCS调试DSP侧程序,参考:

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

C. 用Soc Analyzer可以做系统调试之外,还可以统计具体函数运行(ARM和DSP侧)时间(benchmark)。请参考:http://tiexpressdsp.com/wiki/index.php?title=SoC_Analyzer

6) 因为Codec Engine是介于ARM 应用程序和编解码算法中间的软件模块,很多工程师非常想知道它的开销(overhead),请参考:
http://wiki.davincidsp.com/index.php?title=Codec_Engine_Overhead

7)如何在Linux环境下编DSP的汇编或线性汇编程序?在Codec Engine安装路径下/packages/config.bld文件里var C64P = xdc.useModule(‘ti.targets.C64P’);
之后添加: 
C64P.extensions[“.sa”] = {
suf: “.sa”, typ: “asm:-fl”
}

C64P.extensions[“.asm”] = {
suf: “.asm”, typ: “asm:-fa”

8)DSP侧如何统计具体函数运行时间?
TI DSPC64x+内核有一个64位的硬件定时器(Time Stamp Counter),它的频率和CPU频率一致。最简单的办法是使用TSC的低32位TSCL。注意在DM644x中,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的网页,http://wiki.davincidsp.com和http://tiexpressdsp.com/wiki找到最新的信息和资料。

 本文在TI网站上英版链接为http://processors.wiki.ti.com/index.php?title=Quickly_Getting_Started_on_TI_Codec_Engine)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/38390.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

davinci 达芬奇BI工具

Davinci 是一个 DVAAS(Data Visualization as a Service)平台解决方案,面向业务人员/数据工程师/数据分析师/数据科学家,致力于提供一站式数据可视化解决方案。既可作为公有云/私有云独立部署使用,也可作为可视化插件集…

ChatGPT3.0 text-davinci-003 表现诡异

最近想试用一下通过API调用ChatGPT,在测试 gpt-3.5-turbo 的时候遇到了“openai.error.InvalidRequestError: This is not a chat model and thus not supported in the v1/chat/completions endpoint. Did you mean to use v1/completions? ”的问题。 所以该尝试…

中国元宇宙科技有限公司+《星云虚境》+AI虚拟数字人+chatgpt

随着人工智能、虚拟现实等技术的不断发展,中国元宇宙科技有限公司计划推出一款名为《星云虚境》的虚拟数字人平台。该平台将采用AIchatgpt等技术,为用户提供更加真实、智能的虚拟人体交互体验,为未来的数字化生活带来新的可能性。 未来&…

辅助现实?aR?AR?进入元宇宙,这个概念得搞懂

1 什么是辅助现实? 辅助现实(aR,assisted Reality)这个词在最近的一些AR眼镜的新品发布会频繁出现。那这辅助现实又是什么,与增强现实之间有什么关系呢? 其实,辅助现实可以说是增强现实里面的一…

元宇宙系列之AI虚拟人:“人”潮汹涌 探路未来

尽管元宇宙尚处不断扩充定义的进程中,但市场对于虚拟人在其中扮演关键要素已达成一定共识。我们认为,从中短期视角看,虚拟人相关技术逐步落地,应用场景持续拓宽,或为元宇宙概念下技术、内容及产业融合升级的初步尝试&a…

ChatGPT和AI会重燃中国的虚拟宇宙吗?

随着像 Meta 这样的科技巨头关闭他们的元宇宙部门以支持人工智能 (AI) 的努力——尽管他们认为元宇宙仍将是其主要产品——观众们相信,以前备受赞誉的虚拟生态系统已经被 AI 淘金热从互联网宝座上推倒了。 人工智能的利润潜力在今年上半年吸…

元宇宙虚拟人迎来高峰期,哪个是你的最爱?

虚拟人从最初的不温不火,到现在步入“出生高峰期”,元宇宙可以说是功不可没。 此前,量子位发布了《虚拟数字人深度产业报告》,报告显示,到2030年我国虚拟数字人整体市场规模将达到2700亿元。其中,“身份型…

WebAR也是元宇宙的一种? #geenee.ar 快速上手制作 AR 应用

Mixlab AR & VR 是构建元宇宙应用的热点 “接口”。前期推文介绍了 Web 端的快捷高效的 VR 创作工具 Styly ,AR 创作也有类似的简易工具吗? 知识库 有社群成员推荐了一款 Web AR 工具 Geenee。该工具是一个无代码平台,即使是非技术创作者…

解密通往元宇宙的三大入口,VR先上AR紧跟,但脑机接口才是未来

来源: 智东西 编辑:智东西内参 VR、AR和脑机接口,谁是人类通往元宇宙的合适入口? VR/AR/脑机接口是集合了微显示、传感器、芯片和算法等多项技术在内的下一代人机交互平台。回顾整个人机交互发展历程,我们看到人机交互的指令输入形…

元宇宙,现实与虚拟交互的新一代互联网?

在家中,你可以到访埃及的五大遗迹或者中国的兵马俑,当然全球的著名景点可以玩个遍,和真实体验无异。 在一个可互操作的协作空间,建筑师、工程师和设计师在一虚拟世界上共同进行空间设计,随意进出虚拟与现实世界。 同样…

VR和AR只是入门,真正的元宇宙远不止于此

近来,在金融市场上,“元宇宙”的概念相当火爆,就像20多年前的互联网泡沫一般。当年,任何一个金融产品或公司,只要一打上“.com”的标记,立刻“鸡犬升天”。而金融市场永远是你方唱罢我登场——寻找一个新花…

Matthew Ball:为什么说AR/VR元宇宙是Meta和苹果的下一个战场?

什么是元宇宙?相信这两年有不少人曾提出这个问题。它是AR/VR?还是数字孪生?是已经普及的技术还是还不存在的概念?为了解答这一问题,投资人、分析师Matthew Ball(此前还曾担任亚马逊工作室的全球战略主管&am…

打开商场元宇宙新玩法:AR导航+AR互动营销

随着“元宇宙”概念大热,预示着互联网进化的未来形态初露端倪,也为实体商业升级提供了一条新思路,元宇宙(Meta-verse)是指:一个集体虚拟共享空间,由虚拟增强的物理现实和物理持久的虚拟空间融合…

元宇宙文旅ar技术方案及场景

元宇宙是虚拟世界与现实社会交互的重要平台,作为全新的产业,正以新理念、新业态、新模式与多行业发展深度结合,逐渐成为重组全球要素资源、重塑全球产业结构、改变全球产业发展的关键力量,被称为“万亿级虚拟蓝海”。 文旅作为元宇…

元宇宙火了!终于有人把虚拟现实(AR/VR/MR)讲明白了

导读:最近,元宇宙火了! “元宇宙”是美国科幻小说家尼奥斯蒂文森1992年在《雪崩》中提出的概念,书中设定现实世界中的人在网络世界中都有一个分身,这个由分身组成的世界就是“元宇宙”。如今,随着虚拟现实技…

chatgpt赋能python:用Python打造个人网站的SEO优化

用Python打造个人网站的SEO优化 简介 在互联网时代,拥有一个个人网站已经成为了一个时尚和必要的事情。网站不仅可以展示你的技能和个人风采,还可以提高你的知名度和影响力。但是,如何让人们发现你的网站,通过搜索引擎来访问你的…

chatgpt赋能python:Python抽签程序:简单又实用的应用

Python抽签程序:简单又实用的应用 抽签程序是一个常用的功能,尤其在游戏、抽奖等场合中。Python是一门功能强大的编程语言,在实现抽签程序方面也有着独特的优势。本文将介绍如何使用Python编写抽签程序,包括实现过程和使用方法。…

chatgpt赋能python:Python手机安装教程:让你随时随地学习编程

Python手机安装教程:让你随时随地学习编程 Python是一门广受欢迎的编程语言,可以用于Web开发、科学计算、数据分析、人工智能等多种领域。随着智能手机的普及,越来越多的人希望在手机上使用Python进行学习和开发。本文将介绍如何在手机上安装…

chatgpt赋能python:Python对接硬件:从入门到精通

Python对接硬件:从入门到精通 Python是一门极为强大的编程语言,它不只是用来进行数据分析和Web开发的,也可以用来对接各种硬件设备。这是因为Python具有简单易学,语法简洁,库众多的优点。 什么是Python对接硬件 Pyt…