TMS320C6000-DSP-指令详解

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、加减运算指令及溢出问题
1、分类
有符号数加减运算指令:
操作数为整型(32位)或长整型(40位)的ADD、SUB指 令;
操作数为半字(16位)的ADD2/SUB2指令。
无符号数加减运算指令ADDU、SUBU,操作数为32 或40位无符号数;
带饱和的有符号数加减运算指令SADD、SSUB,操 作数为32或40位有符号数;
LDB/LDH指令读入的是有符号数(补码数),将字节/半字写入寄 存器时,应对高位做符号扩展。LDBU/LDHU指令读入的是无符号 数,将字节/半字写入寄存器时,应对高位补0。
(2)数据类型对地址偏移量的影响
LDB(U)/LDH(U)/LDW指令分别读入字节/半字/字,因为地址均以字 节为单位,在计算地址修正时,要分别乘以相应的比例因子1、2、 4。STB/STH/STW同样计算地址。
同样一个16位数,若小 数点设定的位置不同, 它所表示的数也就不同。
Q0 : 2000H=8192 Q15 :2000H=0.25
Q格式定点数
所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。在 计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高 位之前,或者是固定在最低位之后。一般常称前者为定点小数,后者为 定点整数。
数的定标
例3.10 定点加法 设x=0.5,y=3.1,则浮点运算结果为z=x+y= 0.5+3.1=3.6; Qx=15,Qy=13,Qz=13,则定点加法为: x=16384;y=25395; temp=25395<<2=101580; temp=x+temp=16384+101580=117964; z=(int)(117964L>>2)=29491; 因为z的Q值为13,所以定点值z=29491即为浮点值
8
Load/Store类指令
举例:线性变址下的变址计算 LDH .D1 *++A4[A1],A8
先修改地址,地址偏移量按[A1]2计算,实际读取地址00000024h单 元的内容。
9
Load/Store类指令
(2)循环寻址方式
举例:循环寻址方式下的地址计算
LDW .D1 *++A4[9],A1
二进制数0010000000000011b=2003H =8195 二进制数1111111111111100b=FFFBH = - 4
数的定标
对DSP芯片而言,参与数值运算的数就是16位的整型 数。但在许多情况下,数学运算过程中的数不一定都 是整数。那么,DSP芯片是如何处理小数的呢?应该 说,DSP芯片本身无能为力。那么是不是说DSP芯片 就不能处理各种小数呢?当然不是。这其中的关键就 是由程序员来确定一个数的小数点处于16位中的哪一 位。这就是数的定标。
*-R[ucst5] *--R[ucst5]
带15位常数偏移量 *+B14/B15 的寄存器相对寻址 [ucst15]
*R--[ucst5]
基地址+变址 *+R[offsetR] *++R[offsetR] *R++[offsetR]
*- R[offsetR] * --R[offsetR] *R--[offsetR]
4
6.汇编指令
读取/存储类指令 算术运算类指令 逻辑与位操作类指令 搬移类指令 程序转移类指令 空操作类指令 浮点操作类指令
Load/Store类指令
Load指令可从数据存储器读取数据送到通用寄存器,Store指 令可把通用寄存器的内容送到数据存储器保存。注意: (1)符号扩展指令与无符号扩展指令的区别
Block size fields
31
Байду номын сангаас
26 25
21 20
16
Reserved
BK1
BK0
R
R,W
Mode select fields
15
14 13
12 11
10 9
87
6
B7 mode B6 mode B5 mode B4 mode A7 mode
5
4
A6 mode
R,W
3
2
A5 mode
1
0
A4 mode
十进制数表示范围
-1≤X≤0.9999695 -2≤X≤1.9999390 -4≤X≤3.9998779 -8≤X≤7.9997559 -16≤X≤15.9995117 -32≤X≤31.9990234 -64≤X≤63.9980469 -128≤X≤127.9960938 -256≤X≤255.9921875 -512≤X≤511.9804375 -1024≤X≤1023.96875 -2048≤X≤2047.9375 -4096≤X≤4095.875 -8192≤X≤8191.75 -16384≤X≤16383.5 -32768≤X≤32767
值减小,以保持运算过程不产生溢出,但该方法会降低计 算精度。
13
算术运算类指令
一、加减运算指令及溢出问题
例2-3 减法运算举例
以相同的src1和src2做不同的减法指令说明:饱和减 法指令与减法指令的差别;保护位防止溢出的作用。
SSUB .L2 B1,B2,B3
14
算术运算类指令
例 SSUB.L2 B1, B2, B3 SUB.L2 B1, B2, B3 SUB.L2 B1, B2, B5:B4 示例0203
0x5A2E51A3 0x802A3FA2 =0xDA041201
符溢号出位了在!这里无溢 出!
算术运算类指令
一、加减运算指令及溢出问题
4、累加和运算举例
计算累加和的程序,用长型数存放和数,有8位保护位 下述程序在进入loop循环前,已使寄存器A4指向存放数
5 寻址方式
寻址方式指CPU是如何访问其数据存储空间。C6000全部采 用间接寻址,所有寄存器都可以做线性寻址的地址指针。 A4~A7,B4~B7等8个寄存器还可作为循环寻址的地址指针, 由寻址模式寄存器AMR控制地址修改方式:线性方式(默认) 或循环方式。
1
寻址模式寄存器AMR各个位域的定义
3
5 寻址方式
举例:用汇编程序设置循环寻址方式 MVK .S1 0001h,A2 MVKLH .S1 0003h,A2 MVC .S2X A2,AMR 上述汇编程序段将A4寄存器设置成循环寻址方式,用BK0定
义块尺寸为16字节。注意,只有用MVC指令和.S2功能单元 才能访问控制类寄存器。
A4 0000 0100h
A4 0000 0104h
A4 0000 0104h
A1 XXXX XXXXh
mem 104h 1234 5678h
A1 XXXX XXXXh
mem 104h 1234 5678h
A1 1234 5678h
mem 104h 1234 5678h
10
Load/Store类指令
二、乘法运算指令
1、分类:公共指令集乘法指令以1616的硬件乘法器为
基础
适宜于整数乘法的指令:
MPY 、MPYU 、MPYUS、MPYSU、MPYHL、MPYHLU
、MPYHULS、MPYHSLU、MPYLH、MPYLHU 、
MPYLUHS、MPYLSHU
适宜于Q格式数相乘的3条指令:
R,W
00:线性寻址(复位后默认值)
各模式 01:循环寻址,使用BK0字段
(Mode) 描述:
10:循环寻址,使用BK1字段
11:保留
2
5 寻址方式
Load/Store类指令间接地址的产生
寻址类型
不修改R 先修改地址R 后修改R
寄存器间接寻址 *R
*++R
*R++
*--R
*R--
寄存器相对寻址 *+R[ucst5] *++R[ucst5] *R++[ucst5]
什么是Q格式?
SMPY/SMPYLH/SMPYHL
17
数的定标
在定点DSP芯片中,采用定点数进行数值运算,其操 作数一般采用整型数来表示。一个整型数的最大表示 范围取决于DSP芯片所给定的字长,一般为16位或24 位。显然,字长越长,所能表示的数的范围越大,精 度也越高。
定点DSP芯片中的数以2的补码形式表示。每个16位数 用一个符号位来表示数的正负,0表示数值为正,1则 表示数值为负。其余15位表示数值的大小。因此
Q格式:小数点位于第 n 位之右侧,称为Qn 格式
定点小数是纯小数,约定的小数点位置在符号位之后、有效数值部分最 高位之前。若数据 x 的形式为 x = x0.x1x2…xn ( 其中x0为符号位, x1~xn是数值的有效部分,也称为尾数, x1为最高有效位 ),则在计 算机中的表示形式为:
Q0格式数
2- n ≤ | x | ≤ 1 - 2- n
Q格式定点数
定点整数是纯整数,约定的小数点位置在有效数 值部分最低位之后。若数据 x 的形式为 x = x0 x1x2…xn ( 其中x0为符号位,x1~xn 是尾数, xn 为最低有效位 ),则在计算机中的表示形式为:
Q15 格式数
1≤ | x | ≤ 2n - 1
6
Load/Store类指令
(1)线性寻址方式
例2-1 线性寻址下的变址计算 LDW.D1 *++A4[1], A6
此例为先修改地址,地址偏移量按1×4计算,计算结果如下图所示:示例 0201
Load/Store类指令
举例:线性变址下的变址计算 LDW .D1 *A4++ [1],A6
后修改地址,地址偏移量按14计算。
Q表示
Q15 Q14 Q13 Q12 Q11 Q10 Q9 Q8 Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0
S表示
S0.15 S1.14 S2.13 S3.12 S4.11 S5.10 S6.9 S7.8 S8.7 S9.6 S10.5 S11.4 S12.3 S13.2 S14.1 S15.0
通过设定小数点在16位数中的不同位置,就可以表示 不同大小和不同精度的小数了。数的定标有Q表示法 和S表示法两种。
下页表列出了一个16位数的16种Q表示、S表示及它们 所能表示的十进制数值范围。同样一个16位数,若小 数点设定的位置不同,它所表示的数也就不同。
定点数的Q表示、S表示及数值范围
组的基地址,寄存器B1存放欲累加的个数,寄存器组 A3:A2用来存放累加和,进入循环前已清零。
loop:

