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.

[参考译文] TDA2EX17EVM:OCMC RAM 执行速度

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/668124/tda2ex17evm-ocmc-ram-execution-speed

器件型号:TDA2EX17EVM

您好!

我们对 PRCM 模块有一些观察结果。

由于这是 Vision SDK 的一部分、 我们需要输入来解决我们观察到的问题。

 

我们需要确保 OCMC RAM 上的执行也具有良好的性能。

我们调试并了解了一些可能影响性能的因素。

 

我们的理解/观察:

 

  1. 我们通过运行 get_PRCM_config.gel 来检查 PRCM 配置。

执行同样的操作后、可以观察到、根据 CCS 控制台上显示的消息、MPU 的 DPLL 配置为1GHz。

 

  1. 此外、在尝试查找 API 时序时、我们有以下查询:

 

  • MPU (A15)通过 L3主系统访问 OCMC RAM。
  • L3主域相应地来自 CORE_CLK 和 CORE_X2_CLK。
  • CORE_X2_CLK 在寄存器 CM_DIV_H12_DPLL_CORE 中使用寄存器地址0x4A00513C 进行配置。

 

  • VSDK 2_12_3中的当前配置 为  CM_CORE_AON_CKGEN_CMV_DIV_H12_DPLL_CORE (0x4A00513C) =  0x00000204。

观察到的 CAN_write()的 API 时序为40ms。

 

  • 将该寄存器设置更改为 0x00000202时

观察到的 CAN_write()的 API 时序约为30ms

 

请回复您对此的评论。

此致、

