Thread 中讨论的其他器件:AM2612
工具/软件:
你(们)好
我需要一些关于 PRU 编码的建议。
我看到 am243x 与 am572x 之间 PRU 代码生成的差异
为 am577x 与 am243x 生成的代码看起来有些不同。
有人能说明 am243x 上的整数乘法(16 位和 32 位)机制和效率吗?
谢谢
Rasty


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.
我建议使用乘法累加小工具来实现这一点。 希望本示例对以下示例有所帮助: 位于·Texas Instruments/open-PRU 处的 open-pru/academc/mac_multiple
有关理论、请参阅 TRM: AM64x/AM243x 技术参考手册(修订版 H)
PRU_ICSSG 宽边接口使 AM243x 上的 PRU 内核能够与具有累积功能的集成乘法器 (MPY/MAC) 加速器进行通信。 此接口使用 XFR 指令直接访问一组专用的 PRU 寄存器 (R25-R29)、这些寄存器控制 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 的功能直接映射到一组特定的 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
您好、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 固件时遇到问题、您能否提供权变措施?
此致
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