LDW .D1 NOP 4 ADD .L1 SUB .L2 [B1] B .S1 NOP 5
*A4++,A0
A3:A2,A0,A3:A2 B1,1,B1 loop
16
算术运算类指令
数的定标
定点数XQ和浮点数x的转换关系 XQ =int(x2Q);x= Xq 2-Q 例1:浮点数 x=0.5,定标 Q=15,则定点数 XQ = 16384 例2:一个用 Q=15 表示的定点数16384,其浮点数为
16384×2-15=16384/32768=0.5。
例3:加法/减法运算的C语言定点模拟 设浮点加法运算的表达式为:float x,y,z; z=x+y; 将浮点加法/减法转化为定点加法/减法时最重要的一点 就是必须保证两个操作数的定标值一样。若两者不一样, 则在做加法/减法运算前先进行小数点的调整。为保证运 算精度,需使Q值小的数调整为与另一个数的Q值一样 大。此外,在做加法/减法运算时,必须注意结果可能会 超过16位表示。如果加法/减法的结果超出16位的表示 范围,则必须保留32位结果,以保证运算的精度。
设A4已被制定为循环寻址方式,块字节尺寸为16(N=3)。因为以字为
单位读取,变址偏移量应乘4。在线性寻址时的地址为00000124h;循
环寻址时,低4位(第0~3位)地址以10h为模,余数为4,故实际寻址
为00000104h。
Before LDW
1cycle after LDW
5cycle after LDW
3、按寻址方式的加减法运算类指令ADDA/SUBA 此类指令在默认方式下做线性加减法运算。但当源操作数src2
是A4~A7或B4~B7中的一个时,它按AMR寄存器指定的寻址 方式做线性或循环计算。指令的操作数有字/半字/字节3种。 此类指令只在功能单元.D1或.D2运行。
11
算术运算类指令
与16位常数进行加法操作的指令ADDK。
12
算术运算类指令
一、加减运算指令及溢出问题
2、溢出问题
运算结果超出目的操作数字长所能表示数的范围, 造成运算结果的高位丢失。
解决方法3种:
用较长的字长来存放运算结果,使目的操作数字长超出源 操作数字长;
用带饱和的加减运算指令做补码数加减运算; 对整个系统乘一个小于1的比例因子,亦即将所有输入的数
相关文档
最新文档