基于FT-M6678的DSP工程。主要包括四个实验:
- 软硬件FFT对比
- 硬件FFT测试工程 FFT_HW_Test
- 软件FFT测试工程 FFT_SW_Test
- 双目标实时跟踪
- Kcf_Core0 ~ Kcf_Core3
- Kcf_Common
- 数据传输速率测试
- Srio2Pcie
- 算法验证与评估
- 尺度自适应(Scale Adaptive)的KCF算法 Kcf_SA
- 尺度固定(Scale Fixed)的KCF算法 Kcf_SF
- 两个工程分别包含纯软件实现和硬件加速的方案
- FT-M6678使用时,编译器,仿真器驱动都需要打补丁。
- 多核程序设计注意资源分配
- SRIO相关
- 如何使用?从CSrioManager公有继承,完成硬件初始化。
- 用SRIO的DMA发送NW事务包,数据长度以字节为单位,要求为256的整数倍;接收数据会产生事先注册的门铃中断。
- SRIO的控制寄存器地址映射,中断相关的配置
TI的软件的下载现在都要有账号才行,如果能在官网下载推荐直接在官网下载,不行的话就用网盘上的文件。不要用学校的邮箱注册TI账号,可以用QQ邮箱注册。
- 安装CCS软件,所有工程均已在CCS6.2.0上进行测试,更高版本的CCS可能也可以。CCS620下载地址:官网 百度网盘
- 编译器采用TI Compiler 7.4.4 下载地址:官网 百度网盘
- 编译器为了兼容FT-M6678,官网下载的需要另外打补丁。
- 网盘上的是已经添加了补丁的,因此不能用来编译用于TI 的DSP工程。
- 从网盘上下载的编译器需要放在“CCS安装根目录/ccsv6/tools/compiler/”路径下
- 如果使用CCS6.2.0 还需要添加license,将下载的license文件放在“CCS安装根目录/ccsv6/ccs_base/DebugServer/license/”路径下。下载地址:百度网盘
- RTSC软件包。这些基本都是可以从官网直接下载的,不需要TI账号。如果下载不了,这里也提供网盘下载地址:百度网盘
- 下载调试的配置文件,调试器的驱动补丁,调试用的GEL脚本都在FT-M6678随带的资料里有就不在这里提供了。
-
选择当前文件夹建立CCS workspace,确认前面的RTSC软件包都已经安装。
-
Project → Import CCS projects ... 导入CCS project
-
先同时选中c6x_emcv和csl_m6678两个工程,分别完成Debug和Release版本的编译
- c6x_emcv是基于OpenCV1.0移植到C6000 DSP上的OpenCV库
- csl_m6678是FT-M6678的一些外设库
-
当前两个库编译完成后,可以开始其余工程的编译,选中剩余的所有工程,依次完成Debug和Release版本的编译
-
完成编译后就可以用调试器在线仿真调试
-
程序的固化并没有做……
FFT_SW_Test和FFT_HW_Test两个工程是类似的,都通过main.c中的宏定义来修改实验内容,比如FFT_HW_Test中的 main.c 里的宏定义是这样的:
#define LOOP_TIMES (10) //loop times
#define FFT_GROUPS (100) // fft groups in every time
#define FFT_POW (8) // 4, 5, 6, 7, 8
FFT_SW_Test中 main.c 里的宏定义是这样的:
#define LOOP_TIMES (10)
#define FFT_GROUPS (1)
#define FFT_LEN (256)
LOOP_TIMES用来指定重复实验的次数;FFT_GROUPS指定连续进行FFT的次数,主要对单次运算和连续的100次运算进行了实验;FFT_LEN指定FFT的长度,覆盖16~256,都是2的整数次幂。程序计时采用的是TSC寄存器,计时单位是1 ns。
待计算的序列中的每个值都是1,计算结果中只有索引为0的位置有值并且等于序列长度,其余位置都是0。
待计算序列与结果都存放在DDR3 DRAM中,计算结果会与参考结果进行对比,保证计算的正确性。
这个实验的测试需要通过调试器向指定的存储区域提前存放数据。具体的测试图片不提供了,可以是任意的640×512的8bit灰度图,图像的尺寸是在 common.h 中定义的。其它尺寸的图应该也能用,但目前仅做了少量640×512的图像的测试。
在上图的路径下存放以数字命名的图片,可以利用 genDat.py 来生成用于加载到DSP里的TI格式的.dat数据文件。
genDat.py中的参数:
frame_num = 10 # max is 1069
startAddr = 0x80000000
len = (frame_num * 327680) >> 3
type = 0
common.h中的宏定义:
#define SRC_WIDTH (640)
#define SRC_HEIGHT (512)
#define FRAME_SIZE (327680)
#define FRAME_NUM (10)
genDat.py中的这些参数需要关注,frame_num是用于生成dat文件的图片帧数,需要和common.h中的宏定义一致,startAddr是main.cpp中的全局变量img的地址。len是生成的dat文件中数据的个数,type用来确定数据的格式。type为0表示每行是8字节,用16进制数表示(下面有注释说明),因此len是总字节数右移三位。
工程编译完成后,查看.map文件找到img变量的地址。将genDat.py中的startAddr设置成同样的值,然后运行得到images.dat文件。通过Memory Browser中的Load data的功能加载数据。把下面勾上,然后点finish就可以把数据加载进去了。
数据加载完成后可以看一下对应地址处的数据是否真的加载成功。
将四个核设成一个Group,一起运行,就可以看到类似下图中的结果。
Srio2Pcie工程,主要用于配合上位机软件Srio2PcieTest进行实验。
-
向FPGA加载bitstream,若已经固化就可以跳过这一步
-
上位机开机,只有FPGA中的bitstream加载完成后才能开机,否则上位机无法识别硬件。
-
加载DSP程序,最好在FPGA中的bitstream加载完成后再启动,然后等待上位机调用。
-
每完成一次测试就会显示等待下一次调用
Kcf_SA与Kcf_SF工程,需要配合上位机的kcf_dsp软件进行实验。