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.

[参考译文] AM2432:PRU 中的 am2432 乘法

Guru**** 2538950 points
Other Parts Discussed in Thread: AM2612

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1563785/am2432-am2432-multiplication-in-pru

器件型号:AM2432
Thread 中讨论的其他器件:AM2612

工具/软件:

你(们)好

我需要一些关于 PRU 编码的建议。

我看到 am243x 与 am572x 之间 PRU 代码生成的差异

为 am577x 与 am243x 生成的代码看起来有些不同。

有人能说明 am243x 上的整数乘法(16 位和 32 位)机制和效率吗?

谢谢

Rasty

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我建议使用乘法累加小工具来实现这一点。 希望本示例对以下示例有所帮助: 位于·Texas Instruments/open-PRU 处的 open-pru/academc/mac_multiple

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的快速答复。

    1.我在示例列表中没有看到 am243x。

    2.是否有一些“工作原理“? “新“背后会发生什么?

    3.是否有一些兼容性列表: am243x vs am572x vs am26xx ? 我是否可以假定所有设备都具有相同的功能?

    谢谢

    Rasty

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有关理论、请参阅 TRM: AM64x/AM243x 技术参考手册(修订版 H)

    PRU_ICSSG 宽边接口使 AM243x 上的 PRU 内核能够与具有累积功能的集成乘法器 (MPY/MAC) 加速器进行通信。 此接口使用 XFR 指令直接访问一组专用的 PRU 寄存器 (R25-R29)、这些寄存器控制 MAC、提供操作数和检索结果、使操作能够在单个时钟周期内完成。

    PRU MAC 和宽边接口运行

    PRU_ICSSG 内的六个 PRU 内核 (PRU0/PRU1、RTU_PRU0/RTU_PRU1、TX_PRU0/TX_PRU1) 中的每一个都有一个专用的无符号 MPY/MAC 单元。 MAC 直接连接到 PRU 的内部寄存器 R25 至 R29。 宽边接口和 XFR 指令用于控制 MAC 的模式以及将乘法结果导回 PRU。

    PRU MPY/MAC 的主要特性包括:

    • 可配置为“仅乘法“和“乘法和累加“功能。
    • 每个操作一个时钟周期。
    • 使用宽边接口和 XFR 指令 (XIN、XOUT) 导入结果和启动累加函数。
    • 允许固件为累加器种子。

    用于 MAC 操作的寄存器映射

    MAC 的功能直接映射到一组特定的 PRU 寄存器、可通过宽边接口访问这些寄存器。

    寄存器 测量输出
    R25 将 MAC 配置为仅乘法模式或乘法和累加模式。
    R28、R29 为乘法提供 32 位操作数。
    R26、R27 接收包含进位位标志的 64 位结果。

    在 AM243x 上、两个 PRU_ICSSG 子系统中的每一个都包含用于其 PRU、RTU_PRU 和 TX_PRU 内核的这些 MPY/MAC 加速器。

    ;步骤 1:启用仅乘法 MAC_mode
    LDI R25、multiply_only;对于 MAC 模式、设置 R25[0]= 1
    XOUT DEVICE_ID、&R25、1;启用 MAC 模式

    ;乘以操作数
    MOV R28、R10;将 A 载入第一个操作数寄存器
    MOV R29、R11;将 b 加载到第二个操作数寄存器中
    NOP;它需要 1 个 PRU 时钟来乘以 a * b

    ;读取最终结果
    XIN DEVICE_ID、&R25、1;读取 MAC 状态
    XIN DEVICE_ID,&R26, 8;读入 R27: R26

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否有一些兼容性列表:am243x vs am577x vs am26xx? 我是否可以假定所有功能都可用?

    是的、它在所有产品中都可用

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的。 最后一个问题。 为什么不同版本的编译器生成的代码看起来不同? 较新的版本引入了_mpyi 包装器调用、为什么较旧版本会直接注入 xin 指令? 是否可以控制此行为? 我想问的是、我们想在 C 语言中编辑代码、而不是使用汇编语言。

    谢谢

    Rasty

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rasty、

    PRU 子系统的特性

    有关每个 PRU 子系统的硬件特性的完整列表、请参阅应用手册“PRU 子系统特性比较“
    https://www.ti.com/lit/sprac90

    通过 C 语言对 MAC 进行编程  

    我们还有在 AM57x 和 AM243x/AM64x 上执行此操作的示例代码(这些部分基本相同,AM243x 只是缺少 A53 集群)。 请参阅较旧的 PRU 软件支持包 (PSSP) 中的 AM64x 示例:
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am64x/PRU_MAC_Multiply_Accum

    OPEN-PRU 存储库仍处于开发阶段的早期阶段。 我们需要一些时间才能将现有的汇编示例移植到 AM243x 和 AM64x、并将 PSSP C 代码示例移植到 open-PRU 存储库。

    本月晚些时候、我们将发布第一个版本的 AM243x PRU Academy(您将在 AM243x 学院中看到它作为新模块:dev.ti.com/.../node 。 以下是学院的 MAC 页面:

    e2e.ti.com/.../Multiplier-with-Accumulation-_2800_MPY-or-MAC_2900_-_1420_-AM64x-Academy.mhtml

    是否还想使用 C 语言进行编程?  

    首先、请注意、我们完全支持从 Linux Remoteproc 驱动程序加载 C 固件(例如,如果您使用的是 AM64x)。 但是、使用 MCU+ PRUICSS 驱动程序加载 C 代码时可能会出现一些问题。 修复待办事项列表中的行为。 如果您遇到问题、请联系我们。

    供参考:PRU Academy 通知  

    如果您想在我们推送 PRU 学院时获得通知(以及 PRU 学院的未来更新)、请直接与我联系。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常感谢您的澄清。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是否可以获得内联汇编的示例?  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我将在下周左右向 OpenPRU 和 PRU Academy 添加内联汇编示例。

    如果您需要在本周观看该视频、请参阅 PSSP:
    https://software-dl.ti.com/processor-sdk-linux/esd/AM64X/11_01_05_03/exports/docs/common/PRU-ICSS/PRU-Getting-Started-Labs_Lab2.html
    https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/labs/Getting_Started_Labs 

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Nick!
    我在使用  PRUICSS 驱动程序加载 AM2612 上以 C 语言编写的 PRU 固件时遇到问题、您能否提供权变措施?

    LP-AM261:以编程方式在 PRU 上加载 C 应用程序时出现的问题(卡在_TI_decompress_lzss 中)-基于 Arm 的微控制器论坛 — 基于 Arm 的微控制器 — TI E2E 支持论坛

    此致
    Daniel

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Daniel

    我遇到了相反的问题、无法通过 JTAG  AM2432 加载:无法将程序加载到 PRU 中 

    谢谢

    Rasty

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rasty、

    跟踪离线的几条评论:

    1) MAC 操作实现不一致

    您是否检查过不同的优化级别以查看是否获得不同的输出?

    几年前、我迷惑了 PSSP MAC 示例、所以我不记得装配体是什么样子。 我在 makefile 中似乎使用了优化级别 2 (-O2):  https://git.ti.com/cgit/pru-software-support-package/pru-software-support-package/tree/examples/am64x/PRU_MAC_Multiply_Accum makefile/Makefile

    但您可以将 优化从无更改为 4
    C 代码优化:-O (off、0、1、2、3、 4)

    2) MAC 操作的建议组装实现

    我可以向您介绍几个不同位置的现有资源、也可以在几周内发布 PRU 学院后回旋、然后可以指向一个内联汇编示例、您可以将其与上面列出的 MAC 汇编示例结合使用。 请告诉我您喜欢哪个。

    此致、

    Nick

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    1) 请 您查看此主题的第一条消息。 我做了这种重新采样 — 代码生成不依赖于编译器标志。  

    2) 我可以等待几个星期。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Rasty、

    好的。 请将日历提醒设置为在 10 月初 ping 我。

    此致、

    Nick