This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

请教关于硬件乘法器



 

没用过,不懂,请教

 

在低功耗应用中,请问使用硬件乘法器对功耗有影响么?如果对速度没有要求,那么使用硬件乘法器与否对功耗有什么样的影响?datasheet上有关于硬件乘法器的电流消耗么?

在IAR开发环境,是否在选项里设置使用硬件乘法器就可以不用自己编写了?在CCS开发环境里在哪里设置?

 

  •  

    在MSP430系列单片机中,硬件乘法器是外围模块,而不是CPU内核的一部分;所以它的活动与否与CPU的活动与否无关,它的寄存器和其他的外围寄存器一样通过CPU指令读写。硬件乘法器模块支持一下功能:无符号乘法、有符号乘法、无符号乘加、有符号乘加;可以支持16*16 16*8 8*16 8*8bits的乘法。硬件乘法器模块的四种操作类型(无符号乘法、有符号乘法、无符号乘加、有符号乘加)是由写入的第一个操作数的位置决定的。这个模块有两个操作数寄存器:OP1和OP2、三个结果寄存器RESLO, RESHI, 和SUMEXT。RESLO寄存器存储结果的低字(低16位);RESHI寄存器存储结果的高字(高16位);SUMEXT寄存器存储结果的有关信息。结果在3个时钟周期后即可完成;写入OP2后的下一条指令即可读取结果,有一种情况例外:用间接寻址方式访问结果。用间接寻址方式访问结果时,读取结果之前需要有一条NOP指令。在软件里,直接将数值写入硬件乘法器的寄存器里。

    代码可以这么写

      MPY = 0x1234;                             // Load first operand -unsigned mult

      OP2 = 0x5678;                             // Load second operand

    另外硬件乘法器主要用来对时间要求苛刻的情况。如:用430进行数字滤波,快速傅里叶变换等。


     

  • 老大呀,好像没有直接回答我的问题呀,

    我想知道的是,如果不用硬件乘法器,是否增加运算时间和代码长度?如果增加了运算时间,必然增加功耗是吧?那么如果用了硬件乘法器,情况又是怎样呢?当然了,也许这些疑惑有点夸大了,也许实际上影响很小,但是从理论上搞明白总是也许也还有点点意义呢?举个特例,虽然对时间要求不高,但是乘除法运算(当然这得是不是得看情况,有的不用硬件乘法器是不是也很快?因为cpu实际上没有直接乘除法)很多,那么用与不用有没有区别呢?如果有区别,是否存在一个功耗性能最差(功耗最大)的界点呢?

     

    可能我的问题很低级,说实在的,我快速看过介绍非硬件乘法器乘除法的的汇编原理,但是说老实话都记不清了(记性差,再加上脑袋笨吧,不过如果我也琢磨本帖的问题再加上自己在有心看一下,也许就能不会忘记了)。如果很低级,就麻烦直接短短指点一下该怎样入门呀,我这个问题可笑在哪里(有时候脑袋是没转过弯来,何况脑袋不好使呢),应该去了解哪些最基本的呀

  • 亲,你不使用硬件乘法器来做乘法运算,你觉得单片机该如何处理,必然会增加运算时间和代码长度。如果使用硬件乘法器,就是寄存器的操作。不会增加代码量,除了乘法器模块本身的功耗,减少了很多的运算的时钟周期。功耗肯定要比不适用硬件乘法器要低。另外,硬件乘法器主要是在有大量乘除法运算的时候才能突出快速实时的优势,比如FFT,滤波算法的实现。

  • 谢谢回答

    第一句没看明白到底是什么语气。

    您说:不会增加代码量,除了乘法器模块本身的功耗

    我就是想知道乘法器模块本身的功耗是什么级别,具体多大呀,存在时间多少?不运算立即不功耗?

  • Fuchong,

    您好!

    采用硬件乘法器的原因就是为了减少CPU的计算时间,结果在3个时钟周期后即可完成,通过硬件的方式减少CPU的负荷,减少整体系统的功耗。

    在IAR开发环境,是否在选项里设置使用硬件乘法器就可以不用自己编写了?在CCS开发环境里在哪里设置?

    我试了一下,勾选了硬件乘法器后,汇编代码中并没有对乘法运算采用硬件乘法器。建议还是手动去设置。

  • MCU的功耗很大一部分是由时钟影响影响的,硬件乘法器的时钟源是MCLK,使用其进行乘法运算可以大量减少CPU的运算量,即MCLK开启的时间,故可以从这方面看用硬件乘法器是降低功耗的,硬件乘法器需要配置MPY32CTL0,里面需要根据实际情况进行运算的乘数,乘法的模式,符号位等设置

  • 主要是想从这里直接得到明确答案,所以打扰大侠们了。虽然自己需要不断学习,怎奈精力和脑筋有限呀。

    昨天晚上看到了什么RRUX之类的指令,再加最近插秧累的,看得直晕。就想不看了,先用C或者知道的汇编先弄弄出来东西再说。就这样还把zhuangBiXiShu%=64;写成了zhuangBiXiShu/=64;

    我问这个问题主要是看到有现成的工程源代码,芯片有硬件乘法器却好像没用,就是有点不明白为什么

  • 插了一天秧,直到晚上才上网,看到多了回复,有点高兴。

    谢谢鸵鸟蝈蝈和Hardy Hu

    我问这个问题主要是看到有现成的产品工程源代码,芯片有硬件乘法器却好像没用,就是有点不明白为什么

    看了回复,是不是可以这样认为,硬件乘法器尽管是硬件,但是运行功耗非常小可以忽略不计?

    再由此推论,只要MSP430CPU支持硬件乘法器,即使程序中乘法运算很少,除了极少数的特例乘法以外,尽量使用硬件乘法器如论对代码量还是速度(尽管没要求)还是功耗都有好处没有坏处呢?

  • Fuchong你好,在MSP430的手册中并没有提及乘法器电流消耗。乘法器工作时本身会消耗电流(该值未标出),而不工作时则只会有漏电流(该值很小几乎可以忽略)。考虑到使用乘法器可以大大减少CPU消耗的时钟数,让CPU有更多时间休眠,而乘法器本身工作电流一定小于CPU,所以乘法器的使用不会影响功耗甚至可以对降低功耗有帮助。

    C语言开发时,使用硬件乘法器不需要处理,CCS的编译器会自动调用该模块的。

  • 谢谢Richard Ma回答

    能不能进一步说明白:C语言开发时,使用硬件乘法器不需要处理,CCS的编译器会自动调用该模块的。

    是指使用 MPY之类时 还是就是计算公式表达式时CCS就会自动调用呢?

  • 谢谢鸵鸟蝈蝈 

    我也在IAR中试了一下,不过我对IAR不是很熟悉,好像是如您所说的那样,编译链接结果的代码长度都一样呀

    在MAP文件中只有下图红色中不一样,不过等号后面的和没勾选硬件乘法器的汇编代码中的一样。查看汇编代码中,勾选没勾选硬件乘法器C代码乘法部分的编译汇编代码都一样呀。这是为什么呀?难道是使用的评估版的缘故?

     


  • 简单说,就是写C代码时候不考虑指令,用下面的形式:

    ====================================

    int a, b, result;

    a = 2; b = 3;

    result = a * b;

    ====================================

    CCS编译器会自动生成合适的指令(包括调用硬件乘法器)来处理这个乘法的