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.

[参考译文] TCM-AM263X:MCU-PLUS-SDK 启用

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1371469/mcu-plus-sdk-am263x-tcm-enable

器件型号:MCU-PLUS-SDK AM263X
主题中讨论的其他器件:AM2634

工具与软件:

您好!

我目前正在研究将代码放置在 AM2634平台上的紧耦合存储器中、以提高关键代码段的性能。  

将测试代码放置在 TCM 中并将其执行与 OCRAM 进行比较后、CPU 周期数完全相同。 我已经使用映射文件和使用调试器检查存储器区域、确认了已将代码放置在正确的存储器区域中。

查看第 7.1.3.2.2节紧耦合存储器(TCM)中 TRM 的信息、我发现以下内容提到需要启用 TCM:

通过搜索参考手册和寄存器附录、我找不到任何提及的使能位或任何其他确认 TCM 是否启用的方法。

是否可以获得更多有关如何启用 TCM 以及如何确认 R5F 内核在运行时使用 TCM 的信息?

谢谢!

Carwyn

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

    尊敬的 Carwyn:

    当您将 AM2634连接到调试器并在 CCS 中打开"Memory"浏览器时、您能否查看 MEMORY 区域? 例如、如果我从 SDK 运行 UART Echo 示例、则存储器浏览器中的 TCM 视图如下:

    TCMA 起始地址:0x40、长度= 0x7FC0

    TCMB 起始地址:0x80000、长度= 0x8000。

    TCM 的启用不会在应用程序中完成。 您可以在"Memory Configurator (内存配置器)"部分->"Memory region (内存区域)"->"Regions"中在您的应用的 example.syscfg 中查看 TCM 配置。

    我最好的猜测是您的 OCRAM 已缓存。 因此、无论您执行何种读取/写入操作、都不会从实际 RAM 中进行、而是获取/写入高速缓存存储器的数据。 TCM 是一个单周期存取零等待状态存储器、因此读取写入在理论上应该需要1个 CPU 周期、而 OCRAM 将需要更多的时间。

    在 example.syscfg 中的 MPU Config 中、尝试将 OCRAM 区域标记为非缓存、并尝试重新构建示例和基准测试。

    此致、

    Shaunak

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

    尊敬的 Shaunak:

    是的、我可以在 CCS 中看到 TCM 的存储器区域、并且可以确认测试的所有函数均已放置在这里。

    我已经按照您的建议在 MPU 中将 OCRAM 设置为非缓存、可以确认它所用的时间确实比设置为缓存所用的时间要长得多。  这就解释了 OCRAM 中的存储器如何能够以与 TCM 中存储器相同的速率运行。

    您能建议如何为 TCM 区域配置 MPU 吗?  

    谢谢!

    Carwyn

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

    尊敬的 Carwyn:

    我想说不是一般性推荐的 配置、而是特定于用例。 这是我过去在一些性能评测活动中使用的方法。

    TCMA (TCMA):

    TCMB:

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    我测试了被配置为缓存和非缓存的 TCM、发现 CPU 周期数没有差异、但周期数略少于 OCRAM 缓存存储器。

    能否详细介绍一下 MPU 区属性的实际变化流程? 是否有一个正在更改的寄存器字段?

    谢谢!

    Carwyn

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

    尊敬的 Carwyn:

    将 TCM 标记为缓存或非缓存不会有任何差异。 我想知道您使用 TCM 时得到的存储器存取延迟是多少? 这是您的用例的问题吗? TCM 是零等待状态单周期访问存储器、当它被缓存或未缓存时则没有区别。  

    在 example.syscfg 中更改区域属性会执行以下操作:

    1.将内存区域设置为可缓存、可共享、可缓冲、允许从区域执行代码的权限  

    2.这些更改在 ti_dpl_config.c 中完成、该文件是由 syscfg 自动生成的。 启动应用时会调用 MPU init、并根据上述配置设置 MPU 属性(MpuP_armv7r_asm.S):

    3.您可以在 ARM R5F 文档中阅读有关修改的寄存器的信息: developer.arm.com/.../Region-attributes

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    感谢提供的所有信息、它非常有帮助、并阐明了 TCM 的配置方式。

    从运行简单计数器进行测试开始、记录的 CPU 周期如下所示:

    TCM - 22220
    OCRAM 缓存- 22329
    OCRAM 非高速缓存- 156730

    根据该测试得出的结论是、TCM 略优于缓存的 OCRAM、但明显优于非缓存的 OCRAM。

    谢谢!

    Carwyn

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

    尊敬的 Carwyn:

    TCM 和高速缓存的访问延迟几乎相同。 此处可能发生的情况是:

    场景1:TCM 与 OCRAM 缓存(所有缓存命中)

    在本例中、您将获得几乎相似的周期、就像 CPU 必须从高速缓存而不是实际 RAM 中获取的周期一样。 因此、TCM 和 OCRAM 中的 CPU 周期几乎相同。

    Sceanrio-2:TCM 与 OCRAM 缓存间的关系(发生某些缓存未命中)

    这是我觉得发生在你上面分享的数据. 在缓存命中的情况下、缓存和 TCM 的访问时间相同、当缓存未命中时、CPU 必须从 RAM 获取数据、而 RAM 会增加周期数并发现差异。

    场景3:TCM 与 OCRAM (非缓存)  

    由于不涉及高速缓存、因此将从 OCRAM 中获取所有数据、因此该场景展示了不涉及高速缓存或任何其他优化的实际原始 OCRAM 延迟。

    此致、
    Shaunak

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

    尊敬的 Shaunak:

    因此、为了澄清一点、TCM 比缓存存储器更具性能优势、因为它避免了缓存缺失、唯一的缺点是 需要在源代码和链接器文件中将每个函数添加至 TCM 存储器? 是这样吗?

    谢谢!

    Carwyn

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

    尊敬的 Carwyn:

    存取缓存存储器和 TCM 所需的 CPU 周期相同。 如果在高速缓存中找不到数据、CPU 会从 OCRAM 中获取这些数据。 TCM 消除了这种情况、并证明是一个优势、因为您手动将数据/功能置于 TCM 中、不会出现"缺失"的情况。

    我建议浏览 ARM R5F 文档: https://developer.arm.com/documentation/den0042/a/Tightly-Coupled-Memory/Performance-of-TCM-compared-to-cache

    此致、
    Shaunak