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.

[参考译文] J784S4XEVM:来自 c7x 和 ARM 的 LPDDR4并发访问

Guru**** 2470720 points
Other Parts Discussed in Thread: J784S4XEVM

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1467176/j784s4xevm-lpddr4-concurrent-accesses-from-c7x-and-arm

器件型号:J784S4XEVM

工具与软件:

您好!

我们将使用 j784s4 SoC 设计电路板。

在 Jacinto SoC 上、我们将使用在其上运行的 Linux 的 ARM 内核、以及用于某些应用的 C7x DSP 内核。 两种类型的处理器都将使用 LPDDR4、我们想评估每种处理器在并发访问 LPDDR4期间使用 LPDDR4的能力、而不影响其他处理器的性能。 实际上、在我们将要设计的定制电路板上、我们计划具有2个 LPDDR4存储体、我们想要单独使用每个存储体、一个用于 ARM 内核、一个用于 C7x 内核。

我们的目的是尝试在 EVM 上获取与定制电路板类似的配置、并确保在访问 LPDDR4时 ARM 内核不会影响 DSP 内核性能。

对于该测试、我们使用了 J784S4XEVM。 对于 Linux、使用的 SDK 是 ti-processor-sdk-linux-adas-k784S4-evm-09_00_00_08;对于 C7x 应用程序、使用的 SDK 是 ti-processor-sdk-rtos-j784S4-evm_09_01_00_06。

为了配置 LPDDR4组、我们使用了 SPRACU8B_Jacinto7_DDRSS_RegConfigTool 和 SPACU8B 数据表、其中介绍了如何使用该工具。

我们将描述所执行的测试之一、该测试看起来最简单、但我们还尝试了其他一些配置、结果始终相同。

使用的配置如下:

我们对该配置的理解是、该工具将2 DDRSS 0和1配置为在 DDRSS0上与0.5GB 和在 DDRSS1上与8GB 一起使用。

在 DDRSS0和 DDRSS1之间配置的交错大小为1GB、粒度为512MB。 我们的理解是、通过此配置、我们可以在 DDRSS0和 DDRSS1之间没有交错。

借助该工具、我们可以生成 k3-j784s4-ddr-evm-lp4-4266.dtsi 文件来更新 u-boot、并生成 board_ddrRegInit.h 文件来更新 C7x 应用程序的 LPDDR4映射。

我们要做的是在 Linux 端使用 LPDDR4的前0、5GB、在 c7x 端使用 LPDDR4的其余部分。

dtsi 文件已在 U-boot 中替换、并且所有 u-boot 组件都已重建。

在 U-boot 中、为了将 LPDDR4的 Linux 使用限制为前0、5GB、我们通过添加 mem=512M 配置了 u-boot 环境变量 args_all

在 Linux 引导后、我们实际上可以观察到所使用的存储器是 LPDDR4从0x80000000变为0x9FFFFFFF 的前512 MB。

此配置完成后、我们编译了将在 Linux 上运行以进行 LPDDR4访问的"流"基准测试。

现在已配置 Linux 端、并且我们拥有可使用流基准测试通过 Linux 对 LPDDR4进行多次访问的基准测试、因此我们还需要能够访问 LPDDR4的 DSP 应用程序。

为此、我们在 packages/ti/drv/udma/examples 中使用了 RTOS-SDK 中的 udma_dru_direct_tr_test。

此测试已经过修改、可在每次测试通过后记录带宽结果。

 在首先为第一个内核重建二进制文件之前、我们将 pdk/packages/ti/board/dsp4/j784s4_evm/include/LPDDR4 board_ddrRegInit.h 配置工具生成的二进制文件替换成了 src。

我们还检查了 pdk/packages/ti/build/j784S4中的文件 linker_c7x_freertos.cmd、以及 C7x DDR 的 DDR0_allocated 变量、应为0xA0000000:

#define DDR0_ASSIGNED_START 0xA0000000

编译后、会生成 udma_dru_direct_tr_testapp_freertos_c7x_1_release.xe71并将其复制到/lib/firmware/vision_apps.中的电路板

已删除所有其他 c7x 应用程序、仅运行第一个 c7x 内核。

 

最后、当电路板启动时、我们会自动启动在 c7x 第一个内核上运行的 DSP 应用。

当我们在 Linux 上启动 STREAM 应用程序时、我们便可直接看到对 c7x 内核测量的带宽的影响。 这意味着通过 ARM 端访问 LPDDR4会影响和降低 访问 LPDDR4的 DSP 性能。

您是否知道我们的测试可能有什么问题?

感谢你的帮助。

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

    您好!

    我将检查此内容并很快进行更新。

    此致、
    Sivadeep

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

    您好!

    您能否告诉我们本实验使用的是哪个 TI SDK 发布版本?

    谢谢。

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

    您好!

    为 ARM 和 C7x 内核分离存储器组可减少争用、但共享 MSMC 仍会带来一些影响。 为了缓解这种情况、C7x 内核可以优先于 ARM 集群、并且高级信用额度预留方案可以更有效地分配带宽。

    为了实现出色的 C7x 性能、多级预取和数据局部性是关键:

    • 流引擎(SE) 处理专用 L2缓存和 MSMC 之间的数据。
    • 数据路由单元(DRU) 在 DDR、MSMC 和 L2高速缓存之间移动数据。

    ARM 优先级在中管理 Eagle’s Nest 、而 C7x 优先级在本地控制 UMC . SES 使用 乒乓缓冲器中 以实现高效、重叠的数据传输和处理、确保高性能。

    此致、
    Sivadeep

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

    您好!  

    感谢您的回答。

    对于 Linux、使用的 SDK 是 ti-processor-sdk-linux-adas-k784S4-evm-09_00_00_08;对于 C7x 应用程序、使用的 SDK 是 ti-processor-sdk-rtos-j784S4-evm_09_01_00_06。

    我目前正在将  udma_dru_direct_tr_testapp_freertos 应用程序用于 c7x 端、如前面所述、这应该是 C7X 性能的最佳应用程序。  

    我会检查鹰巢和 UMC、然后返回给您。  

    如上所述、我们将拥有两个物理 LPDDR4存储体、我们真的希望确保 C7x 侧不受 ARM 内核的影响。

    此致。

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

    您好!
    感谢您的答复。
    如有更新、请告知我们。

    此致、
    Sivadeep