Dsplink的编译
- 格式:doc
- 大小:242.00 KB
- 文档页数:10
DSP常见问题解答如何选择外部时钟?DSP的内部指令周期较高,外部晶振的主频不够,因此DSP大多数片内均有PLL。
但每个系列不尽相同。
1)TMS320C2000系列:TMS320C20x:PLL可以÷2,×1,×2和×4,因此外部时钟可以为5MHz-40MHz。
TMS320F240:PLL可以÷2,×1,×1.5,×2,×2.5,×3,×4,×4.5,×5和×9,因此外部时钟可以为2.22MHz-40MHz。
TMS320F241/C242/F243:PLL可以×4,因此外部时钟为5MHz。
TMS320LF24xx:PLL可以由RC调节,因此外部时钟为4MHz-20MHz。
TMS320LF24xxA:PLL可以由RC调节,因此外部时钟为4MHz-20MHz。
2)TMS320C3x系列:TMS320C3x:没有PLL,因此外部主频为工作频率的2倍。
TMS320VC33:PLL可以÷2,×1,×5,因此外部主频可以为12MHz -100MHz。
3)TMS320C5000系列:TMS320VC54xx:PLL可以÷4,÷2,×1-32,因此外部主频可以为0.625MHz-50MHz。
TMS320VC55xx:PLL可以÷4,÷2,×1-32,因此外部主频可以为6.25MHz-300MHz。
4)TMS320C6000系列:TMS320C62xx:PLL可以×1,×4,×6,×7,×8,×9,×10和×11,因此外部主频可以为11.8MHz-300MHz。
TMS320C67xx:PLL可以×1和×4,因此外部主频可以为12.5MHz-230MHz。
Davinci架构的由三个部分组成,即:codecs,servers,apps(算法,算法服务器,应用。
)codecs是不能单独成为程序的,它是以库的形式提供给,servers,apps。
servers是dsp可以运行的程序(包括操作系统)。
Apps是arm端linux操作系统下的一个应用程序。
下面分别讲解这三个部分的构成。
1.codecs进入jerry@jerry-laptop:~/dvsdk_3_00_01_42/codec_engine_2_24/examples/ti/sd o/ce/examples/codecs$ lsauddec1_copy imgdec1_copy package.xdc universal_copy videnc1_copy auddec1_ires imgdec_copy scale vidanalytics_copy videnc_copyauddec_copy imgenc1_copy sphdec1_copy viddec1_copy vidtranscode_copy audenc1_copy imgenc_copy sphdec_copy viddec2_copyaudenc_copy makefile sphenc1_copy viddec2split_copyg711 package sphenc_copy viddec_copy我们可以看到已经有很多算法了。
我们看其中一个:jerry@jerry-laptop:~/dvsdk_3_00_01_42/codec_engine_2_24/examples/ti/sd o/ce/examples/codecs/viddec_copy$ lslib package.bld viddec_copy.c VIDDEC_COPY.xdcmakefile package.xdc viddec_copy_ti.h VIDDEC_COPY.xspackage package.xs viddec_copy_ti_priv.h可以看出,一个算法有1.makefile文件,我们编译算法执行make的时候就是使用的makefile.2.viddec_copy_ti_priv.h,viddec_copy_ti.h,viddec_copy_ti.h是算法的源代码。
关于DSP中的lib今天在群里讨论了关于lib,受益匪浅,类似的把东西总结一下,希望以后大家遇到这样的问题后,能很容易的解决。
在此也练一下笔法,从小就讨厌写东西,今天试一试,有不足之处还请大家见谅。
帮助留的第二个问题,我们好多学员都在群里讨论了,收获很多,我就把讨论的内容和论坛上以前别人发的一部分内容总结的写一下。
.lib文件是库文件,寄存器地址和对应的标示符定义都包含在这个库里面了,里面包括标准的C/C++运行支持库函数,浮点运算程序,系统启动程序_c_int00 等,这些库中也包括由汇编实现的子程序,可以在汇编中调用,比如除法子程序 FD$$DIV等。
从编程的角度讲,通常有静态库文件和动态库文件。
静态库文件就是.lib文件,动态库文件就是.dll文件。
内容一样,都是将函数封装在一起编译后供自己或他人调用。
好处在于编译后的库文件看不到源代码,可保密;同时不会因为不小心修改了函数而出问题,便于维护。
两种库的区别在于静态库被调用时直接加载到内存,而动态库再是在需要的时候加载到内存,不使用的时候再从内存释放。
对于dll与lib的解释,002+吻之龙<*****************> 给出了相信的解释(1)lib是编译时需要的,dll是运行时需要的。
如果要完成源代码的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2) 一般的动态库程序有lib文件和dll文件。
lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。
如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。
如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。
静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。
但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。
帮您快速入门TI 的Codec Engine德州仪器(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是连接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)的操作。
zynqmpsoc 通用编译方法全文共四篇示例,供读者参考第一篇示例:Zynq MPSoC 是赛灵思公司推出的一款功能强大的可编程芯片,它集成了ARM 处理器和FPGA,可在一个芯片上实现复杂的计算任务。
在开发基于Zynq MPSoC 的应用程序时,一个重要的步骤就是编译程序。
本文将介绍一种通用的编译方法,帮助开发人员更高效地进行程序编译。
一、选择合适的编译工具在Zynq MPSoC 的开发过程中,选择合适的编译工具是非常重要的。
常见的编译工具包括Vivado HLS、Vivado SDK、SDSoC 和Petalinux 等。
根据项目的具体要求,选择适合的编译工具能够提高效率和准确性。
Vivado HLS 是一个C、C++ 代码到IP 或RTL 代码的转换工具,能够将高级语言代码转换为硬件描述语言代码,通过Vivado 工具链进行综合和实现。
当需要在Zynq MPSoC 中实现特定的硬件加速器时,Vivado HLS 是一个非常有用的工具。
Vivado SDK 则是用于开发基于ARM 处理器的软件应用程序的工具。
通过Vivado SDK,开发人员可以方便地进行应用程序的编译、调试和性能优化。
SDSoC 是赛灵思推出的一款基于LLVM 的编译工具,能够将C、C++ 代码编译成FPGA 可加速的硬件逻辑。
SDSoC 还提供了多种优化选项,开发人员可以灵活地调整编译过程,以获得更好的性能。
Petalinux 是一个Linux 发行版,专门设计用于嵌入式系统。
Petalinux 的优势在于能够为Zynq MPSoC 提供一个轻量化的Linux 系统,方便开发人员进行应用程序的部署和调试。
二、创建工程在选择了合适的编译工具后,接下来就是创建工程。
在Vivado HLS 中,可以通过Vivado IDE 创建一个新的工程,导入需要转换的高级语言代码,并进行综合和实现。
在Vivado SDK 中,也可以通过Vivado IDE 创建一个新的软件工程,导入需要编译的源代码,并进行编译、调试和性能分析。
dsp原理与开发编程DSP(Digital Signal Processing)是数字信号处理的简称,它是利用数字技术对信号进行处理和分析的一种方法。
它主要应用于音频、图像、视频和通信等领域,能够对这些信号进行滤波、变换、编码、解码、压缩、增强、识别等操作。
DSP的基本原理是将模拟信号转换为数字信号,通过在数字域中进行计算和处理,再将数字信号转换为模拟信号。
这个过程主要包括信号采样、量化、编码、数字滤波、时域和频域分析等步骤。
在DSP的开发编程中,主要使用的编程语言是C/C++和MATLAB。
C/C++是一种通用的编程语言,适用于各种平台和嵌入式系统,它可以实现高效的算法和数据处理。
MATLAB 则是一种高级的数学软件,它提供了丰富的信号处理函数和工具箱,可以方便地进行信号处理和分析。
在DSP的开发编程中,常用的算法和技术包括滤波、快速傅里叶变换(FFT)、信号重构、自适应滤波、波束形成、多通道处理等。
开发人员可以根据具体的应用需求选择合适的算法和技术,并结合相应的编程语言进行实现和调试。
除了基本的信号处理算法和技术外,还可以使用硬件加速技术来提高DSP的性能。
常用的硬件加速技术包括使用FPGA (Field Programmable Gate Array)和ASIC(Application-Specific Integrated Circuit)等可编程逻辑器件,以及使用GPU (Graphics Processing Unit)等图形处理器。
总之,DSP原理与开发编程是一门涉及信号处理和算法实现的技术,可以应用于多个领域。
通过合理选择算法和技术,并结合相应的编程语言和硬件加速技术,可以实现高效、精确和可靠的数字信号处理。
一、绪言针对当前应用的复杂性,SOC芯片更好能能满足应用和媒体的需求,集成众多接口,用ARM做为应用处理器进行多样化的应用开发和用户界面和接口,利用DSP进行算法加速,特别是媒体的编解码算法加速,既能够保持算法的灵活性,又能提供强大的处理能力。
德州仪器(TI)继第一系列Davinci芯片DM644x之后,又陆续推出了DM643x,DM35x/36x,DM6467,OMAP35x,OMAPLx等一系列ARM+DSP或ARM+视频协处理器的多媒体处理器平台。
众多有很强DSP开发经验的工程师,以及应用处理开发经验的工程师都转到使用达芬奇或OMAP平台上开发视频监控、视频会议及便携式多媒体终端等产品。
基于ARM+DSP的芯片架构,如何进行开发实现做期望的嵌入式应用呢?传统的芯片,基本是一个处理器内核,或者是通用处理器如ARM,或者是DSP。
对于控制和用户接口,一般用通用处理器实现,算法处理或者媒体处理则依赖于DSP或者硬件芯片,很多系统都是双芯片的架构。
开发模式也比较单纯,比如ARM芯片,有ARM的的仿真工具,基于OS之上进行应用开发;DSP有DSP的开发工具,如TI的CCS以及510、560的仿真器,可以进行算法的移植、优化、跟踪、调试等。
这时,所需要的经验也比较单一。
基于ARM+DSP的双核架构,很多工程师不知道如何入手进行开发,提出了很多的疑问,比如对ARM工程师,很困惑的是如何使用DSP的资源?如何进行数据的交互?如何保持双核之间的同步?对DSP工程师,则问到如何进行ARM调试?如何启动DSP?如果进行媒体加速,如何操作外设获取或发送数据等二、芯片介绍基于不同的开发经验和基础,ARM工程师和DSP工程师会从完全不同的角度来看SOC的芯片,以至于拿到SOC的芯片根本不知道如何入手,这里就本人的经验与大家分享一下。
首先ARM+DSP的芯片,他是一个双核的,对应ARM和DSP分别是不同的指令集和编译器,可以把SOC的芯片看成是两个单芯片的合成,需要两套不同的开发工具,CCS3.3可以进行芯片级的调试和仿真,但是对应ARM和DSP需要选择不同的平台。
在DVEVM上,内存是256M,所以Codec中的例程都是按照256M内存进行配置的。
而在,其他一些具体应用中,目标板的内存不一定为256M。
所以,内存配置是Davinci开发板上一项重要的技术。
笔者公司的开发板是128M,根据相关的文档,重新配置,编译了程序。
在128M开发板上成功运行了Video_copy例程。
具体步骤如下:DDR内存是ARM和DSP共享的,从Ox80000000到0x90000000。
内存分为了如下几部分:1:Linux Partition:在ARM linux是按照4KB进行分页。
这部分内存由linux独自使用,由于有虚拟内存,所以开发者不能直接操作内存。
2:CMEM: Contiguous Memory Allocator。
用于ARM和DSP之间共享内存。
由于linux上内存采用了虚拟机制,分配的内存可能不是连续的;而DSP端内存没有虚拟内存机制一块内存在物理上是连续的。
因此,如果直接将一块内存作为参数传递给DSP端进行处理,就得不到正确的结果。
因此CMEM就是解决这个问题而出现的。
通过CMEM可以开辟连续的内存,用于ARM和DSP端共享内存。
3:The DDRALGHEAP and DDR Sections:用于CODEC动态开辟内存4: DDR(DDR2在codec engine1.2):用于存放DSP端代码端和静态数据。
5:The DSPLINKMEM Section:用于DSPlink,6:RESET_VECTOR:用于DSP RESET vector.必须128直接,起始地址必须是整数M.因此:总内存=DSP server内存+CMEM+linux内存。
后面,是笔者内存的具体配置:具体步骤:一DSPlink 1.3需要从新编译才能够运行。
编译步骤如下:1进入<DVEVM>/dsplink_1_30_*/packages/dsplink目录2打开config/all/CFG_Davinci.TXT 文件3按照图进行修改。
Dsplink 在windows编译环境的构建Perl环境的构建下载perl软件,软件地址:/200605/ActivePerl-5.8.7.813-MSWin32-x86-148120.zip安装软件到C盘。
生成的目录为C:\Perl。
过程如下:打开命令提示符,路径切换到ActiverPerl(应为全名,本处省略),输入install.batEnter top level directory for install? [C:\Perl] c:\PerlCreate shortcuts to the HTML documentation? [yes] noAdd the Perl\site\bin and Perl\bin directories to the PATH? [yes]Create Perl file extension association? [yes]Create IIS script mapping for Perl? [yes] noCreate IIS script mapping for Perl ISAPI? [yes] noProceed? [yes]安装完毕。
也可将ActivePerl-5.8.7.813-MSWin32-x86-148120目录下的perl文件夹复制到c盘下,将其命名为Perl即可。
本处采用的直接复制的方法。
添加环境变量:打开控制面板->系统->高级->环境变量->系统变量,添加PATH_Perl=C:\Perl\bin打开命令提示符窗口,输入:perl –help显示如下图,即配置完毕。
MinGW(Minimalist GNU for Windows)的安装1 安装到/projects/mingw/files/下载最新的MinGW,此处下载的版本为MinGW-5.1.6.exe。
运行MinGW-5.1.6.exe ,选择Candidate,一般会下载最新的包,选择如下几项:MinGW base tools 、g++ compiler 、MingGW Make 。
默认路径C:\MinGW,选择装在E:\MinGW(路径可以更改)。
根据:/index.php?title=MinGW_installation,需要下载如下必要的包:* /mingw/gcc-core-3.4.5-20060117-1.tar.gz* /mingw/gcc-g++-3.4.5-20060117-1.tar.gz* /mingw/mingw-runtime-3.9.tar.gz* /mingw/mingw-utils-0.3.tar.gz* /mingw/w32api-3.6.tar.gz* /mingw/binutils-2.17.50-20060824-1.tar.gz* /mingw/mingw32-make-3.81-1.tar.gz另外一个是调试器:* /mingw/gdb-6.3-2.exe安装完毕。
2 配置环境变量打开控制面板--〉系统--〉高级--〉环境变量->系统变量,添加MINGW_PATH=E:\MinGWC_INCLUDE_PATH=%MINGW_PA TH%\include;%MINGW_PA TH%\lib\gcc\mingw32\3.4.5\in cludeCPLUS_INCLUDE_PA TH=%MINGW_PA TH%\include\c++\3.4.5;%MINGW_PATH%\include\c ++\3.4.5\mingw32\bits;%MINGW_PA TH%\include\c++\3.4.5\backward;%C_INCLUDE_PA TH%LIBRARY_PATH=%MINGW_PATH%\lib;%MINGW_PATH%\lib\gcc\mingw32\3.4.5PATH=%MINGW_PA TH%\bin;%MINGW_PA TH%\libexec\gcc\mingw32\3.4.5 注意:上面的很多3.4.5这个是gcc的版本号,要以真实的文件夹为准。
3 测试打开一个CMD ,输入g++ --version显示以下信息,配置成功。
Dsplink 在LINUX下编译环境的构建Gpp端编译环境的搭建参见《SEED-DEC137软件使用指南.pdf》dsp端在windows环境下库生成和sample生成的操作步骤一、平台配置把dsplink解压到windows主机,如:F:\DSPLINK\dsplink_1_61_01\dsplink (以下操作都以该目录为例,用户可以自定义到其他目录,只需要按照下面提示修改一些配置参数即可)。
然后需要安装几个软件。
1 CCS3.32 Perl安装在C:\Perl3 MinGW安装在E:\Mingw把E:\Mingw\bin\mingw32-make.exe 复制一份改名为gmake.exe ,这样Mingw可以匹配gmake命令。
创建目录C:\ti-tools\bios, 将C:\CCStudio_v3.3\bios_5_31_02目录下的内容复制到C:\ti-tools\bios,将文件夹C:\CCStudio_v3.3\C6000 复制到C:\ti-tools。
设置环境变量:打开控制面板->系统->高级->环境变量。
在“系统变量”新建DSPMAKE_Makefile=MakefileDSPLINK=F:\dsplink_1_61_01\dsplink编辑PATH变量,添加C:\Perl\bin;E:\MinGW\bin。
每个路径之间用分号“;”隔开。
设置后保存重启。
配置脚本文件:用ultraedit打开dsplink_1_61_01\dsplink\etc\host\script\msdos\dsplinkenv.dat,修改23行:set DSPLINK=F:\dsplink_1_61_01\dsplink 。
路径与环境变量中设置的相同。
打开命令提示符,输入cd %DSPLINK%\etc\host\scripts\msdosdsplinkenv.bat显示如图:用ultraedit打开dsplinkcfg.pl,修改607行:将CFG_DSPCFG_ OMAPL1XXGEMSHMEM替换为CFG_DSPCFG_DM6446GEMSHMEM。
保存,退出。
cd %DSPLINK%\config\binF:\dsplink_1_61_01\dsplink\config\bin>perl dsplinkcfg.pl --platform=OMAPL1XX --nodsp=1 --dspcfg_0=DM6446GEMSHMEM --dspos_0=DSPBIOS5XX --gppos=MVL5G --comps=ponslrmc打印出如下信息:Welcome to DSP/BIOS(TM) Link Configuration Utility------------------------------------------------------!!DSPLINK will be configured for Build OS: WINDOWS!!!!DSPLINK Directory : F:\dsplink_1_61_01\dsplink!!=========================================================Chosen configuration is as follows:Chosen platform:Identifier: OMAPL1XXDescription: OMAP-L1XX SoC - C64P DSP interfaced directly to ARM9This platform does not support multi DSP scenarioNo of DSPs: 1Chosen combination for DSP0:Identifier : DM6446GEMDSP Description : On-Chip DSP of DaVinci SoCPhysical Interface (PHY): DM6446GEMSHMEMPHY Description : Shared Memory Physical InterfaceChosen DSP OS for DSP0:Identifier: DSPBIOS5XXDescription: DSP/BIOS (TM) Version 5.XX****************** ADVICE !!! ***************************Binaries for DSP can be generated at preferred locationFor example: --dsp0_temp=/home/dsplink/dsp<#>/binChosen GPP OS for selected DSP(s):Identifier: MVL5GDescription: Montavista Pro 5.0 Linux + gLibc Filesystem****************** ADVICE !!! ***************************Binaries for GPP can be generated at preferred locationFor example: --gpp_temp=/home/dsplink/gpp/binChosen Components for DSPLink:USE_PROC = 1USE_NOTIFY = 1USE_POOL = 1USE_MPCS = 1USE_MPLIST = 1USE_RINGIO = 1USE_MSGQ = 1USE_CHNL = 1****************** ADVICE !!! ***************************To enable trace use option: --trace=1Provided:Assuming trace disable and continuing...****************** ADVICE !!! ***************************To enable legacy support use option: --legacy=1Provided:Assuming legacy support disable and continuing...****************** ADVICE !!! ***************************To enable DSP TSK mode select: --DspTskMode=1Provided:Assuming DSP SWI mode enabled and continuing...=========================================================Configuration done successfully!!Generating CURRENTCFG.MK file...Generating multimake script...Generating CFG_system.c File...Generating GPP RTSC xdc file...Generating DSP RTSC xdc file...=========================================================Please edit the following files for toolchains, kernel sources, etc changes.GPP side distribution file: $DSPLINK\make\Linux\omapl1xx_mvlpro5.0.mkDSP side distribution file: $DSPLINK\make\DspBios\c64xxp_5.xx_windows.mk==========================================================Users consuming DSPLINK as XDC package, Need to do the following.cd into the $(DSPLINK)\dsp directory and run:$(XDC_INSTALL_DIR)\xdc clean$(XDC_INSTALL_DIR)\xdc .interfacescd into the $(DSPLINK)\gpp directory and run:$(XDC_INSTALL_DIR)\xdc clean$(XDC_INSTALL_DIR)\xdc .interfaces==========================================================F:\dsplink_1_61_01\dsplink\config\bin>至此,dsplink的环境配置成功。