延迟间隙:一条指令在第一个执行节拍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)数据读写使用的地址寄存器必须与所用的功能单元(.D)处于同一个数据通路。
1)每个寄存器只有一个长定点类型的数据。
2)不可以同时读/写。
对同一寄存器的读取次数<=4;条件寄存器除外。
在同一周期内,两条指令不可以对同一寄存器进行写操作;不同周期内就可以,可以并行执行。
label:? ? ? ? parallel bass? ? ? ? [condition]? ? ? ? instruction? ? ? ? unit? ? ? ? operands? ? ? ? comments
标号? ? ? ? ????并行符号? ? ? ? ? ? ? ?条件? ? ? ? ? ? ? ? ?指令? ? ? ? ? 功能单元? ? ?操作数? ? ? ? ? ? ? ? 注释
.bss? ? ? ? ? 变量段,为未初始化的变量保留空间
.data? ? ? ? 数据段,该段包含已初始化的数据
.text? ? ? ? ? 代码段,该段包含可执行代码
.sect? ? ? ? ?定义初始化了的带名称的段
.usect? ? ? ? 在一个未初始化的段中保留空间
.int? ? ? ? .word? ? ? ? .char????????
.list????????.nolist????????.length????????.title
.copy/.include????????.global????????.mlib
.if/.else/.endif? ? ? ? .loop/.endloop? ? ? ? .break
.macro? ? ? ? .endm? ? ? ? .var
.asg? ? ? ? .eval? ? ? ? .set? ? ? ? .equ? ? ? ? .end
创建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数据空间中。
作用:实时调度和同步;主机-目标系统通信和实时监测。
意义:减少对CPU和内存资源的占用;可重复使用,减少软件的维护费用。
-o????????-pm????????-mg????????-mt? ? ? ? -ms????????-mh????????-mx
下划线开头;const/restrict