2020-09-17
(多核DSP快速入门)4.编译测试多核DSP实例Vlfft
转载请注册来源http://blog.csdn.net/tostq
系列教程目录:http://blog.csdn.net/tostq/article/details/51245979
点击更多:https://www.zhihu.com/people/san-hao-bai-du-ren-79
Vlfft是由TI官网提供的一个大尺寸快速傅里叶变换的多核DSP实例,其下载地址如下:
这个实例是许多同学多核DSP的入门实例,实例内也提供了简单的安装编译教程,不过并没有讲得很清楚,在编译的过程中还是会出现很多问题,本节主要提供一个详细的Vlfft安装编译步骤,但是由于这个实例涉及了较多关于多核通信的内容,所以这里并不详细解释代码原理,如果后面有时间的话,以后再具体分析这个实例。
一、安装MCSDK和STMlib
这MCSDK组件是Vlfft必须的,不过STMlib却是不必须的。
(1)MCSDK的安装
MCSDK ( Multicore Software Development Kit )是一个多核的软件开发组件,它主要是通过同BIOS协同开发,里面提供了比如PDK等工具,与CCS5.2兼容的MCSDK应该是2.0版本,而我使用的是2.1版本,会出现一个警告,但也是可以运行的。
MCSDK的下载地址: http://www.ti.com/tool/bioslinuxmcsdk ,这里我选择的是最后一个。
下载MCSDK后,直接点击安装,安装目录同CCS在同一文件夹下,如D:/ti,在安装组件上,可以全部选择啦。
完成安装,重新启动CCS,查看相关组件是否安装到CCS中去(一般都自动导入了),如果不是,请手动导入。
关于SYS/BIOS的官方安装方法: http://processors.wiki.ti.com/index.php/BIOS_MCSDK_2.0_Getting_Started_Guide
(2)STMlib安装
STMlib(System Trace)是一个系统追踪组件,Vlfft这个工程支持2种配置,一种是纯VLFFT运算工程(默认模块,也可以不安装STM),还有一种是集成了STM 模块的VLFFT工程,即在Build option中的build variables中定义了STM_LIBRARY_ROOT,如果未安装STM lib或者STM的路径不对,则可能编译报错。
STMLib 下载地址: https://gforge.ti.com/gf/project/ctoolslib/frs/
STMLib安装只需要将安装解压跟CCS放到同一个文件夹就可以了(如D:/ti)
二、Vlfft的配置
(1)将Vlfft项目的整体文件夹放到MCSDK的demo文件夹下:如\ mcsdk_2_01_02_06\demos
(2)CCS中导入项目
在Project Explorer中右击选择Import...,选择导入一个已存在的CCS项目
项目位置中输入Vlfft文件夹所在地址,此时在Vlfft文件夹下,发现了两个项目文件(6678版本和6670版本)这里选择6678版本就可以了。
如果是选择6670版本,还需要打开vlfftconfig.h(vlfft\vlfftInc文件夹下),把常量EIGHT_CORE_DEVICE设为0,常量FOUR_CORE_DEVICE设为1,(默认是6678,与个这个设置刚好相反)
TIPs:
a).关于FFT的大小设置,将vlfftconfig.h中的如下宏中的一个设为1,其他为0
b). DSP内核的数目设置,选择1,2,4,8个设置
(3)BIOS文件的配置
vlfft_evmc6678l.cfg文件是BIOS文件的配置文件,下一节会具体解释如何使用BIOS,这里直接双击点开,出现如下:
BIOS的设置提供了界面和源代码编辑两种选择,这里我们点击Source,选择源代码编辑
如果是Debug模型,需要将.cfg源代码中的92~96行的代码注释,而Release模式,则不作改变。
此时点击小锤子进行Debug模式编译,出现如下错误,这里的警告主要是MCSDK版本不配,关系不大。
错误主要是 placement fails for object
这里提示.const所在段L2SRAM太小,内存段分配太小,需要打开链接命令文件.cmd(在Debug/configPkg/Linker.cmd)查看:
这里的L2SRAM只有156kb,实在太小,于是我们可以增加其大小到4M左右,但是我们不能直接到.cmd文件上修改,因为这个文件是由BIOS配置文件.cfg自动生成的,所以即使我们在.cmd文件中修改了,最后还是会出现原来的错误。
(3)在BIOS文件中修改内存设置
SYS/BIOS是DSP的一个实时操作系统,其给DSP提供许多API函数和操作组件,CSS提供了界面式的配置方法(通过System Overview)可以打开,这里的Task、Swi、Hwi、Memory等都是BIOS的相关组件,这里绿色小勾表明了当前组件已经被安装到了BIOS中了,现在我们需要重新分配内存,所以我们点开Memory组件,选择Program模式
在Program中选择View,找到cpu中的MemoryMap中修改L2SRAM的大小和L2SRAM_1的起始地址,这里需要注意的是虽然错误只是提示L2SRAM的太小,但由于L2SRAM和L2SRAM_1相邻,所以如果修改L2SRAM的大小,就必然也要修改L2SRAM_1的起始地址。
还有一种更为便捷的方法是直接在.cfg的源文件(Source)上修改,这里在文件末尾添加如下:
var execontextInstance0 = xdc.lookup('xdc.platform.ExeContext.Instance#0');
execontextInstance0.memoryMap["L2SRAM"].len = 4194304;
execontextInstance0.memoryMap["L2SRAM_1"].base = 12582912;
此时再次点击编译,完成编译
三、Vlfft的调试结果
(1)导入目标配置文件.ccxml,选择C6678 Device Functional Simulator, Little Endian的目标配置文件
(2)将所有的(8个)核Group,点击运行,获得结果:
四、集成了STM 模块的VLFFT工程
前面我们安装了STMLib,这一节介绍如何使用STMLib
(1)在Build option中的build variables中定义了STM_LIBRARY_ROOT
(2)在Linked Resources中修正STM_LIBRARY_ROOT的地址
做完上面两件事后,我们点击项目文件中的STMhelper.c,发现现在是可以打开的,说明STMlib已经成功导入了
Vlfft代码下载