2022年6月14日
1. 部署开发环境
略。工作需要,TMS320C6678。 从今天开始学习DSP的知识。 后面会补充如何安装部署环境。
1.1 组件
1.1.1 SDK
1.1.2 组件
- XDCTools
- SYS/BIOS
- NDK
- UIA
- XDAIS
- Framework Components
1.1.3 算法库
1.2 集成开发环境
- Code Composer Studio (CCSv5,CCSv6)
1.3 其他
1.3.1 编译器
CGT 7.4.x ,CGT 8.1.x
1.3.2 编码/解码算法库
1.4 安装过程
1.4.1 下载CCS镜像
-官网,搜索CCS,下载相关版本。 https://www.ti.com.cn/tool/cn/download/CCSTUDIO
1.4.2 安装CCS镜像
- 如果安装过程中,提示VC++运行库安装失败,可以先安装VC++2008以及VC++2012运行库[32位],然后再安装CCSv5。
1.4.3 安装字体
- 推荐安装等宽字体,中英文宽度一致。
- 下载等宽字体,放到Windows的font文件夹中
- 在CCS软件中进行编码设置,字体设置。字体大小建议12号,脚本选择 中文GB2312。
1.4.4 修改主题
- 安装eclipse主题插件,Eclipse Marketplace,更新,搜索theme,
- 选择深色主题,保护眼睛。
1.4.5 菜单显示中文
1.5 安装软件组件
嵌入式软件产品下载地址:https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/index.html 更老的一些软件:https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/legacy.html
1.5.1 TI-RTOS
https://www.ti.com.cn/tool/zh-cn/TI-RTOS-MCU?keyMatch=&tisearch=search-everything&usecase=software#downloads https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/tirtos/index.html
1.5.2 SYS/BIOS
https://www.ti.com.cn/tool/cn/SYSBIOS?keyMatch=SYS%20BIOS%20DOWNLOAD https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/index.html https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/bios/sysbios/index.html
1.5.3 网络NDK
https://www.ti.com.cn/tool/zh-cn/NDKTCPIP?keyMatch=&tisearch=search-everything&usecase=software https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ndk/index.html
1.5.4 UIA
https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/uia/index.html
1.5.5 IPC
https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ipc/index.html
1.5.6 Multimedia Framework Products
-
Codec Engine 管理资源,框架 https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/ce/index.html -
Framework components 提供抽象的接口 https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/index.html -
XDAIS,XDM算法 https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/index.html
1.5.7 XDCtools 实时软件组件
https://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/index.html
1.5.8 CGT编译器
https://www.ti.com/tool/TI-CGT https://software-dl.ti.com/codegen/non-esd/downloads/download_archive.htm
1.6 软件库
1.6.1 MATHLIB
https://www.ti.com.cn/tool/cn/MATHLIB?keyMatch=MATHLIB#downloads
1.6.2 IQMath
- C64x+ IQMath 库 - 虚拟浮点引擎
https://www.ti.com.cn/tool/zh-cn/SPRC542?keyMatch=&tisearch=search-everything&usecase=partmatches
1.6.3 FastRTS
1.6.4 DSPLIB
1.6.5 IMGLIB
- 图像处理,DCT变换,离散余弦变换
- 图像分析,直方图
1.6.6 VLB
1.6.7 VICP
1.6.8 VoLIB
1.6.9 FaxLIB
1.6.10 AER/AEC
1.6.11 Codecs
1.7 软件开发包
- MCSDK多核软件开发套件(比较老的)
- MCSDK-VIDEODEMO
- PROCESSOR-SDK-C667X
2. 基础知识
B站学习视频:北航电子信息工程学院王俊《DSP体系结构》
2.1 指令周期
冯诺依曼结构。
-
1个指令周期 = 1个或者多个机器周期。 -
1个机器周期 = 6个状态周期 = 12个时钟周期。6节(s)12拍(p)。 -
1个状态周期 = 2个时钟周期。 -
1个指令周期的执行过程:取指令,译码,执行,(写回)。 取指令:从数据寄存器MDR,经过总线,读取到指令寄存器IR中。 译码:指令译码器ID。将指令寄存器IR中的指令翻译一下。 执行:执行指令译码器ID给出的指令。 -
在s1p1和s4p1下降沿时,分别读一次指令(每次读取一个字节)。 -
不同的指令,指令的长度是不一样的,指令的执行周期也是不相同的。有单字节单周期,双字节单周期,单字节双周期,双字节双周期,双字节三周期。。。。。。
2.2 执行性能
-
在主频相同的情况下,CPI越小,性能越好。 -
时钟频率:反应DSP实现技术,生产工艺 -
CPI:反应DSP指令集结构,DSP体系结构。 -
IC:反应DSP指令集的结构和编译技术,以及编程水平。 -
指令周期,指的是执行一条指令所需要的时间。通常以ns为单位。 -
MAC时间,一次乘法和一次假发的时间。大部分DSP可以在一个指令周期内完成一次乘法和加法。 -
FFT执行时间,衡量DSP芯片运算能力的一个指标。 -
MIPS:即M+IPS。每秒执行百万条指令。 -
MFLOPS,每秒执行百万次浮点操作。 -
在实际应用中,tdsp时间必须要小于采样时间ts,
2.2 流水线
- PipeLine。
- 使用流水线的方式,将CPI=12(24)降到CPI=1。
2.2.1 流水线的类型
(1)按照功能的多少来分 单功能流水线,只能完成一个功能。 多功能流水线,可以完成不同的功能。
(2)按照同一时间内各段之间的连接方式 静态流水线,同一时刻,各段按照一种功能连接。 动态流水线,同一时刻,各段可以按照不同功能连接。
(3)按照片内流水线的级别来分 片内,指令流水线DLX,运算流水线(核内流水线,核间流水线)。 片间,多芯片并行处理机。 机间,多处理机并行处理,任务流水。
(4)按照数据表示来分
(5)按照是否有反馈回路来分
2.2.2 指令流水线DLX(RISC架构)
- 处理器的体系结构,取指令,译码,执行,访存,写回。
2.2.3 指令流水线竞争
(1) 结构竞争,硬件资源无法满足指令流水线执行。
- 冯诺依曼结构只有一个总线,用于数据和指令的传输。
- 当流水线的两个环节都要访问内存时,会出现竞争。如下图所示,当第一个指令被传送到第四个环节时,出现第一个环节和第四个环节争抢总线的情况。
- 解决方式是,将指令向后移动,且必须移动到第四环节和第一环节不同时的位置。这种方式效率低。
- 另一种解决方式,另一种结构,哈佛结构。增加一条总线,数据和指令分开存放,避免冲突。
(2) 数据竞争,当前面指令结果无法及时输出。
-
靠编译器和编程方式来解决。 -
先写后读同一个寄存器,会产生竞争。如果采用后移等待的方式,效率会很低。 -
改成先读后写同一寄存器,不会产生竞争。 -
连续读或者连续写同一个寄存器,不会产生竞争。 -
消除数据竞争,尽量避免操作同一个寄存器;前移不会产生竞争的指令(中间插入其他的指令)。 -
编译器的选择: 流水线的时钟正确, 流水线的数据结果正确
(3)控制竞争,跳转等改变PC值指令预读取与实际不符。
- 指令5用来判断跳转方向,一种是继续执行指令6,一种是跳回指令1。
- 如果出现跳回指令1的情况,流水线下其他678指令已经被载入的部分需要被清除,这样中间就会出现空档,流水线断开了。
- 方法一:分支预测,加载执行概率大的指令。
- 方法二:跳转指令前移。如下图所示,除了指令1和指令6外,234是一定需要被执行的。
2.3 使得CPI进一步下降
视频连接《DSP体系结构》
- 已知,流水线使得CPI=12或24 降到 CPI=1。本节讲述如何使得CPI<1。
- 传统流水线CPI = 1。
- 一个时钟内完成多条指令CPI<1。
2.3.1 超流水线
- CPI=1,主频提升。
- 细化流水,提高主频,空间换时间。
- Pentium4 奔腾4处理器上,应用20级流水线。
- 《百度百科》超流水处理器是相对于基准处理器而言的,一般cpu的流水线是基本的指令预取,译码,执行和写回结果四级。超流水线(superpiplined)是指某型CPU内部的流水线超过通常的5~6步以上,例如Pentium pro的流水线就长达14步。将流水线设计的步(级)数越多,其完成一条指令的速度越快,因此才能适应工作主频更高的CPU。
2.3.2 超长指令字(VLIW,very long instruction word)
- 一个时钟内完成多条指令CPI<1
- 一个非常长的指令组合,8x32bit = 256bits。多个流水线并在一起。
- TI公司的C6000系列之后开始使用VLIW技术。
- 程序编译时,根据并行性,组合为多操作超长指令字。会有很多的32位空指令,程序编译后,比较大,程序存储效率不高。
- VLIW每段对应不同的操作单元。D,D,M,M,L,L,S,S。
(1)每个时钟周期启动一条VLIW指令。 (2)每段控制一个操作单元。 (3)编译,编程时,解决竞争问题,控制硬件较简单。
2.3.3 超标量(super scalar)
- 与VLIW结构类似。
- 执行时,根据资源,数据竞争,决定个单元是否执行。
- 在超长指令集基础上程序的存储效率提升。
2.4 DSP软件优化技术
- 软件优化的实质:如何高效使用DSP中的硬件资源。
- 需要我们了解硬件有哪些硬件资源。
2.4.1 了解DSP的硬件资源
简述
- 以TI公司的TMS320C6678为例。
- L1存储器(L1P程序,L1D数据),L2存储器。
功能单元
- 有两个寄存器组A和B,每个寄存器组有4个功能单元MLSD。
(1)M,multiplier乘法器。 (2)L,ALU逻辑单元。 (3)S,Data数据单元。 (4)D,Control控制和跳转单元。
交换路径
A侧和B侧交换数据。
内部总线
指令流水线
三条指令,没有流水线时,串行执行,需要9个时钟周期。采用流水线,只需要5个时钟周期。
指令延迟
- 大部分的指令立刻可以得到结果。
- 乘法,延迟1拍。
- 浮点乘法,延迟2拍。
- 数据加载,需要先给一个地址,存储器才返回一个数据,需要延迟4拍。
- 跳转,需要清除之前已经预存的指令,需要延迟5拍。
2.4.2 DSP软件优化
- 软件优化的目的:运行速度和代码尺寸。
- 优化编程的要求:熟悉处理器架构,熟悉编程语言(C,汇编,线性汇编)。
- 了解代码生成工具(编译器,汇编器,链接器)
- C6X优化C编译器,使用ANSI C源代码,可以达到手工优化的80%。需要了解各种优化等级。
汇编优化的手段
(1)指令并行。 (2)填充NOP指令。 (3)循环展开。(消除sub,b指令开销)。 (4)字或者双字访问。
2.4.3 参考优化案例
- 加载数据的指令,可以并行执行。
- 消除sub+b跳转的时间等待。
- 循环展开,消除跳转指令的开销。
- 使用字或者双字访问
2.4.4 软件流水操作
B站视频《DSP软件优化》
1. C语言实现算法
2. C6x的线性汇编
- 无延迟Nop
- 无指令并行
- 无需考虑功能单元和寄存器
3. 设计关系图
- 得到代码的过程中,依存关系,数据路径,指导我们分配资源。
- 绘制算法节点和路径
- 写出指令周期数消耗
- 分配功能单元到节点
- 将节点分成A,B两侧所有功能单元
4. 分配寄存器
5. 创建进程表
- 前7个时钟周期,处于建立循环的过程。
- 第8个时钟周期开始,是循环体。
- 图中没有给出循环结束后的,循环收尾处理的过程。
6. 转换C6x代码
2.4.5 C代码优化
y=a*b;
y = _mpy(a,b);
asm("MPY A0,A1,A2");
MPY A0,A1,A2 ;a,b,y
3. 其他
|