Beaglebone和PRU,除法和乘法?

时间:2016-03-07 10:32:38

标签: beagleboneblack beagleboard

使用Beaglebone的PRU, 我该如何进行除法和乘法?

2 个答案:

答案 0 :(得分:1)

乘法将重复添加第一个数字到自身,而第二个数字作为计数器。

分割将重复减去第一个数字,直到被除数小于剩余部分。你还将有一个计数器,你在每次减法后递增,这将给你的商。

答案 1 :(得分:1)

Beaglebone上的PRU每个都有一个用于乘法的加速器(这是一种小型协处理器)。

对于C / C ++编译器,有一些标志可以为TI编译器http://www.ti.com/lit/ug/spruhv7a/spruhv7a.pdf自动启用MAC:

  • -hardware-mac = on完全使用MAC
  • -fp_mode =用于在除以常数时使用倒数

用于使用汇编程序并手动执行:

请参阅第4.4.1.3章的TI 335x技术参考手册(Beaglebone上的处理器): http://www.ti.com/lit/ug/spruh73q/spruh73q.pdf

使用Xin / Xout指令并使用预期的寄存器,可以快速执行32bitx32bit = 64bit乘法。 cf.有关逐步指南,请参见第4.4.1.3.2.1章。


以下是在没有加速器的情况下进行乘法和除法的方法,但是比仅具有加法/减法的方法快:

您可以做到,就像在纸上一样

F0 x F1的乘法:

  1. 对比特0进行比特测试F0,并快速跳转至下一条指令(至3)
  2. 将F1添加到结果
  3. 将F1左移1位
  4. 对比特1进行比特测试F0,并快速跳转至下一条指令(至6)。
  5. 将F1添加到结果
  6. 将F1左移1位
  7. 对第2位进行F0测试,然后快速跳转至下一条指令(至9)
  8. ...

Q / D部门:

  1. 将D左移(使其仍位于寄存器内)
  2. 尝试从Q中减去D(使用第二个寄存器)
  3. 如果成功,则Q = Q-移动D;如果不是Q不变
  4. 如果成功,结果| 1
  5. 将结果向左移动1,将D向右移动1
  6. 重复1.-3。剩余的位位置