一、延迟间隙
延迟间隙:一条指令在第一个执行节拍E1以后占用的CPU周期数。
延迟间隙数:一条指令的执行或结果获得的潜在周期。
单周期类型指令(如ADD),在第i个周期读取源操作数,指令执行结果在第i+1周期才被访问,延迟间隙为0;
多周期类型指令(如MPY),在第i周期读取源操作数,指令执行结果在第i+2周期才能被访问,延迟间隙为1。
TMS320C64xDSP各指令对应的延迟间隙数
Branch为分支跳转指令,例如go to指令;i+5=i+6-(i+1)
二、并行操作
一次取8条指令为一个取指包,宽256位(8个字)
取指包的基本格式
1)一个执行包最多包含8条指令;
2)执行包中每条指令必须使用不同的功能单元;
3)P=1代表 该指令与后一条指令并行
例如
0 0 1 1 0 1 1 0 ——> 共有A、B、C//D//E 、F//G//H 4个执行包
A B C D E F G H
三、资源对公共指令集的限制
1.使用相同功能单元指令的限制
在一个执行包中两条指令不可以使用同一个功能单元。
2.使用交叉通路(1X和2X)的限制
同一执行包不用同一交叉通路。
3.数据读/写的限制
1)不能对同一寄存器组同时读/写。
2)数据读写使用的地址寄存器必须与所用的功能单元(.D)处于同一个数据通路。
4.使用长定点类型(40位)数据的限制
1)每个寄存器只有一个长定点类型的数据。
2)不可以同时读/写。
5.存储器读取的限制
对同一寄存器的读取次数<=4;条件寄存器除外。
6.存储器存储的限制
在同一周期内,两条指令不可以对同一寄存器进行写操作;不同周期内就可以,可以并行执行。
四、汇编代码结构
label: parallel bass [condition] instruction unit operands comments
标号 并行符号 条件 指令 功能单元 操作数 注释
五、汇编伪指令
1.段定义伪指令
.bss 变量段,为未初始化的变量保留空间
.data 数据段,该段包含已初始化的数据
.text 代码段,该段包含可执行代码
.sect 定义初始化了的带名称的段
.usect 在一个未初始化的段中保留空间
2.初始化常数的伪指令
.int .word .char
3.格式化输出清单文件的伪指令
.list .nolist .length .title
4.引用其他文件的伪指令
.copy/.include .global .mlib
5.条件汇编伪指令
.if/.else/.endif .loop/.endloop .break
6.定义宏的伪指令
.macro .endm .var
7.汇编符号伪指令
.asg .eval .set .equ .end
六、C源程序转为可执行文件步骤
创建C源文件——创建工程文件——链接器命令文件——编译全部工程文件——链接——生成可执行文件
七、链接器命令文件的编写和使用
链接命令文件(CMD):DSP和目标板的存储器空间的定义,以及代码段、数据段如何分配到这些存储空间
MEMORY:定义目标系统的存储器配置空间。
SECTIONS:指定链接器将输入段组合成输出段的方式;输出段在存储器中的位置。
例如
MEMORY
{
PAGE 0: PROM:origin=0x8000,length=0x06
PAGE 0: VECT:origin=0xFF80,length=0x04
PAGE 1: DATA:origin=0xA000,length=0x500
}
SECTIONS
{
.text >PROM PAGE 0
.bss >DATA PAGE 1
.const >DATA PAGE 1
}
PAGE 0代表程序空间; PAGE 1代表数据空间;
MEMORY指令将程序空间分为两部分,一部分名字为PROM,起始地址为0x8000,长度为0x06;另一部分名字为VECT,起始地址为0xFF80,长度为0x04;数据空间名为DATA,起始地址为0xA000,长度为0x500;
SECTIONS指令将三个段进行分配,.text段分配到PROM程序空间中,.bss和.const段分配到DATA数据空间中。
八、DSP/BIOS的组件构成
作用:实时调度和同步;主机-目标系统通信和实时监测。
意义:减少对CPU和内存资源的占用;可重复使用,减少软件的维护费用。
九、DSP软件开发过程
十、C语言代码的优化
1.选用C编译器提供的优化选项
-o -pm -mg -mt -ms -mh -mx
2.数据类型
3.减小存储器的相关性
4.使用内联函数(Intrinsics)
下划线开头;const/restrict