浅学DSP原理及应用

news/2024/5/18 23:18:40 标签: dsp, TMS320C6x, 嵌入式, 硬件

DSP的特点

  1. 存储器采用哈佛结构
  2. 流水线操作
  3. 独立的硬件乘法累加单元
  4. 独立的DMA总线和控制器
  5. 独立的地址发生器和位移器
  6. 零开销循环
  7. 特殊的DSP指令
  8. 丰富的硬件配置

DSP的分类

分 类 标 准类 型特性
基础特性静态DSP在一定始终频率范围内的任何频率上都能正常工作,除计算速度外,没有性能下降
基础特性一致性DSP对于两种或两种以上的DSO芯片,其指令集和相应机器代码及引脚结构相互兼容
用途通用型DSP可用指令编程的DSP芯片,通过编程可实现复杂的数字信号处理算法,具有较强的处理能力
用途专用型DSP为特定DSP运算而设计,针对某一算法,由内部硬件电路实现,适用于数字滤波、FFT和卷积等特色运算;主要用于对信号处理速度要求较高的特殊场合
数据格式定点DSP以定点数据格式工作,大多数定点DSP芯片采用16位定点运算
数据格式浮点DSP以浮点数据格式工作,浮点格式包括自定义浮点格式和IEEE标准浮点格式

DSP芯片的选择

  1. 运算速度
  2. 运算精度
  3. 功耗
  4. 价格
  5. 硬件资源
  6. 开发工具

DSP系统的构成

在这里插入图片描述

DSP系统的特点

  1. 接口方便,易于模块化设计和集成
  2. 可编程,易于重复使用
  3. 快速稳定,精度高

DSP系统的设计过程

  1. 根据需求确定DSP系统的性能指标
  2. 算法研究及模拟实现和功能验证
  3. 选择适合的DSP芯片和外围组件
  4. 软件设计及调试
  5. 硬件设计及调试
  6. 系统集成及测试

TMS320C6x_58">TMS320C6x简介

TMS320C6x_DSP8000MIPSTMS320C6x__DSP_59">TMS320C62x/C64x处理器为定点DSP,TMS320C67x处理器为浮点DSP。TMS320C62x、TMS320C64x及TMS320C67x间代码兼容.TMS320C6x DSP最高可达到8000MIPS(百万条指令每秒)的运算速度,TMS320C6x DSP包含程序存储器和多种大小不同的数据存储器,其中程序存储器被用作程序缓存

TMS320C64x DSP结构图
TMS320C64x结构 DSP结构框图
在这里插入图片描述TMS320C64x +DSP结构图
TMS320C64x+DSP结构框图

TMS320DM6437的基本结构

TMS320DM6437采用TMS320C64x+ DSP内核,32位定点处理器,工作频率可达700MHz,处理速度最高可达5600MIPS。
TMS320DM6437具有64个32位通用寄存器和8个独立计算功能单元,这些功能单元包括2个用于存储32位结果的乘法器和6个算术逻辑单元(ALU)。
TMS320DM6437的内核采用TI开发的第三代高性能支持超长指令字(VLIW)的VelociTI.2结构

在这里插入图片描述

TMS320DM6437集成了丰富的片内外设,包括以下4部分

  1. 系统外设
  2. 多种串口
  3. 连接器
  4. 外部存储器接口

CPU的组成

包括8个独立的计算功能单元、2个寄存器组和2条数据通路

在这里插入图片描述

软件开发环境及程序优化

在这里插入图片描述

CCS集成开发环境

TMS320 CCS由以下四部分组件构成:
① TMS320代码生成工具,如汇编器、链接器、C/C++编译器和建库工具等。
② CCS集成开发环境(Integrated Developing Environment,IDE),包括编辑器、工程管理工具和调试工具等。
③ DSP/BIOS(Basic Input and Output System)插件及应用程序接口API(Application Program Interface)。
④ RTDX(Real Time Data Exchange)实时数据交换插件、主机(Host)接口及相应的API。

面向DSP的C/C++语言程序设计流程

在这里插入图片描述

1)C语言代码编写测试
在实际的DSP应用中,直接用汇编代码编写,虽然优化效率很高,可是实现的难度却很大,所以一般先用C语言来实现,然后编译运行,利用C64x开发环境的profile、clock工具测试程序运行时间,若不能满足要求,则进行第二步。
2)C语言级的优化
选择C64x开发环境提供的优化方式,以及充分运用其他技巧优化C代码,若还不能满足效率要求,则进行第三步。
3) 汇编级的优化
将上一阶段C程序中优化效率较低的部分提出来,用线性汇编语言编写,利用汇编优化器进行优化。

C语言源代码的优化

