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.

[参考译文] AM5728:GPMC 读取延迟

Guru**** 2595770 points
Other Parts Discussed in Thread: AM5728

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/640355/am5728-gpmc-read-latency

器件型号:AM5728

您好!

根据代码的执行次数、GPMC 读取访问会受到影响。
GPMC 寄存器设置如下。

GPMC_CONFIG1_I 0x60 0x00601211
GPMC_CONFIG2_I 0x64 0x00090902
GPMC_CONFIG3_I 0x68 0x00010100
GPMC_CONFIG4_I 0x6C 0x06030903
GPMC_CONFIG5_I 0x70 0x00090A0A
GPMC_CONFIG6_I 0x74 0x86020281
GPMC_CONFIG7_I 0x78 0x00000F42

在 GPMC 读取访问期间、
当 CortexA15执行40多条指令时、GPMC 访问会产生170ns 的延迟。
为什么会发生这种延迟?
请告诉我如何解决延迟问题。

①call _16_READ:
call_16_read:

ldrh R10、[r0]/* r0 = GMPC LSC0上的地址*/
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
BX LR

GPMC 读取之间无指令->无延迟

②call _16_read20:

ldrh R10、[r0]/* r0 = GMPC LSC0上的地址*/

ldrh R9、[R1]/* R1 =堆栈上的地址(将以 cach 为单位)*/
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]

ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]


ldrh R10、[r0]/* r0 = GMPC LSC0上的地址*/
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
BX LR

在 GPMC 读取之间添加了20行指令->在访问添加的代码之间无延迟

③call _16_read40:

call_16_read40:

ldrh R10、[r0]/* r0 = GMPC LSC0上的地址*/

ldrh R9、[R1]/* R1 =堆栈上的地址(将以 cach 为单位)*/
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]

ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]

ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]

ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]
ldrh R9、[R1]

ldrh R10、[r0]/* r0 = GMPC LSC0上的地址*/
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
ldrh R10、[r0]
BX LR

在 GPMC 读取之间添加了40行指令-在访问添加的代码之间增加了170ns 的延迟

此致、
新义郎

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

    这是由客户编写的测试汇编代码。 我正在检查客户使用的处理器初始化代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tsutda-San、

    请参阅这些论坛主题中的建议。
    e2e.ti.com/.../43106
    e2e.ti.com/.../176382
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shin-San、

    感谢您的快速回复。

    我们的客户似乎大多数应用都是单存取 GPMC。
    因此、它不使用突发访问以及 DMA 和 NEON。

    介绍线程似乎建议使用 DMA、因此它似乎与此问题不同。
    GPMC 访问延迟是一个问题、具体取决于代码量。
    还有其他信息吗?

    此致、
    新义郎

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

    Tsutda-San、

    我们最近在 Processor SDK RTOS 中为 Sitara 器件 AM335x 和 AM437x 添加了 GPMC 驱动程序支持。

    我为并行访问提供了 RTOS 配置的代码片段、NOR 也可用作参考(下面提供了 AM355x 配置)

    在 ARM 上缓存 MMU 设置以供您参考

    /*========================= 高速缓存和 MMU 配置=================== //
    
    var Cache = xdc.useModule('ti.sysbios.family.arm.a9.Cache');
    cache.enableCache = true;
    cache.configureL2Sram = false;//DDR build
    
    var MMU = xdc.useModule('ti.sysbios.family.arm.a8.Mmu');
    MMU。enableMMU = true;
    
    //强制外设部分为不可高速缓存的严格排序内存*/
    var peripheralAttrs ={
    键入:MMU.FirstLevelDesc_section,//段描述符
    TEX:0、
    可缓冲:false, //可缓冲
    可高速缓冲:false, //可缓存
    可共享:false, //可共享
    NoExecute:true, //不可执行
    };
    
    //定义外设驻留的1Meg 页的基址。 //
    var norBaseAddr1 = 0x08000000;
    
    //相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(norBaseAddr1,
    norBaseAddr1、
    peripheralAttrs);
    
    /*定义外设所在的1Meg 页的基址。 //
    //* var norBaseAddr2 = 0x09100000;*/
    var norBaseAddr2 = 0x08100000;
    
    //相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(norBaseAddr2,
    norBaseAddr2、
    peripheralAttrs);
    
    //定义外设驻留在的1兆页的基址。 //
    var gpmcBaseAddr = 0x50000000;
    
    //相应地配置相应的 MMU 页描述符*/
    Mmu.setFirstLevelDescMeta(gpmcBaseAddr,
    gpmcBaseAddr、
    peripheralAttrs);
    

    希望这对您有所帮助。

    此致、

    Rahul

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    由于 AM572x 具有 A15内核、因此您可以参阅 Stuart 和 Eric 之间关于设置 MMU 以进行 GPMC 访问的以下讨论:

    e2e.ti.com/.../592105

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

    这是一篇讨论此主题的非常好的 wiki 文章、供您参考。
    processors.wiki.ti.com/.../Common_Issue_Resulting_in_Slow_External_Memory_Performance
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Shin-San、

    感谢您的快速回复。

    如果有很多 FPGA 的单一访问、并且他们希望实现尽可能快的访问、那么 GPMC 应该更好地满足以下哪一项要求?
    1.设置为高速缓存区域
    2.设置为不可高速缓存区域

    对于 Rahul-San 的应答和闪存设置、它似乎被设置为非缓存和严格排序的存储器区域。

    您的简介的 wiki 网站具有以下说明。
    ·设置为高速缓存区域
    ·多条加载指令

    此致、
    新义郎

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

    如果 GPMC 可访问的 FPGA 存储空间只能由 AM5728更改(即数据不会因 FPGA 活动而更改)、则应将 FPGA 的 GPMC 存储空间设置为可级联。 否则、应将其设置为不可级联。