【问题标题】:Beaglebone and PRU, division and multiplication?Beaglebone 和 PRU,除法和乘法?
【发布时间】:2016-03-07 10:32:38
【问题描述】:

使用 Beaglebone 的 PRU, 如何进行除法和乘法运算?

【问题讨论】:

  • 如果你使用 C 编译器,那么它应该会为你解决这个问题。

标签: beagleboneblack beagleboard


【解决方案1】:

乘法将重复将第一个数字与自身相加,而第二个数字用作计数器。

除法将重复减去第一个数字,直到被除数小于余数。您还将有一个计数器,每次减法后都会增加一个计数器,从而得出您的商数。

【讨论】:

    【解决方案2】:

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

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

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

    使用汇编器并手工完成:

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

    使用 Xin/Xout 指令并使用预期的寄存器,可以快速执行 32bitx32bit=64bit 乘法。参照。第 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。对于剩余的位位置

    【讨论】:

      猜你喜欢
      • 2018-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多