1)选用C编译器提供的优化选项
-o:使能软件流水和其他优化方法。
-pm:使能程序级优化。
-mt:使能编译器假设程序中没有数据存储混淆,可进一步优化代码。
-mg:使能分析(profile)优化代码。
-ms:确保不产生冗余循环,从而减小代码尺寸。
-mh:允许投机执行。
-mx:使能软件流水循环重试,基于循环次数对循环试用多个方案,以便选择最佳方案。
2)数据类型
C64xDSP内部数据总线和寄存器宽度是32位的。一般遵守的规则如下:
(1)在使用过程中,注意int和long两种类型的宽度不一致,long型数据为40位,会产生额外的指令和占用更多的功能单元。
(2)在使用loop counts时应尽量使其为int型或unsigned int型数据,以避免不必要的符号位扩展。
(3)尽量使用short类型进行乘法运算,因为这种数据类型适应C6000中的16位乘法器。如进行一次short* short运算只需1个时钟周期, 而进行一次int* int运算则需5个时钟周期。
(4)循环计数器应使用int或无符号int类型,不用short。
(5)short型数据的int处理,C64xDSP具有双16bit扩充功能,芯片能在一个周期内完成双16bit的乘法、加减法、比较和移位等操作。在设计时,当对连续的short型数据流操作时,应该转化成对int型数据流的操作,这样一次可以把两个16位的数据读入一个32位的寄存器,然后用内部函数来对它们处理(如_sub2等)。充分运用双16bit扩充功能,一次可以进行两个16bit数据的运算,速度将提升一倍。
3)减小存储器相关性
设计中常采用关键字const来指定目标,const表示一个变量或一个变量的存储单元保持不变。因此,在代码中加入关键字const,可以去除指令间的相关性。
4)使用内联函数(Intrinsics)
内联函数是C64x编译器提供的专门函数,它们与嵌入式的汇编指令一一对应,C编译器以内联函数的形式支持所有C语言代码不易表达的指令,其目的是快速优化C源程序。在C源程序中调用内联函数,与调用一般的函数相同,只不过内联函数名称前有下划线作特殊标识。当汇编指令功能不易采用C语言表达时,可采用内联函数表示。
5)尽量少进行函数调用
函数调用时,要将PC和一些寄存器压栈保存,函数返回时,则将这些寄存器出栈返回,增加了一些不必要的操作。所以一些小的函数,最好是用适当的内联函数代替直接写入主函数里,一些调用不多的函数,也可以直接写入主函数内,这样可减少不必要的操作,提高速度。但是这样往往会增加程序的长度,因此是一种利用空间换取时间的办法。
6)使用逻辑运算代替乘除运算
在DSP里,乘除运算指令的执行时间要远远超过逻辑移位指令,尤其是除法指令,在设计的时候,可以根据实际情况,进行一些调整,尽量用逻辑移位运算来代替乘除运算,以加快指令的运行时间。
7)软件流水线技术的使用
在编译代码时,可以选择编译器的-o2或-o3选项,编译器将根据程序尽可能地安排软件流水线。使用软件流水线还有下面几点限制:
  1. 循环结构不能包含代码调用,但可以包含内联函数;
  2. 循环计数器应该是递减的;
  3. 循环结构不能包含break,if语句不能嵌套,条件代码应当尽量简单;
  4. 循环结构中不能包含改变循环计数器的代码;
  5. 循环体代码不能过长,因为寄存器(32个)的数量有限,应该分解为多个循环;
  6. 在软件流水线的运用上,尽量使复杂的循环分解成简单的小循环,以避免寄存器的数量不够;对于过于简单的循环,应该适当展开,以增加代码数量,增加流水线中的迭代指令。

http://www.niftyadmin.cn/n/891885.html

相关文章

每日一遍,考研上岸

在网上找到了我心仪院校上岸学长当初的考研计划 今天开始要努力奋斗,争取明年上岸 先打好数学,英语和专业课的基础 政治就按这份计划来 希望大家考研上岸 政治 选择题: 暑假78月份买肖秀荣精讲精练肖秀荣1000题开始刷,1000…

go build

文章目录命令featuresbuild flags-a-n-p n-race-msan-v-work-x-asmflags [pattern]arg list-buildmode mode-compiler name-gccgoflags [pattern]arg list-gcflags [pattern]arg list-installsuffix suffix-ldflags [pattern]arg list-linkshared-mod mode-pkgdir dir-tags tag…

DSP期末复习核心考点

1、DSP 的狭义理解为数字信号处理器,广义理解为数字信号处理方法,TI 公司 的定点 DSP 产品主要有(TMS320C2000)系列、(TMS320C5000)系列和 (TMS320C6000)系列。 2、DSP 芯片的开发工…

go clean

Usage: go clean [clean flags] [build flags] [packages] 删除某一个package的cache,一般来说我们不需要做这个是,go编译会自动分析依赖。但是当某一个依赖彼岸花了很多次的时候,我们可以用这个来清理依赖,eg: go c…

软件设计模式---从0到1

文章目录设计模式概述设计模式的定义:设计模式的分类:常见的设计模式:面向对象设计原则创建型设计模式(重点)简单工厂模式工厂方法模式抽象工厂模式单例模式结构性型设计模式(重点)适配器模式桥…

go get

Usage: go get [-d] [-t] [-u] [-v] [-insecure] [build flags] [packages] Note that package patterns are allowed and are expanded after resolving the module versions. For example, ‘go get golang.org/x/perf/cmd/…’ adds the latest golang.org/x/perf and the…

循环冗余校验码(Cyclic Redundancy Check, CRC码 )

先在要发送的帧后面附加一个数,生成一个新帧发送给接收端。当然,这个附加的数不是随意的,它要使所生成的新帧能与发送端和接收端共同选定的某个特定数整除(模2除法)。 到达接收端后,再把接收到的新帧除以这个选定的除数。因为在发…

go list

Usage: go list [-f format] [-json] [-m] [list flags] [build flags] [packages] go list其实是列出某一个pkg的详细信息,eg:go list -json github.com/stretchr/testify,最常使用的就是go list ./...列出当前目录的所有package flags …