企业博客网bokee.net www.bokee.net http://wbymcs51.blog.bokee.net/  C24XX系列DSP移位指令总结 打印此页

C24XX系列DSP移位指令总结

http://wbymcs51.blog.bokee.net    2008-4-15

  C24XX系列DSP移位指令总结

 

                      徐丽红     王佰营

wbymcs51.blog.bokee.net

    TI公司C24XX系列DSP的移位指令很有特色而且效率很高;一般的移位功能不用专门的指令实现而是作为其他指令中的一个功能给出,并且移位并不占用CPU额外时间。以下整理出了DSP常用的移位指令:

 

一、两类移位指令

 

1>显性移位指令,移位次数由指令直接给出:
  1     add
sub                   ←  016

  2     and or xor          ←  #L

  3     lacc                              ←  016

  4     sach sacl                 ←  0---7  

2>隐性移位指令

 

  A:由TREG[0:3]指定

     (1)     addt subt             T

     (2)    lact                       T

     (3)    不移位,bitt  TREG[0:3]给定位

 

  B:由PM给定

    (1)    pac apac spac               ←→ PM

    (2)    lta  ltp  lts  ltd           ←→ PM

    (3)    mac macd                          ←→ PM

    (4)    mpya mpys                        ←→ PM

    (5)    sph spl                              ←→ PM

    (6)    sqra sqrs                            ←→ PM

 

  无移位的指令:

     lph lt mpy mpu spm

 

  注: ←  表示可左移;

   ←→ 可左右移;

 

二、移位指令的总结:

 

1 移位指令分显性移位和隐性移位,

     隐性移位按给出移位数的方式不同分为TREG[0:3]PM之分;

 

2 显性移位指令多由acc参与,也就是由ACC参与的,除三条指令最后是T结尾的指令    (addt,subt,lact)由TREG[0:3]给出移位数外,其余皆为显性移位;

    

 3 显性移位分为:

 

     A:≤7位的左移的两条指令:

           Scah       sacl;

 

      B 其余为01516位移位指令

        1>  仅对长立即数移位的指令,是三条逻辑指令

               And  - or – xor

         2> 直接0-1516,间接0-1516,长立即0-15的移位指令:

              Add ,   sub ,    lacc

         3>  TREGPREG参与的指令仅用PM指令移位方式;

         4>  TREGPREG参与的指令中,除以下几条指令外,其它指令均含有由PM指定 的移位操作。

              Lph – lt- mpy – mpu;

   

 4、由中央处理单元结构(见下图)可知:

 

 

       由上图可知移位操作有四处:

 

     A 、输入移位器(ISCALE)

            1>其数据来源有:

                  1 程序读总线-程序存储器-指令中的立即数;

                  2 数据读总线-数据存储器单元中的数据;

            2>可实现

                 1 程序提供的立即数

                 2 数据RAM—直接寻址,    间接寻址

                如:add         dma [shift]              直接寻址

                        add         dma 6        

                        add         ind,16 [ARn]          间接寻址

                        add         ind [shift [ ,ARn]

                        add         #lR [ ,shift]             立即寻址

      3>输入移位器的移位数值的大小由包含在指令中的常量或由临时寄存器(TREG)来指定;其中, 由指令字中的常量决定的移位量允许用户采用特定的数据定标或调整运算来得到特定的代码;由TREG低4位数值所决定的移位量,允许用户动态调整数据的比例系数,从而来适应不同要求的系统性能;

      4>(0---16)左移时,最低位填0,未用的最高位填0或进行符号扩展,这要由SXM位的值决定:SXM=0,填0;SXM=1,则未使用的最高有效位填0或1,进行符号扩展;

      5>两种方法获得左移的位数:指令中直接设置移位位数或TREG的最低4位提供移位位数; 

 

      B乘积移位器(PSCALE)

             1> 其数据来源PREG

             2> 可实现

                 以状态寄存器ST1中的乘积移位模式控制位PM指定方式对PREG来的数据进行移位的方式

                PM = 00           无移位

                PM = 01           左移一位

                PM = 10           左移四位

                PM = 11           右移六位

                  如:shifted(PREG)

                      a> apac   功能:(ACC+ shifted(PREG) ACC;

                      b> spac   功能:(ACC- shifted(PREG) ACC;

                      c> pac    功能: shifted(PREG) ACC;

                      e> sph    功能: 16MSBs  of  shiftEd(PREG) →数据空间地址;

                      f>  spl     功能: 16LSBs  of  shifted(PREG)  →数据空间地址;

                      g>包括有指令apac功能的指令有:

                           lta ; mac ; macd ; mpya ; sqra ;

             i>包括有指令spac功能的指令有:

             lts ; mpys ; sqrs ;

                      j>包含有指令pac功能的指令有

                           ltp

             3> 乘积移位器可以供给:

                  <1> 数据写总线

                  <2> 中央算术逻辑部分CALU;再给ACC;

                所以有以下几种情况:

                       shifted(PREG) ACC;

                     ACC+ shifted(PREG) ACC

                     ACC- shifted(PREG) ACC

                      16MSBs  of  shiftEd(PREG) →数据空间地址

                      16LSBs  of  shifted(PREG) →数据空间地址

      4> 一般当PREG参与并且数据传输的目标是ACC或RAM时,数据就会经过PSCALE,就由PM决定是否移位;自然,MPY,MPYU和LPT指令数据传输的目标是PREG,所以就不会有移位了;

      5> 乘积移位操作不受符号扩展位SXM的约束,无论SXM为何值,对未用到的最高有效位总是进行符号扩展;

 

       C、输出移位器(OSCALE)

          1>     其数据来源为ACC

          2>     可实现

           (ACC)x2shift

      如:sach , sacl  (shift7)

           16MSBs  of  (ACC)x2shift →数据存储空间

            16LSBs  of  (ACC)x2shift→数据存储空间

          3>     输出移位器可以供:

     数据写总线—数据RAM空间。

  4>    输出移位器对累加器的结果进行移位操作,将累加器的高位字(ACCH)和低位字(ACCL)分别移位处理,将结果送至16位的数据写总线上而存入数据存储器;

    5> 当输出移位器执行移位时,其最高有效位丢失而最低有效位填0;

 

       D、累加器ACC的移位操作

                ACC可实现如下循环或移位,和以上的移位不同,专用于循环或移位,占用指令时间,是该指令专门的工作;

                 rol ---累加器逻辑循环左移---左移一位,C入LSB,MSB入C,不受SXM影响;

                 ror--- 累加器逻辑循环右移---右移一位,C入MSB,LSB入C,不受SXM影响;

                 sfl --- 累加器算术左移---最高位入C,最低位补0,不受SXM影响;

                 sfr --- 累加器算术右移---受SXM位影响:

                           若SXM=1,为算术右移,符号位(最高有效位)不变且被复制到位30,位0入C;

                           若SXM=0,为逻辑右移,ACC中所有位右移一位,LSB入C,MSB填0;

      

       注意:有的移位受符号扩展方式位(SXM)的影响,注意正确设置SXM的值,以达到预期目标;

       关键字: TMS320LF2407  TMS320C2000 DSP 移位 指令