分享

DSP算法案例开发手册分享!基于TI C6000 TMS320C6678

 创龙科技 2022-08-14 发布于广东

核心板简介

创龙科技SOM-TL6678F是一款基于TI KeyStone架构C6000系列TMS320C6678八核C66x定点/浮点DSP以及Xilinx Kintex-7 FPGA处理器设计的高端异构多核工业级核心板。核心板内部DSP与FPGA通过SRIO、EMIF16、I2C通信总线连接,并通过工业级高速B2B连接器引出千兆网口、PCIe、HyperLink、EMIF16、GTX等高速通信接口。核心板经过专业的PCB Layout和高低温测试验证,稳定可靠,可满足各种工业应用环境。

用户使用核心板进行二次开发时,仅需专注上层运用,降低了开发难度和时间成本,可快速进行产品方案评估与技术预研。

图 1 核心板正面图

目 录

前 言 3

1 dsplib_fft案例 4

2 dsplib_fir案例 9

3 dsplib_iir案例 14

4 dsplib_matrix案例 19

5 imglib_sobel案例 21

6 imglib_threshold案例 25

前 言

(裸机)算法案例基于多核软件开发包BIOS-MCSDK中的算法库dsplib_c66x_3_1_0_0、imglib_c66x_3_1_1_0以及mathlib_c66x_3_0_1_1进行开发。

算法案例位于产品资料“4-软件资料\Demo\DSP_Demo\Algorithm-demos\”路径下。案例目录说明如下表,其中bin目录存放程序可执行文件,project目录存放案例工程源文件。

本文档案例程序默认使用DSP端主频为1GHz、DSP端DDR3容量为1GByte的核心板,通过TL-XDS200仿真器加载运行进行操作效果演示。请通过Micro USB线将调试串口与PC机进行连接,打开串口调试终端SecureCRT并正确进行串口连接设置。

表 1

目录

文件/目录

说明

bin

xxx.out

程序可执行文件

project

xxx.c

程序源码文件

C66x.cmd

内存配置链接文件

driver

驱动文件存放目录

system

平台文件存放目录

.ccsproject/.cproject/.project

CCS工程文件

DSPLIB函数开发参考资料:BIOS-MCSDK多核软件开发包安装目录“dsplib_c66x_3_1_0_0\packages\ti\dsplib\docs\doxygen\DSPLIB.chm”。

IMGLIB函数开发参考资料:BIOS-MCSDK多核软件开发包安装目录“imglib_c66x_3_1_1_0\docs\IMGLIB_Users_Manual.chm”。

MATHLIB函数开发参考资料:BIOS-MCSDK多核软件开发包安装目录“mathlib_c66x_3_0_1_1\docs”。

dsplib_fft案例

案例说明

案例功能:调用MATHLIB中的sinsp函数产生单精度测试信号,以及调用sinsp和cossp函数生成快速傅里叶变换(FFT)所需旋转因子。调用DSPLIB中的DSPF_sp_fftSPxSP函数对测试信号进行快速傅里叶变换(FFT),调用DSPF_sp_ifftSPxSP函数进行快速傅里叶逆变换(IFFT),采样点从8递增到4096,并统计运算时间。

案例测试

请运行程序,CCS的Console窗口将会打印FFT和IFFT运算时间。

以N = 4096为例,不使能Cache时FFT运算时间为254.646us,使能Cache时FFT运算时间为53.292us,效率提升约4.8倍。不使能Cache时IFFT运算时间为249.655us,使能Cache时IFFT运算时间为57.027us,效率提升约4.4倍。

图 1

表 2

参数

解析

Cache Disabled/Cache Enable

不使能/使能L1P与L1D Cache

DSPF_sp_fftSPxSP/DSPF_sp_ifftSPxSP

单精度FFT/IFFT

N

样本长度

radix

运算基数

(当N为4的幂时,radix为4,否则radix为2)

cycles

运算周期

time

运算时间

关键代码

在main函数中申请数据缓冲区,fft_input数组用于存放FFT的信号输入数据,fft_output数组用于存放经FFT处理的信号数据,ifft_output数组用于存放经IFFT处理的信号数据,fft_twiddle数组用于存放FFT旋转因子,ifft_twiddle数组用于存放IFFT旋转因子,signal_data数组用于存放自定义信号数据。

图 2

生成测试信号,并存放于复数数组中。其中实部数据为两个正弦波的叠加信号,一个正弦波的振幅为5、频率为50Hz,另一个正弦波的振幅为15、频率为150Hz,虚部数据均为0。

图 3

不使能L1 Cache,对复数数据进行FFT以及IFFT,并统计运算时间。

图 4

图 5

使能L1 Cache,对复数数据进行FFT以及IFFT,并统计运算时间。

图 6

为测试不同状态下的功耗,测试完成后循环进行FFT以及IFFT,使DSP核心处于高负载状态。循环过程中,不检测数据的正确性。

