快速实现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 达芬奇软件结构框图
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文件包里的文档的链接。
下载 (16.26 KB)
图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算法工程师需要了解这个软件模块。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类似
- 在采用FPGA设计DSP系统中仿真的重要性 (06-21)
- 基于 DSP Builder的FIR滤波器的设计与实现(06-21)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- FPGA的DSP性能揭秘(06-16)
- 用CPLD实现DSP与PLX9054之间的连接(07-23)
- DSP+FPGA结构在雷达模拟系统中的应用(01-02)