Shivanand

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

    L3不支持高于266MHz 的频率。
    您不应修改此设置、因为您不能超频 L3。

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

    通过 PRCM 方法、我们可以看到 A15配置为1GHz。
    我们在环路中切换了 GPIO 引脚、并观察到频率为18MHz。

    我们知道引导加载程序以较低的频率在 OCMC RAM 上执行指令。
    如何改进这一点?

    2.如果 L3的最大时钟频率为266MHz,这是否意味着在 OCMC 上运行的软件将为266MHz?

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

    切换 GPIO 引脚时、您可以从 A15进行访问、这会导致访问延迟。 用于访问 GPIO 的 IOS/焊 球不支持1GHz 频率。 GPIO 寄存器也位于不可高速缓存的空间中。 因此、您无法通过切换环路中的 GPIO 引脚来测量频率。
    引导加载程序正在 A15上执行以1GHz 运行的指令。 OCMC 内存以266 MHz 运行。

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

    您能告诉我们最终目标是什么吗?

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

    我们在 A15上构建了 MCAL 驱动程序、但在 DDR 上执行。
    可以观察到 CAN_Write()的 API 时序大约为100微秒。

    该驱动程序现在与在 OCMC RAM 上执行的引导加载程序集成。
    我们观察到 CAN_write()的 API 时序大约为40毫秒。

    这个定时比较高、会影响下载速度。
    目的是提高性能。

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

    您应该会看到与 OCMC 和 DDR 类似的数字。
    1.能否运行 GEL 文件并检查 L3运行的频率。 应为266 MHz。
    2.执行 CAN_write()时是否启用了 I cache? RBL 默认启用 I Cache。 在这两种情况下都应启用 I Cache。
    3.执行 CAN_write()时 D Cache 的状态是什么。 OCMC 和 DDR 的 MMU 配置是什么? 对于具有 OCMC 和 DDR 映射的 MMU 页面、也应全局启用 D 高速缓存。

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

    运行 PRCM_Config.gel 时、我们观察 MPU、内核、IPU 等的 DPLL 频率。
    DDR 的频率为388MHz
    MPU 的频率为1GHz
    IPU 为212MHz

    但不适用于 L3主系统。 如何检查 L3?

    2.为在 DDR 上运行的 MCAL 启用高速缓存。 但不适用于 OCMC RAM。 我们之前曾尝试使用 VSDK 示例启用高速缓存。
    我们无法观察到任何变化的结果。 如果您指导我们为 OCMC RAM 配置相同的配置、将会有所帮助。

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

    您能否共享您正在使用的 PRCM_Config.gel。
    您应该查看 cache_a15.h 以了解如何使用缓存。
    您能回答2和3个问题。
    您可以使用 CACHEA15GetEnabled API 查看启用了哪些缓存。

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

    在 CACHEA15GetEnabled()中,我们观察到 I 和 D 高速缓存均已启用。

    我可以在此平台上共享 GEL 文件吗?

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

    您可以在此处共享 GEL 文件。
    如果你能作一个比较详细的答复,以便不会出现混乱,我将不胜感激。
    我假设在两种情况下都启用了 I cache 和 D cache、即从 OCMC 和 DDR 执行 CAN_Write 时。
    如果是这种情况、OCMC 的高速缓存策略是什么? 您能否在启用 MMU 的位置共享代码片段?

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

    我通过电子邮件共享了 GEL 文件和代码片段。

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

    Shivanand、您好!

    我没有收到任何电子邮件。
    此外、我希望在 e2e 上保持这种支持、因此在此分享代码片段和 GEL。
    谢谢。

    此致、
    Rishabh

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

      e2e.ti.com/.../TDA2Ex_5F00_prcm_5F00_config.gel

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

    在上述帖子中、我共享了用于启用缓存的 GEL 文件和代码片段。

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

    我看到、与 TI 共享的代码相比、您对代码进行了更改以启用 MMU。
    您能否使用原始代码尝试 MMU 配置。
    您所做的修改有多个问题:
    1.对于0x4000_0000区域、您将第一级描述符设置为块、这意味着不需要第二级描述符。 定义第二级描述符不会产生任何影响。
    2.二级描述符的大小为2 MB,因此不能从0x4030_0000开始。

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

    您好、Rishabh、

    有关缓存和 MMU 的这些更改是由 Prasad 进行的。 会话期间为 j。
    无论如何、我们使用您之前共享的函数替换了函数、并测试了相同的函数。

         观察结果是 CAN-Write()的 API 时序下降至11ms。

    这似乎是一个很好的改进。 但是、与100微秒相比、它非常高。

    可以为此做些什么?

    2.上述观察结果是在调试模式下进行的。

    在独立/QSPI 模式下、流经电路板的电流约为0.15A、我们怀疑未发生引导。

    而不启用高速缓存的软件可以正常启动。

    为什么会这样?

    此致、
    Shivanand

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

    我建议您详细解释您所面临的问题。
    您的软件到底在做什么?
    DDR 与 OCMC 的变化是什么?
    为什么尝试调试 wrt Cache 和 MMU?
    共享代码是否第一次不起作用?
    启用高速缓存时、这意味着已发生引导且引导加载程序已在运行。
    您确切地说、引导没有发生?

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

    您以前共享的代码不能单独运行。

    在与 Prasad.J 进行调试会话期间、对 w.r.t 高速缓存和 MMU 进行了一些修改。
    但是,这也不能单独工作。

    以前、我们没有使用该代码测量 API 时序。
    现在、我们观察到与.r.t API 时序存在一些差异。

    在 DDR 和 OCMC 上运行的软件之间的区别如下:
    DDR -为 DDR 启用高速缓存- API 计时:100微秒-在调试模式中检查
    OCMC-根据您共享的代码片段启用高速缓存- API 计时:10毫秒-已在调试模式中选中

    这在 QSPI 模式下不起作用。
    禁用缓存的代码-工作正常、我们观察帧。
    启用高速缓存的代码-不响应任何请求。

    流入电路板的电流也会随这2个 SWS 的变化而变化。
    禁用高速缓存的代码- 0.24A
    启用高速缓存的代码- 0.15A

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

    您好、Rishabh、

    请答复上述评论。

    如果我们尽快就此得出结论、那将是有益的。

    此致、

    Shivanand

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

    Shivanand、您好!

    您能回答我的第一个问题。 您的软件到底在做什么? 您能解释一下 SW 流程。

    您还会说、以前代码不是独立运行的、现在同一代码是独立运行的。

    我无法理解问题中提到的三种模式之间的区别:独立模式、QSPI 模式和调试模式。

    此外、对于 SBL 引导、您需要我在2017年12月22日共享的所有更改。 在 SBL_lib_tda2xx_platform.c 中添加缓存无效 API 调用后、您是否尝试过?

    此致、

    Rishabh

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

    1.独立-->指 QSPI 引导模式。
    软件是通过 VSDK 2.12.3开发的引导加载程序。 我们已将 VSDK 与 MCAL 驱动程序集成。
    软件会像在 VSDK 中一样执行初始化/引导功能、在没有应用映像的情况下、CAN 驱动程序应处理接收到的请求。 此操作期间的 API 时序为高电平。

    3、这个软件只在调试模式中被检查。 现在、当我们在 QSPI 模式下检查相同项时、它会失败。

    是的,已按照我们之前的讨论添加了 CacheInvalidate () API。 我们仍然观察到同样的问题。

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

    Flow wrt DDR 和 OCMC 有何区别? SBL 始终从 OCMC 运行。
    CAN 驱动程序在何处运行?

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

    用于 DDR 的软件包括- MCU_init、启用高速缓存、然后启用 CAN 驱动程序处理请求。

    OCMC 软件包括 CAN 驱动程序和 VSDK。

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

    这里有两个问题:
    1.在为 OCMC 区域启用高速缓存的 OCMC RAM 中运行 CAN 驱动程序时、用例不起作用。
    2.调试模式下 DDR (100微秒)与 OCMC (10ms)的性能问题。

    我的问题是关于第二个问题。 流量有何差异? 您能不能像 A -> B -> C 那样以流程图的方式进行解释

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

    [引用 user="Rishabh Garg"]Hi Shivanand、

    这里有两个问题:
    1.在为 OCMC 区域启用高速缓存的 OCMC RAM 中运行 CAN 驱动程序时、用例不起作用。
    2.调试模式下 DDR (100微秒)与 OCMC (10ms)的性能问题。

    我的问题是关于第二个问题。 流量有何差异? 您能不能像 A -> B -> C 那样以流程图的方式进行解释

    此致、
    Rishabh

    [/引述]Hi   Rishabh、

    我已附上分别为 OCMC 构建的 CAN 驱动程序和为 DDR 构建的 CAN 驱动程序中使用的片段的屏幕截图、这些片段涉及高速缓存存储器。

    在您共享的缓存代码和为 DDR 构建的代码中观察到一些变化。

    我已在附件中突出显示了它们。

    在将这些差异纳入 OCMC 上运行的代码后、我们观察到高速缓存代码在执行时没有创建任何异常。

    这在调试和 QSPI 引导模式下都能正常工作。

    您能告诉我这些区别是什么吗?

    同样的影响是什么?

    图像左侧的代码是否正确? -这似乎起作用了

    我们如何验证高速缓存是否已正确启用?

    我们希望仅为 CAN 启用缓存。

    我们如何确保或检查是否为整个引导加载程序启用了缓存、还是仅为 CAN 启用了缓存?

    此致、

    Shivanand

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

    Shivanand、您好!

    我已回答您的以下问题:

    无法为外设启用高速缓存。 已为存储器区域启用高速缓存。 第二级描述符的大小为2 MB、因此可以为最小2 MB 的区域启用高速缓存。 例如、0x4000_0000至0x4020_0000。

    OCMC_RAM1起始地址为0x4030_0000、大小为512 KB、因此将为0x4020_0000到0x4040_0000的整个区域启用高速缓存。

    左侧的代码与您之前共享的代码相同。 我以前也曾说明过以下问题:
    1.对于0x4000_0000区域、您将第一级描述符设置为块、这意味着不需要第二级描述符。 定义第二级描述符不会产生任何影响。
    2.二级描述符的大小为2 MB,因此不能从0x4030_0000开始。
    总之、未在左侧的代码中为 OCMC 启用高速缓存。

    我建议您浏览 ARM 文档 static.docs.arm.com/.../DDI0406C_C_arm_architecture_reference_manual.pdf 的"B3.6长描述符转换表格式"一章

    此致、
    Rishabh

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

    我在上一个帖子中提到的修正。
    右侧的代码是目前配置的代码、似乎随着 API 时序的减少而起作用。

    您能回答以下问题吗?请转至右侧的代码段:

    右侧配置是否正确?
    我们如何验证高速缓存是否已正确启用?

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

    Shivanand、您好!

    右侧的代码为 DDR 存储器区域启用高速缓存。
    未为 OCMC 启用高速缓存。
    您可以使用 API CACHEA15GetEnabled 来查看是否启用了高速缓存。

    此致、
    Rishabh

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

    需要在右侧代码中进行哪些修改才能为 OCMC RAM 启用高速缓存。

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

    我之前已经分享过修改后的代码(12月22日)。 左侧的代码是在我共享的原始代码基础上进行更改的代码。
    Prasad 已安排远程调试以快速解决此问题。 您能否检查邮件。

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

    我将关闭此 e2e 线程、因为它由 Prasad over WebEx 提供支持。
    如果您需要任何帮助、可以随时在此处发布答复、或者如果此线程由于不活动而锁定、则启动新线程。

    此致、
    Rishabh