图 7

dsplib_fir案例

案例说明

案例功能:调用C标准库中的sin函数产生测试信号,调用DSPLIB中的DSPF_sp_fir_r2函数对测试信号进行有限长单位冲激响应滤波(FIR),输出采样点为1024,并统计运算时间。

案例测试

请运行程序,CCS的Console窗口将会打印FIR运算时间。

图 8

点击CCS的“Tools -> Graph -> Single Time”,在弹出的界面中按照下图内容进行配置。其中Start Address选项填写fir_input数组,此数组用于存放FIR的信号输入数据。点击OK,即可查看测试信号的原始波形。

图 9

图 10

表 3

参数

解析

Acquisition Buffer Size

数据读取长度

Dsp Data Type

数据读取类型

Start Address

数据读取起始地址

Display Data Size

数据显示长度

图 11

点击CCS的“Tools -> Graph -> Single Time”,在弹出的界面中按照下图内容进行配置。其中Start Address选项填写fir_output数组,此数组用于存放经FIR处理的信号数据。点击OK,即可查看经FIR处理的信号波形。

图 12

图 13

图 14

关键代码

图 15

dsplib_iir案例

案例说明

案例功能:调用C标准库中的sin函数产生测试信号,调用DSPLIB中的DSPF_sp_iir函数对测试信号进行无限长单位冲激响应滤波(IIR),输出采样点为1024,并统计运算时间。

案例测试

请运行程序,CCS的Console窗口将会打印IIR运算时间。

图 16

点击CCS的“Tools -> Graph -> Single Time”,在弹出的界面中按照下图内容进行配置。其中Start Address选项填写iir_input数组,此数组用于存放IIR的信号输入数据。点击OK,即可查看测试信号的原始波形。

图 17

图 18

图 19

点击CCS的“Tools -> Graph -> Single Time”,在弹出的界面中按照下图内容进行配置。其中Start Address选项填写iir_output数组,此数组用于存放经IIR处理的信号数据。点击OK,即可查看经IIR处理的信号波形。

图 20

图 21

图 22

关键代码

图 23

dsplib_matrix案例

案例说明

案例功能:调用DSPLIB中的DSPF_sp_mat_mul函数,将矩阵A与矩阵B相乘,并将结果储存在矩阵C中。

案例说明

请运行程序,CCS的Console窗口将会打印运算结果。

图 24

图 25

关键代码

通过SIZE指定矩阵大小。

图 26

初始化矩阵A和矩阵B。

图 27

调用DSPF_sp_mat_mul函数进行矩阵相乘运算。

图 28

imglib_sobel案例

案例说明

案例功能:通过fread函数读取BMP灰度图像,并调用IMGLIB中的IMG_sobel_3x3_8函数对图像进行Sobel(边缘检测)算法处理,再通过fwrite函数将经处理得到的BMP图像进行保存。

案例测试

将案例image目录下的BMP灰度图像文件gray.bmp拷贝至程序可执行文件相同目录下。

请运行程序,CCS的Console窗口将会在1~2min内打印如下信息,同时在程序可执行文件相同目录下生成经Sobel(边缘检测)算法处理得到的图像文件sobel.bmp。

本案例测试耗时1~2min,主要因为系统编程如fread,fwrite函数运行占用时间较长。

图 29

图 30

关键代码

通过fopen、fseek和fread等函数获取图像大小,并读取图像文件。

图 31

根据图像文件头信息申请内存空间。

图 32

读取图像位图信息,并调用IMGLIB中的IMG_sobel_3x3_8函数对图像进行Sobel(边缘检测)算法处理,再通过fwrite函数将经处理得到的BMP图像进行保存。

图 33

imglib_threshold案例

案例说明

案例功能:通过bmp_read_header函数读取BMP灰度图像,并调用IMGLIB中的IMG_thr_le2max_8和IMG_thr_le2min_8函数对图像进行二值化算法处理,再通过fwrite函数将经处理得到的BMP图像进行保存。

案例测试

将案例image目录下的BMP灰度图像文件gray.bmp拷贝至程序可执行文件相同目录下。

请运行程序,CCS的Console窗口将会在1~2min内打印如下信息,同时在程序可执行文件相同目录下生成经二值化算法处理得到的图像文件threshold.bmp。

本案例测试耗时1~2min,主要因为系统编程如fread,fwrite函数运行占用时间较长。

图 34

图 35

关键代码

通过fopen、fseek和fread等函数获取图像大小,并读取图像文件。

图 36

根据图像文件头信息申请内存空间。

图 37

读取图像位图信息,并调用IMGLIB中的IMG_thr_le2max_8和IMG_thr_le2min_8函数对图像进行二值化算法处理,再通过fwrite函数将经处理得到的BMP图像进行保存。

图 38

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多